Multiple-row

Multiple-row subquery's kunnen meer dan één resultaat opleveren. Dan kun je de single-row operators (zoals bijvoorbeeld het = teken) niet gebruiken.

Ze gebruiken multiple-row vergelijkingsoperatoren:
IN
ANY
ALL

De NOT operators kan bij alle drie gebruikt worden.

 

Naar IN zullen we kijken maar ANY en ALL laten we buiten beschouwing in deze cursus.

 

Met de IN operator in de outer query kun je alle rijen selecteren die voorkomen in een lijstje van waarden dat gemaakt is met de inner query.

 

Stel dat we alle namen van werknemers willen die in hetzelfde jaar zijn aangenomen als werknemers van afdeling 90. Eerst moeten we een subquery (inner query) maken om een lijstje op te halen met de jaren waarin werknemers van afdeling 90 zijn aangenomen.

 

SELECT YEAR(hire_date)

FROM employees

WHERE department_id = 90

 

clip0198

 

Die subquery zetten we tussen haakjes en daar zetten we de outer query boven.

 

SELECT last_name, YEAR(hire_date)

FROM employees

WHERE YEAR(hire_date) IN

 (SELECT YEAR(hire_date)

 FROM employees

 WHERE department_id = 90);

 

clip0199

 

 

Multiple-row subquery's zijn altijd veiliger dan single-row subquery's. Vergelijk deze twee query's met elkaar.

 

SELECT first_name, last_name, job_id

FROM employees

WHERE job_id IN

 (SELECT JOB_ID

          FROM employees

         WHERE last_name= 'Ernst' );

 

SELECT first_name, last_name, job_id

FROM employees

WHERE job_id =

 (SELECT JOB_ID

          FROM employees

         WHERE last_name = 'Ernst' );

 

 

Ze hebben beide hetzelfde resultaat.

 

clip0206

 

Waar je = zou gebruiken, werkt IN dus ook altijd. Als je twijfelt: gebruik IN in plaats van =.