ACCENTURE BATCH 2 LABORATORY
MySQL Subquery - Exercises, Practice,
Solution
Page | 1 1. Write a query to find the name (first_name, last_name) and the salary of the
employees who have a higher salary than the employee whose last_name='Bull'.
Sample table: employees
2. Write a query to find the name (first_name, last_name) of all employees who
works in the IT department.
Sample table: employees
3. Write a query to find the name (first_name, last_name) of the employees who
have a manager and worked in a USA based department.
Hint : Write single-row and multiple-row subqueries
Sample table: employees
Sample table: departments
Sample table: locations
4. Write a query to find the name (first_name, last_name) of the employees who
are managers.
Sample table: employees
5. Write a query to find the name (first_name, last_name), and salary of the
employees whose salary is greater than the average salary.
Sample table: employees
6. Write a query to find the name (first_name, last_name), and salary of the
employees whose salary is equal to the minimum salary for their job grade.
ACCENTURE BATCH 2 LABORATORY
Sample table: employees
Sample table: jobs
Page | 2
7. Write a query to find the name (first_name, last_name), and salary of the
employees who earns more than the average salary and works in any of the IT
departments.
Sample table: employees
Sample table: departments
8. Write a query to find the name (first_name, last_name), and salary of the
employees who earns more than the earning of Mr. Bell.
Sample table: employees
Sample table: departments
9. Write a query to find the name (first_name, last_name), and salary of the
employees who earn the same salary as the minimum salary for all departments.
Sample table: employees
Sample table: departments
10. Write a query to find the name (first_name, last_name), and salary of the
employees whose salary is greater than the average salary of all departments.
Sample table: employees
ACCENTURE BATCH 2 LABORATORY
11. Write a query to find the name (first_name, last_name) and salary of the
employees who earn a salary that is higher than the salary of all the Shipping
Clerk (JOB_ID = 'SH_CLERK'). Sort the results of the salary of the lowest to
highest.
Page | 3
Sample table: employees
12. Write a query to find the name (first_name, last_name) of the employees who
are not supervisors.
Sample table: employees
13. Write a query to display the employee ID, first name, last name, and
department names of all employees.
Sample table: employees
Sample table: departments
14. Write a query to display the employee ID, first name, last name, salary of all
employees whose salary is above average for their departments.
Sample table: employees
Sample table: departments
15. Write a query to fetch even numbered records from employees table.
Sample table: employees
16. Write a query to find the 5th maximum salary in the employees table.
Sample table: employees
17. Write a query to find the 4th minimum salary in the employees table.
Sample table: employees
ACCENTURE BATCH 2 LABORATORY
18. Write a query to select last 10 records from a table.
Sample table: employees
Page | 4 19. Write a query to list the department ID and name of all the departments
where no employee is working.
Sample table: employees
Sample table: departments
20. Write a query to get 3 maximum salaries.
Sample table: employees
21. Write a query to get 3 minimum salaries.
Sample table: employees
22. Write a query to get nth max salaries of employees.
Sample table: employees
ACCENTURE BATCH 2 LABORATORY
Structure of 'hr' database:
Page | 5
ACCENTURE BATCH 2 LABORATORY
SOLUTION
MySQL Subquery: Exercise-1 with Solution
Page | 6
Write a query to find the name (first_name, last_name) and the salary of the
employees who have a higher salary than the employee whose last_name='Bull'.
Sample table: employees
Code:
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM employees
WHERE SALARY >
(SELECT salary FROM employees WHERE last_name = 'Bull');
Copy
Explanation :
MySQL Subquery Syntax :
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 7
Here the where comparison operator uses the '>' operator.
ACCENTURE BATCH 2 LABORATORY
MySQL Aggregate Function: Exercise-2 with Solution
Write a query to find the name (first_name, last_name) of all employees who
Page | 8 works in the IT department.
Sample table: employees
+-------------+-------------+-------------+----------+----------
----------+------------+------------+----------+----------------
+------------+---------------+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | EMAIL |
PHONE_NUMBER | HIRE_DATE | JOB_ID | SALARY |
COMMISSION_PCT | MANAGER_ID | DEPARTMENT_ID |
+-------------+-------------+-------------+----------+----------
----------+------------+------------+----------+----------------
+------------+---------------+
| 100 | Steven | King | SKING |
515.123.4567 | 2003-06-17 | AD_PRES | 24000.00 |
0.00 | 0 | 90 |
| 101 | Neena | Kochhar | NKOCHHAR |
515.123.4568 | 2005-09-21 | AD_VP | 17000.00 |
0.00 | 100 | 90 |
| 102 | Lex | De Haan | LDEHAAN |
515.123.4569 | 2001-01-13 | AD_VP | 17000.00 |
0.00 | 100 | 90 |
| 103 | Alexander | Hunold | AHUNOLD |
590.423.4567 | 2006-01-03 | IT_PROG | 9000.00 |
0.00 | 102 | 60 |
| 104 | Bruce | Ernst | BERNST |
590.423.4568 | 2007-05-21 | IT_PROG | 6000.00 |
0.00 | 103 | 60 |
| 105 | David | Austin | DAUSTIN |
590.423.4569 | 2005-06-25 | IT_PROG | 4800.00 |
0.00 | 103 | 60 |
| 106 | Valli | Pataballa | VPATABAL |
590.423.4560 | 2006-02-05 | IT_PROG | 4800.00 |
0.00 | 103 | 60 |
| 107 | Diana | Lorentz | DLORENTZ |
590.423.5567 | 2007-02-07 | IT_PROG | 4200.00 |
0.00 | 103 | 60 |
| 108 | Nancy | Greenberg | NGREENBE |
515.124.4569 | 2002-08-17 | FI_MGR | 12008.00 |
0.00 | 101 | 100 |
ACCENTURE BATCH 2 LABORATORY
| 109 | Daniel | Faviet | DFAVIET |
515.124.4169 | 2002-08-16 | FI_ACCOUNT | 9000.00 |
0.00 | 108 | 100 |
| 110 | John | Chen | JCHEN |
515.124.4269 | 2005-09-28 | FI_ACCOUNT | 8200.00 |
Page | 9 0.00 | 108 | 100 |
| 111 | Ismael | Sciarra | ISCIARRA |
515.124.4369 | 2005-09-30 | FI_ACCOUNT | 7700.00 |
0.00 | 108 | 100 |
| 112 | Jose Manuel | Urman | JMURMAN |
515.124.4469 | 2006-03-07 | FI_ACCOUNT | 7800.00 |
0.00 | 108 | 100 |
| 113 | Luis | Popp | LPOPP |
515.124.4567 | 2007-12-07 | FI_ACCOUNT | 6900.00 |
0.00 | 108 | 100 |
| 114 | Den | Raphaely | DRAPHEAL |
515.127.4561 | 2002-12-07 | PU_MAN | 11000.00 |
0.00 | 100 | 30 |
| 115 | Alexander | Khoo | AKHOO |
515.127.4562 | 2003-05-18 | PU_CLERK | 3100.00 |
0.00 | 114 | 30 |
| 116 | Shelli | Baida | SBAIDA |
515.127.4563 | 2005-12-24 | PU_CLERK | 2900.00 |
0.00 | 114 | 30 |
| 117 | Sigal | Tobias | STOBIAS |
515.127.4564 | 2005-07-24 | PU_CLERK | 2800.00 |
0.00 | 114 | 30 |
| 118 | Guy | Himuro | GHIMURO |
515.127.4565 | 2006-11-15 | PU_CLERK | 2600.00 |
0.00 | 114 | 30 |
| 119 | Karen | Colmenares | KCOLMENA |
515.127.4566 | 2007-08-10 | PU_CLERK | 2500.00 |
0.00 | 114 | 30 |
| 120 | Matthew | Weiss | MWEISS |
650.123.1234 | 2004-07-18 | ST_MAN | 8000.00 |
0.00 | 100 | 50 |
| 121 | Adam | Fripp | AFRIPP |
650.123.2234 | 2005-04-10 | ST_MAN | 8200.00 |
0.00 | 100 | 50 |
| 122 | Payam | Kaufling | PKAUFLIN |
650.123.3234 | 2003-05-01 | ST_MAN | 7900.00 |
0.00 | 100 | 50 |
| 123 | Shanta | Vollman | SVOLLMAN |
650.123.4234 | 2005-10-10 | ST_MAN | 6500.00 |
0.00 | 100 | 50 |
ACCENTURE BATCH 2 LABORATORY
| 124 | Kevin | Mourgos | KMOURGOS |
650.123.5234 | 2007-11-16 | ST_MAN | 5800.00 |
0.00 | 100 | 50 |
| 125 | Julia | Nayer | JNAYER |
650.124.1214 | 2005-07-16 | ST_CLERK | 3200.00 |
Page | 10 0.00 | 120 | 50 |
| 126 | Irene | Mikkilineni | IMIKKILI |
650.124.1224 | 2006-09-28 | ST_CLERK | 2700.00 |
0.00 | 120 | 50 |
| 127 | James | Landry | JLANDRY |
650.124.1334 | 2007-01-14 | ST_CLERK | 2400.00 |
0.00 | 120 | 50 |
| 128 | Steven | Markle | SMARKLE |
650.124.1434 | 2008-03-08 | ST_CLERK | 2200.00 |
0.00 | 120 | 50 |
| 129 | Laura | Bissot | LBISSOT |
650.124.5234 | 2005-08-20 | ST_CLERK | 3300.00 |
0.00 | 121 | 50 |
| 130 | Mozhe | Atkinson | MATKINSO |
650.124.6234 | 2005-10-30 | ST_CLERK | 2800.00 |
0.00 | 121 | 50 |
| 131 | James | Marlow | JAMRLOW |
650.124.7234 | 2005-02-16 | ST_CLERK | 2500.00 |
0.00 | 121 | 50 |
| 132 | TJ | Olson | TJOLSON |
650.124.8234 | 2007-04-10 | ST_CLERK | 2100.00 |
0.00 | 121 | 50 |
| 133 | Jason | Mallin | JMALLIN |
650.127.1934 | 2004-06-14 | ST_CLERK | 3300.00 |
0.00 | 122 | 50 |
| 134 | Michael | Rogers | MROGERS |
650.127.1834 | 2006-08-26 | ST_CLERK | 2900.00 |
0.00 | 122 | 50 |
| 135 | Ki | Gee | KGEE |
650.127.1734 | 2007-12-12 | ST_CLERK | 2400.00 |
0.00 | 122 | 50 |
| 136 | Hazel | Philtanker | HPHILTAN |
650.127.1634 | 2008-02-06 | ST_CLERK | 2200.00 |
0.00 | 122 | 50 |
| 137 | Renske | Ladwig | RLADWIG |
650.121.1234 | 2003-07-14 | ST_CLERK | 3600.00 |
0.00 | 123 | 50 |
| 138 | Stephen | Stiles | SSTILES |
650.121.2034 | 2005-10-26 | ST_CLERK | 3200.00 |
0.00 | 123 | 50 |
ACCENTURE BATCH 2 LABORATORY
| 139 | John | Seo | JSEO |
650.121.2019 | 2006-02-12 | ST_CLERK | 2700.00 |
0.00 | 123 | 50 |
| 140 | Joshua | Patel | JPATEL |
650.121.1834 | 2006-04-06 | ST_CLERK | 2500.00 |
Page | 11 0.00 | 123 | 50 |
| 141 | Trenna | Rajs | TRAJS |
650.121.8009 | 2003-10-17 | ST_CLERK | 3500.00 |
0.00 | 124 | 50 |
| 142 | Curtis | Davies | CDAVIES |
650.121.2994 | 2005-01-29 | ST_CLERK | 3100.00 |
0.00 | 124 | 50 |
| 143 | Randall | Matos | RMATOS |
650.121.2874 | 2006-03-15 | ST_CLERK | 2600.00 |
0.00 | 124 | 50 |
| 144 | Peter | Vargas | PVARGAS |
650.121.2004 | 2006-07-09 | ST_CLERK | 2500.00 |
0.00 | 124 | 50 |
| 145 | John | Russell | JRUSSEL |
011.44.1344.429268 | 2004-10-01 | SA_MAN | 14000.00 |
0.40 | 100 | 80 |
| 146 | Karen | Partners | KPARTNER |
011.44.1344.467268 | 2005-01-05 | SA_MAN | 13500.00 |
0.30 | 100 | 80 |
| 147 | Alberto | Errazuriz | AERRAZUR |
011.44.1344.429278 | 2005-03-10 | SA_MAN | 12000.00 |
0.30 | 100 | 80 |
| 148 | Gerald | Cambrault | GCAMBRAU |
011.44.1344.619268 | 2007-10-15 | SA_MAN | 11000.00 |
0.30 | 100 | 80 |
| 149 | Eleni | Zlotkey | EZLOTKEY |
011.44.1344.429018 | 2008-01-29 | SA_MAN | 10500.00 |
0.20 | 100 | 80 |
| 150 | Peter | Tucker | PTUCKER |
011.44.1344.129268 | 2005-01-30 | SA_REP | 10000.00 |
0.30 | 145 | 80 |
| 151 | David | Bernstein | DBERNSTE |
011.44.1344.345268 | 2005-03-24 | SA_REP | 9500.00 |
0.25 | 145 | 80 |
| 152 | Peter | Hall | PHALL |
011.44.1344.478968 | 2005-08-20 | SA_REP | 9000.00 |
0.25 | 145 | 80 |
| 153 | Christopher | Olsen | COLSEN |
011.44.1344.498718 | 2006-03-30 | SA_REP | 8000.00 |
0.20 | 145 | 80 |
ACCENTURE BATCH 2 LABORATORY
| 154 | Nanette | Cambrault | NCAMBRAU |
011.44.1344.987668 | 2006-12-09 | SA_REP | 7500.00 |
0.20 | 145 | 80 |
| 155 | Oliver | Tuvault | OTUVAULT |
011.44.1344.486508 | 2007-11-23 | SA_REP | 7000.00 |
Page | 12 0.15 | 145 | 80 |
| 156 | Janette | King | JKING |
011.44.1345.429268 | 2004-01-30 | SA_REP | 10000.00 |
0.35 | 146 | 80 |
| 157 | Patrick | Sully | PSULLY |
011.44.1345.929268 | 2004-03-04 | SA_REP | 9500.00 |
0.35 | 146 | 80 |
| 158 | Allan | McEwen | AMCEWEN |
011.44.1345.829268 | 2004-08-01 | SA_REP | 9000.00 |
0.35 | 146 | 80 |
| 159 | Lindsey | Smith | LSMITH |
011.44.1345.729268 | 2005-03-10 | SA_REP | 8000.00 |
0.30 | 146 | 80 |
| 160 | Louise | Doran | LDORAN |
011.44.1345.629268 | 2005-12-15 | SA_REP | 7500.00 |
0.30 | 146 | 80 |
| 161 | Sarath | Sewall | SSEWALL |
011.44.1345.529268 | 2006-11-03 | SA_REP | 7000.00 |
0.25 | 146 | 80 |
| 162 | Clara | Vishney | CVISHNEY |
011.44.1346.129268 | 2005-11-11 | SA_REP | 10500.00 |
0.25 | 147 | 80 |
| 163 | Danielle | Greene | DGREENE |
011.44.1346.229268 | 2007-03-19 | SA_REP | 9500.00 |
0.15 | 147 | 80 |
| 164 | Mattea | Marvins | MMARVINS |
011.44.1346.329268 | 2008-01-24 | SA_REP | 7200.00 |
0.10 | 147 | 80 |
| 165 | David | Lee | DLEE |
011.44.1346.529268 | 2008-02-23 | SA_REP | 6800.00 |
0.10 | 147 | 80 |
| 166 | Sundar | Ande | SANDE |
011.44.1346.629268 | 2008-03-24 | SA_REP | 6400.00 |
0.10 | 147 | 80 |
| 167 | Amit | Banda | ABANDA |
011.44.1346.729268 | 2008-04-21 | SA_REP | 6200.00 |
0.10 | 147 | 80 |
| 168 | Lisa | Ozer | LOZER |
011.44.1343.929268 | 2005-03-11 | SA_REP | 11500.00 |
0.25 | 148 | 80 |
ACCENTURE BATCH 2 LABORATORY
| 169 | Harrison | Bloom | HBLOOM |
011.44.1343.829268 | 2006-03-23 | SA_REP | 10000.00 |
0.20 | 148 | 80 |
| 170 | Tayler | Fox | TFOX |
011.44.1343.729268 | 2006-01-24 | SA_REP | 9600.00 |
Page | 13 0.20 | 148 | 80 |
| 171 | William | Smith | WSMITH |
011.44.1343.629268 | 2007-02-23 | SA_REP | 7400.00 |
0.15 | 148 | 80 |
| 172 | Elizabeth | Bates | EBATES |
011.44.1343.529268 | 2007-03-24 | SA_REP | 7300.00 |
0.15 | 148 | 80 |
| 173 | Sundita | Kumar | SKUMAR |
011.44.1343.329268 | 2008-04-21 | SA_REP | 6100.00 |
0.10 | 148 | 80 |
| 174 | Ellen | Abel | EABEL |
011.44.1644.429267 | 2004-05-11 | SA_REP | 11000.00 |
0.30 | 149 | 80 |
| 175 | Alyssa | Hutton | AHUTTON |
011.44.1644.429266 | 2005-03-19 | SA_REP | 8800.00 |
0.25 | 149 | 80 |
| 176 | Jonathon | Taylor | JTAYLOR |
011.44.1644.429265 | 2006-03-24 | SA_REP | 8600.00 |
0.20 | 149 | 80 |
| 177 | Jack | Livingston | JLIVINGS |
011.44.1644.429264 | 2006-04-23 | SA_REP | 8400.00 |
0.20 | 149 | 80 |
| 178 | Kimberely | Grant | KGRANT |
011.44.1644.429263 | 2007-05-24 | SA_REP | 7000.00 |
0.15 | 149 | 0 |
| 179 | Charles | Johnson | CJOHNSON |
011.44.1644.429262 | 2008-01-04 | SA_REP | 6200.00 |
0.10 | 149 | 80 |
| 180 | Winston | Taylor | WTAYLOR |
650.507.9876 | 2006-01-24 | SH_CLERK | 3200.00 |
0.00 | 120 | 50 |
| 181 | Jean | Fleaur | JFLEAUR |
650.507.9877 | 2006-02-23 | SH_CLERK | 3100.00 |
0.00 | 120 | 50 |
| 182 | Martha | Sullivan | MSULLIVA |
650.507.9878 | 2007-06-21 | SH_CLERK | 2500.00 |
0.00 | 120 | 50 |
| 183 | Girard | Geoni | GGEONI |
650.507.9879 | 2008-02-03 | SH_CLERK | 2800.00 |
0.00 | 120 | 50 |
ACCENTURE BATCH 2 LABORATORY
| 184 | Nandita | Sarchand | NSARCHAN |
650.509.1876 | 2004-01-27 | SH_CLERK | 4200.00 |
0.00 | 121 | 50 |
| 185 | Alexis | Bull | ABULL |
650.509.2876 | 2005-02-20 | SH_CLERK | 4100.00 |
Page | 14 0.00 | 121 | 50 |
| 186 | Julia | Dellinger | JDELLING |
650.509.3876 | 2006-06-24 | SH_CLERK | 3400.00 |
0.00 | 121 | 50 |
| 187 | Anthony | Cabrio | ACABRIO |
650.509.4876 | 2007-02-07 | SH_CLERK | 3000.00 |
0.00 | 121 | 50 |
| 188 | Kelly | Chung | KCHUNG |
650.505.1876 | 2005-06-14 | SH_CLERK | 3800.00 |
0.00 | 122 | 50 |
| 189 | Jennifer | Dilly | JDILLY |
650.505.2876 | 2005-08-13 | SH_CLERK | 3600.00 |
0.00 | 122 | 50 |
| 190 | Timothy | Gates | TGATES |
650.505.3876 | 2006-07-11 | SH_CLERK | 2900.00 |
0.00 | 122 | 50 |
| 191 | Randall | Perkins | RPERKINS |
650.505.4876 | 2007-12-19 | SH_CLERK | 2500.00 |
0.00 | 122 | 50 |
| 192 | Sarah | Bell | SBELL |
650.501.1876 | 2004-02-04 | SH_CLERK | 4000.00 |
0.00 | 123 | 50 |
| 193 | Britney | Everett | BEVERETT |
650.501.2876 | 2005-03-03 | SH_CLERK | 3900.00 |
0.00 | 123 | 50 |
| 194 | Samuel | McCain | SMCCAIN |
650.501.3876 | 2006-07-01 | SH_CLERK | 3200.00 |
0.00 | 123 | 50 |
| 195 | Vance | Jones | VJONES |
650.501.4876 | 2007-03-17 | SH_CLERK | 2800.00 |
0.00 | 123 | 50 |
| 196 | Alana | Walsh | AWALSH |
650.507.9811 | 2006-04-24 | SH_CLERK | 3100.00 |
0.00 | 124 | 50 |
| 197 | Kevin | Feeney | KFEENEY |
650.507.9822 | 2006-05-23 | SH_CLERK | 3000.00 |
0.00 | 124 | 50 |
| 198 | Donald | OConnell | DOCONNEL |
650.507.9833 | 2007-06-21 | SH_CLERK | 2600.00 |
0.00 | 124 | 50 |
ACCENTURE BATCH 2 LABORATORY
| 199 | Douglas | Grant | DGRANT |
650.507.9844 | 2008-01-13 | SH_CLERK | 2600.00 |
0.00 | 124 | 50 |
| 200 | Jennifer | Whalen | JWHALEN |
515.123.4444 | 2003-09-17 | AD_ASST | 4400.00 |
Page | 15 0.00 | 101 | 10 |
| 201 | Michael | Hartstein | MHARTSTE |
515.123.5555 | 2004-02-17 | MK_MAN | 13000.00 |
0.00 | 100 | 20 |
| 202 | Pat | Fay | PFAY |
603.123.6666 | 2005-08-17 | MK_REP | 6000.00 |
0.00 | 201 | 20 |
| 203 | Susan | Mavris | SMAVRIS |
515.123.7777 | 2002-06-07 | HR_REP | 6500.00 |
0.00 | 101 | 40 |
| 204 | Hermann | Baer | HBAER |
515.123.8888 | 2002-06-07 | PR_REP | 10000.00 |
0.00 | 101 | 70 |
| 205 | Shelley | Higgins | SHIGGINS |
515.123.8080 | 2002-06-07 | AC_MGR | 12008.00 |
0.00 | 101 | 110 |
| 206 | William | Gietz | WGIETZ |
515.123.8181 | 2002-06-07 | AC_ACCOUNT | 8300.00 |
0.00 | 205 | 110 |
+-------------+-------------+-------------+----------+----------
----------+------------+------------+----------+----------------
+------------+---------------+
Code:
SELECT first_name, last_name
FROM employees
WHERE department_id
IN (SELECT department_id FROM departments WHERE department_name='IT');
Copy
Explanation :
MySQL Subquery Syntax:
operand comparison_operator
operand IN (subquery)
operand comparison_operator SOME (subquery)
Where comparison_operator is one of these operators
ACCENTURE BATCH 2 LABORATORY
= > < >= <= <> !=
Copy
and IN operator checks whether a value is within a set of values.
Page | 16
For example :
mysql> SELECT 2 IN (0,3,5,7);
-> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
Copy
When used with a subquery, the word IN is an alias for = ANY. Thus, these two
statements are the same:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
Copy
IN and = ANY are not synonyms when used with an expression list. IN can take
an expression list, but = ANY cannot.
ACCENTURE BATCH 2 LABORATORY
Page | 17
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-3 with Solution
Write a query to find the name (first_name, last_name) of the employees who
Page | 18 have a manager and worked in a USA based department.
Sample table: employees
Sample table : departments
Sample table : locations
Code:
SELECT first_name, last_name FROM employees
WHERE manager_id in (select employee_id
FROM employees WHERE department_id
IN (SELECT department_id FROM departments WHERE location_id
IN (select location_id from locations where country_id='US')));
Copy
Explanation:
MySQL Subquery Syntax:
operand comparison_operator
operand IN (subquery)
operand comparison_operator SOME (subquery)
Where comparison_operator is one of these operators
= > < >= <= <> !=
ACCENTURE BATCH 2 LABORATORY
Copy
and IN operator checks whether a value is within a set of values.
For example :
Page | 19
mysql> SELECT 2 IN (0,3,5,7);
-> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
Copy
When used with a subquery, the word IN is an alias for = ANY. Thus, these two
statements are the same:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
Copy
IN and = ANY are not synonyms when used with an expression list. IN can take
an expression list, but = ANY cannot.
ACCENTURE BATCH 2 LABORATORY
Page | 20
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-4 with Solution
Write a query to find the name (first_name, last_name) of the employees who are
Page | 21 managers.
Sample table: employees
Code:
SELECT first_name, last_name
FROM employees
WHERE (employee_id IN (SELECT manager_id FROM employees));
Copy
Explanation:
MySQL Subquery Syntax:
operand comparison_operator
operand IN (subquery)
operand comparison_operator SOME (subquery)
Where comparison_operator is one of these operators
= > < >= <= <> !=
Copy
and IN operator checks whether a value is within a set of values.
For example :
mysql> SELECT 2 IN (0,3,5,7);
-> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
ACCENTURE BATCH 2 LABORATORY
Copy
When used with a subquery, the word IN is an alias for = ANY. Thus, these two
statements are the same:
Page | 22 SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
Copy
IN and = ANY are not synonyms when used with an expression list. IN can take
an expression list, but = ANY cannot.
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-5 with Solution
Write a query to find the name (first_name, last_name), and salary of the
Page | 23 employees whose salary is greater than the average salary.
Sample table: employees
Code:
SELECT first_name, last_name, salary FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
Copy
Explanation:
MySQL Subquery Syntax:
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 24
MySQL AVG() function returns the average value of a set of values or an
expression.
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-6 with Solution
Write a query to find the name (first_name, last_name), and salary of the
Page | 25 employees whose salary is equal to the minimum salary for their job grade.
Sample table: employees
Sample table : jobs
Code:
SELECT first_name, last_name, salary
FROM employees
WHERE employees.salary = (SELECT min_salary
FROM jobs
WHERE employees.job_id = jobs.job_id);
Copy
Explanation:
MySQL Subquery Syntax:
ACCENTURE BATCH 2 LABORATORY
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
Page | 26
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-7 with Solution
Write a query to find the name (first_name, last_name), and salary of the
Page | 27 employees who earns more than the average salary and works in any of the IT
departments.
Sample table: employees
Sample table : departments
Code:
SELECT first_name, last_name, salary
FROM employees
WHERE department_id IN
(SELECT department_id FROM departments WHERE department_name LIKE
'IT%')
AND salary > (SELECT avg(salary) FROM employees);
Copy
Explanation:
MySQL Subquery Syntax:
ACCENTURE BATCH 2 LABORATORY
Page | 28
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 29
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-8 with Solution
Write a query to find the name (first_name, last_name), and salary of the
Page | 30 employees who earns more than the employee whose last name is Bell.
Sample table: employees
Sample table : departments
Code:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >
(SELECT salary FROM employees WHERE last_name = 'Bell') ORDER BY
first_name;
Copy
Explanation:
MySQL Subquery Syntax:
ACCENTURE BATCH 2 LABORATORY
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
Page | 31
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-9 with Solution
Write a query to find the name (first_name, last_name), and salary of the
Page | 32 employees who earn the same salary as the minimum salary for all departments.
Sample table: employees
Sample table : departments
Code:
SELECT * FROM employees
WHERE salary = (SELECT MIN(salary) FROM employees);
Copy
Explanation:
MySQL Subquery Syntax :
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
MySQL MIN() function returns the minimum value in a set of values.
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-10 with Solution
Write a query to find the name (first_name, last_name), and salary of the
Page | 33 employees whose salary is greater than the average salary of all departments.
Sample table: employees
Code:
SELECT * FROM employees
WHERE salary >
ALL(SELECT avg(salary)FROM employees GROUP BY department_id);
Copy
Explanation:
MySQL Subquery with ALL :
Syntax :
operand comparison_operator ALL (subquery)
The word ALL, which must follow a comparison operator, means "return TRUE if
the comparison is TRUE for ALL of the values in the column that the subquery
returns." For example:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
Copy
Suppose that there is a row in table t1 containing (10). The expression is TRUE if
table t2 contains (-5,0,+5) because 10 is greater than all three values in t2. The
expression is FALSE if table t2 contains (12,6,NULL,-100) because there is a
single value 12 in table t2 that is greater than 10. The expression is unknown
(that is, NULL) if table t2 contains (0,NULL,1).
ACCENTURE BATCH 2 LABORATORY
Finally, the expression is TRUE if table t2 is empty. So, the following expression
is TRUE when table t2 is empty :
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
Page | 34 Copy
MySQL AVG() function calculates the average value of a set of values or an
expression.
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-11 with Solution
Write a query to find the name (first_name, last_name) and salary of the
Page | 35 employees who earn a salary that is higher than the salary of all the Shipping
Clerk (JOB_ID = 'SH_CLERK'). Sort the results of the salary of the lowest to
highest.
Sample table: employees
Code:
SELECT first_name,last_name, job_id, salary
FROM employees
WHERE salary >
ALL (SELECT salary FROM employees WHERE job_id = 'SH_CLERK') ORDER BY
salary;
Copy
Explanation :
MySQL Subquery with ALL :
Syntax :
operand comparison_operator ALL (subquery)
The word ALL, which must follow a comparison operator, means "return TRUE if
the comparison is TRUE for ALL of the values in the column that the subquery
returns." For example:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
Copy
Suppose that there is a row in table t1 containing (10). The expression is TRUE if
table t2 contains (-5,0,+5) because 10 is greater than all three values in t2. The
expression is FALSE if table t2 contains (12,6,NULL,-100) because there is a
ACCENTURE BATCH 2 LABORATORY
single value 12 in table t2 that is greater than 10. The expression is unknown
(that is, NULL) if table t2 contains (0,NULL,1).
Finally, the expression is TRUE if table t2 is empty. So, the following expression
Page | 36 is TRUE when table t2 is empty :
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
Copy
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-12 with Solution
Write a query to find the name (first_name, last_name) of the employees who are
Page | 37 not supervisors.
Sample table: employees
Code:
SELECT b.first_name,b.last_name
FROM employees b
WHERE NOT EXISTS (SELECT 'X' FROM employees a WHERE a.manager_id =
b.employee_id);
Copy
Explanation :
MySQL Subquery with EXISTS or NOT EXISTS
If a subquery returns any rows at all, EXISTS subquery is TRUE, and NOT
EXISTS subquery is FALSE. For example :
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
Traditionally, an EXISTS subquery starts with SELECT *, but it could begin with
SELECT 5 or SELECT column1 or anything at all. MySQL ignores the SELECT
list in such a subquery, so it makes no difference.
ACCENTURE BATCH 2 LABORATORY
Page | 38
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-13 with Solution
Write a query to display the employee ID, first name, last name, and department
Page | 39 names of all employees.
Sample table: employees
Sample table : departments
Code:
SELECT employee_id, first_name, last_name,
(SELECT department_name FROM departments d
WHERE e.department_id = d.department_id) department
FROM employees e ORDER BY department;
Copy
Explanation:
MySQL Subquery Syntax:
ACCENTURE BATCH 2 LABORATORY
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
Page | 40
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-14 with Solution
Write a query to display the employee ID, first name, last name, salary of all
Page | 41 employees whose salary is above average for their departments.
Sample table: employees
Sample table : departments
Code:
SELECT employee_id, first_name
FROM employees AS A
WHERE salary >
(SELECT AVG(salary) FROM employees WHERE department_id =
A.department_id);
Copy
Explanation:
MySQL Subquery Syntax:
ACCENTURE BATCH 2 LABORATORY
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
Page | 42
MySQL AVG() function calculates the average value of a set of values or an
expression.
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-15 with Solution
Write a query to fetch even numbered records from employees table.
Page | 43
Sample table: employees
Code:
SET @i = 0;
SELECT i, employee_id
FROM (SELECT @i := @i + 1 AS i, employee_id FROM employees)
a WHERE MOD(a.i, 2) = 0;
Copy
The code have been executed in MySQL Version : 5.4.
Here is the output
---+--------------
i | employee_id
---+--------------
2 | 101
4 | 103
6 | 105
8 | 107
10 | 109
12 | 111
14 | 113
16 | 115
18 | 117
20 | 119
22 | 121
24 | 123
........
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-16 with Solution
Write a query to find the 5th maximum salary in the employees table.
Page | 44
Sample table: employees
Code:
SELECT DISTINCT salary
FROM employees e1
WHERE 5 = (SELECT COUNT(DISTINCT salary)
FROM employees e2
WHERE e2.salary >= e1.salary);
Copy
Explanation:
MySQL Subquery Syntax:
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 45
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-17 with Solution
Write a query to find the 4th minimum salary in the employees table.
Page | 46
Sample table: employees
Code:
SELECT DISTINCT salary
FROM employees e1
WHERE 4 = (SELECT COUNT(DISTINCT salary)
FROM employees e2
WHERE e2.salary <= e1.salary);
Copy
Explanation :
MySQL Subquery Syntax:
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 47
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-18 with Solution
Write a query to select last 10 records from a table.
Page | 48
Sample table: employees
Code:
SELECT * FROM (
SELECT * FROM employees ORDER BY employee_id DESC LIMIT 10) sub
ORDER BY employee_id ASC;
Copy
Explanation:
MySQL Subquery Syntax :
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 49
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-19 with Solution
Write a query to list the department ID and name of all the departments where no
Page | 50 employee is working.
Sample table: employees
Sample table : departments
Code:
SELECT * FROM departments
WHERE department_id
NOT IN (select department_id FROM employees);
Copy
Explanation:
MySQL Subquery Syntax :
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 51
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-20 with Solution
Write a query to get 3 maximum salaries.
Page | 52
Sample table: employees
Code:
SELECT DISTINCT salary
FROM employees a
WHERE 3 >= (SELECT COUNT(DISTINCT salary)
FROM employees b
WHERE b.salary >= a.salary)
ORDER BY a.salary DESC;
Copy
Explanation :
MySQL Subquery Syntax:
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 53
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-21 with Solution
Write a query to get 3 minimum salaries.
Page | 54
Sample table: employees
Code:
SELECT DISTINCT salary
FROM employees a
WHERE 3 >= (SELECT COUNT(DISTINCT salary)
FROM employees b
WHERE b.salary <= a.salary)
ORDER BY a.salary DESC;
Copy
Explanation :
MySQL Subquery Syntax :
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 55
ACCENTURE BATCH 2 LABORATORY
MySQL Subquery: Exercise-22 with Solution
Write a query to get nth maximum salaries of employees.
Page | 56
Sample table: employees
Code:
SELECT *
FROM employees emp1
WHERE (1) = (
SELECT COUNT(DISTINCT(emp2.salary))
FROM employees emp2
WHERE emp2.salary > emp1.salary);
Copy
Explanation:
MySQL Subquery Syntax:
- The subquery (inner query) executes once before the main query (outer query)
executes.
- The main query (outer query) use the subquery result.
ACCENTURE BATCH 2 LABORATORY
Page | 57
ACCENTURE BATCH 2 LABORATORY
Page | 58