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

[SQL] Sub Query 서브 쿼리 사용하기

by 김현섭. 2016. 5. 14.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
SQL - Sub Query
  • 쿼리의 결과를 다른 쿼리의 조건에 대입시킬 수 있다
  • 쿼리 안의 쿼리
  • 조회하려는 대상을 알지 못할 때
  • 조회하려는 대상이 너무 많을 때
  • 조회하려는 대상이 유동적일 때 사용
  • 많이 사용되면 cpu에 부담이 된다
  • 과유불급

기본적으로 사원 정보를 출력하는데
조건 (WHERE)에 쿼리를 넣는다


괄호 안에 쿼리를 넣어 쿼리를 조건으로 넣을 수 있다

하지만 서브쿼리는 결과가 1개만 나오는 것이 아니다
결과가 여러가지라면
조건식에 =(이퀄)이 아닌 IN을 써주면 된다


결과가 1개만 나와야 한다면 = (이퀄) 사용
결과가 여러개 발생한다 IN 사용

만약 서브쿼리를 가져와서 비교를 해야한다면
비교 연산자를 통해 비교가 가능하다



또한 평균보다 +- 500에 해당하는 연봉을 가진 사람을 가져오고 싶다면
서브쿼리를 두개 작성해주면 된다



추가적으로 부서별 최대 연봉을 받는 사람들의 정보를 조회 하자면
우선적으로 그룹핑을 이용해서 부서별로 최대 연봉을 구한다


그 후 오라클의 문법을 이용해서 작성한다


WHERE에서 보면 IN은 하나의 컬럼에 대해서만 값이 비교가 가능한데
오라클은 IN에 대해서는 여러가지 컬럼을 동시에 비교가 가능하다
두개의 로우가 완벽히 일치하는 값만 가져온다

null은 IS NOT NULL로 비교해야 하므로 null 값이 가진 것이 빠진다
null값을 가진 부서까지 출력하고 싶다면
NVL을 사용한다



비교할 때만 0으로 바뀌기 때문에 출력된 값은 null로 표현되는걸 볼 수 있다


# SQL 28번 문제
사원 Zlotkey의 부서에 포함된 모든 부서원들을 출력하라
단 Zlotkey는 출력에서 제외



# SQL 34번 문제
전체 평균 연봉보다 많이 받는 사원들 중 이름에 u가 포함되는 사원들의 부서에서 근무하는 사원들의 사번과 성, 연봉을 출력하시오


이중 서브 쿼리가 들어가는 형태다
일단 출력하고자 하는 컬럼부터 셀렉트를 큰 범주로 진행하고
성에 u가 포함되는 조건과 AND로 연봉이 평균 연봉보다 높은 조건은 갖는 부서명을 출력해 같은 부서안의 부서원들을 출력한다


SELECT 부분에 서브 쿼리를 작성할 수 도 있는데
SELECT ( 서브쿼리 )
       , ( 서브쿼리 )
       , ( 서브쿼리 )
가 가능하다