Exist 서브쿼리

몇개인지는 안 궁금하고 있는지 없는지만 궁금할 땐 exist 서브쿼리를 쓰면 된다 

 

직원이 일하고 있는 (employees 테이블에 정보가 있는) 부서 정보만 알고 싶다면 이렇게

SELECT * 
  FROM departments d 
 WHERE EXISTS (SELECT * 
                 FROM employees 
                WHERE department_id = d.department_id) ;

 

반대로 직원이 없는 부서 정보만 알고 싶다면 NOT EXIST를 쓰면 된다. 

따지자면 서브쿼리에서 NULL을 반환한 애를 가져오자는 건데 NOT IN은 NULL을 못 쓰니까 NOT EXIST는 NULL이 나와도 상관없으니 이걸 쓰는 것도 좋겠다. 

SELECT * 
  FROM departments d 
 WHERE NOT EXISTS (SELECT * 
                     FROM employees 
                    WHERE department_id = d.department_id) ;

 

극단적으로 NULL을 SELECT하자고 써도 제대로 나온다