본문 바로가기
[ Developer ]/Oracle SQL

[SQL] EXIST 값 존재하는지 검색 쿼리

by 김현섭. 2016. 5. 15.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
SQL - EXISTS
값이 존재하는지 없는지에 대한 키워드
존재한다면 값을 가져오고 없다면 가져오지 않는다
EXISTS 앞에 NOT을 붙이면 없는 컬럼이 나온다

# SQL 35번
값을 가지지 않은 부서를 출력하고 싶다면
아래와 같이 서브 쿼리를 작성할 때 NOT EXISTS를 작성한다


응용해서 ST_CLERK를 갖는 부서를 찾고 싶다면 EXISTS로 작성을 하면 된다


# EXISTS 흐름도
  1. 10 ~ 110까지의 전체적인 DEPARTMENT_ID가 존재 (NULL이 아닌 값)
  2. EMPLOYEES E에서 서브 쿼리 안의 E.DEPARTMENT_ID로 값 전달
  3. 순차적으로 넘어 오면서 E1.DEPARTMENT_ID (같은값)에서 비교
  4. 비교되는 즉 순차적인 부서 번호와 같은 부서 번호를 갖는 로우 검사
  5. JOB_ID = 'ST_CLERK'가 있다면 문자 1 Return, 없다면 아무것도 나오지 않는다
  6. NOT EXISTS ( JOB_ID가 ST_CLERK인게 없다면) -> 부서 번호 출력


# SQL 36번

무엇을 찾고 싶은지 정의를 하고 하나씩 찾아간다
조회 하고자 하는 값은 COUNTRIES에 있으므로 조회를 하고
WHERE절에서 NOT EXISTS에서 
COUNTRIES -> LOCATIONS -> DEPARTMENTS 순으로
부서에 정의된 지역을 찾아 NOT EXISTS로 위치한 부서가 없는 국가를 조회한다



두번째 방식으로는 LOCATIONS에 참조되지 않은 COUNTRY를 찾는 방식이다
COUNTRIES에서 COUNTRY_ID가 LOCATIONS에 COUNTRY_ID에 정의된 나라를 찾고
NOT EXISTS로 정의 되지 않은 나라는 찾는다


# SQL 47번


매니저가 아닌 사원을 조회하기 위해 전체 사원(E.EMPLOYEE_ID)에서 매니저 (E1.MANAGER_ID)인 사람을 찾고 NOT EXISTS를 하면 된다