Exists

EXISTS en NOT EXISTS kunnen worden gebruikt voor subquery's.

 

Stel dat je wil onderzoeken welke department_id's in de tabel departments staan en ook bestaan (exist) in de tabel employees.

 

SELECT department_id

FROM departments

WHERE EXISTS

   (SELECT * FROM employees

   WHERE departments.department_id = employees.department_id)

ORDER BY department_id;

 

 

clip0296

 

 

Of juist het tegenovergestelde. Welk department_id komt wel voor in departments maar bestaat niet (not existst) niet in employees?

 

SELECT department_id

FROM departments

WHERE NOT EXISTS

   (SELECT * FROM employees

   WHERE departments.department_id = employees.department_id)

ORDER BY department_id;

 

 

clip0297

 

 

Welke werknemers zijn geen manager?

 

Dat kun je onderzoeken met een SELF JOIN en een SUBQUERY. Bij een SELF JOIN gebruik je dezelfde tabel twee maal met verschillende aliassen. In dit voorbeeld wordt de tabel employees één keer gebruikt als emp en één keer als mgr.

 

SELECT last_name AS not_a_manager

FROM employees e

WHERE NOT EXISTS

 (SELECT *

 FROM employees m

 WHERE m.manager_id = e.employee_id);

 

clip0205