Consultes avançades - Subconsultes d'una fila
-
Quan les subconsultes tornen una sola fila
- Utilitzarem operadors de comparació d’una fila (=, >, >=, <, <=, <>)
-
Sempre
-
Posarem la subconsulta entre parèntesis
-
Posarem la subconsulta a la dreta de la condició de comparació.
-
-
La subconsulta pot fer-se sobre una taula diferent a la de la consulta.
-
Qui treballa al departament de nom Sales?
Qui treballa al departament de nom Sales?* La consulta pot contenir més d’una subconsulta.SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME = 'Sales'); -
Qui treballa al departament de nom Shipping del mateix que la Sra. Rajs?
Qui treballa al departament de nom Shipping del mateix que la Sra. Rajs?SELECT last_name, job_id, salary, department_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Rajs') AND department_id = (SELECT department_id FROM departments WHERE department_name = 'Shipping');
-
Funcions de grup en Subconsultes
-
Podem utilitzar funcions de grup en subconsultes per tal que ens retornin un valor.
Qui guanya menys del sou mitjà?
Qui guanya menys del sou mitjà?SELECT * FROM EMPLOYEES WHERE SALARY < (SELECT AVG(SALARY) FROM EMPLOYEES); -
També podem utilitzar subconsultes a la clàusula
HAVING.A quins departaments tothom cobra més que l’empleat que cobra menys del departament anomenat Marketing?
A quins departaments tothom cobra més que l’empleat que cobra menys del departament anomenat Marketing?SELECT department_id, department_name, MIN(SALARY) FROM EMPLOYEES JOIN DEPARTMENTS USING (DEPARTMENT_ID) GROUP BY DEPARTMENT_ID, DEPARTMENT_NAME HAVING MIN(SALARY) > (SELECT MIN(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME = 'Marketing') );