728x90
반응형
SELECT 1 FROM 테이블명;
- 해당 테이블의 ROW 개수만큼 1을 출력
- 여기서 1은 TRUE를 의미
- WHERE 조건문과 함께 쓰면 해당 조건을 만족하면 1을 반환
- 보통 다중행 서브 쿼리문에서 WHERE 조건절에 (NOT)EXISTS 안의 서브쿼리에서 사용
- EXISTS로 SELECT * FROM EMP 또는 SELECT 1 FROM EMP 등이 논리식에 사용될 때는 실제 값이 아닌 값의 존재 유무가 중요하기 때문에 간단하게 SELECT 1 FROM EMP를 사용
SELECT 1 FROM EMPLOYEES;를 실행하면 SELECT COUNT(*) FROM EMPLOYEES 만큼의 1이 나온다.
WHERE 조건문을 추가해보자.
WHERE 조건문과 함께 쓰면 해당 조건을 만족하면 1을 반환하게 된다.
만족하지 않으면 반환값이 없다.(NULL)
WHERE 문에서 EXISTS과 함께 조건문으로 사용해보자.
직원테이블에서 각 직원들의 부서ID가 부서 테이블의 부서ID에 존재할 때 직원ID와 직원 이름을 뽑는 쿼리이다.
위의 실행 결과 건수와 EMPLOYEES 테이블의 건수를 비교해보자.
먼저 EMP 건수는 107이고
위의 SELECT 1을 사용한 쿼리의 건수는 106이다.
무엇을 의미하는가?
직원 테이블에 있는 한 직원의 부서ID가 부서테이블에 없다는 것이다.
EXISTS 문에서 한 로우가 TRUE가 안되었기 때문에 걸러진 것이다.
확인해보자.
직원 테이블의 DEPARTMENT_ID에 NULL이 존재한다.
하지만 부서테이블을 조회해보니 NULL이 없었다.
따라서 한 건이 걸러진 것이다.