티스토리 뷰

프로그래밍/데이터베이스

서브 쿼리

안싱미 2016. 2. 16. 15:21

서브쿼리

- 쿼리 안의 쿼리.
- 조회하려는 대상을 알지 못할때, 조회하려는 대상이 너무 많을 때, 조회하려는 대상이 유동적일 때 사용한다.

SELECT [COLUMN], [SUB QUERY], [...]

FROM [TABLE]

WHERE [COLUMN OPER SUBQUERY]


예제1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- -----------서브쿼리 예제--------------
SELECT  *
FROM    EMPLOYEES
WHERE SALARY > (
                  SELECT  AVG(SALARY)
                  FROM    EMPLOYEES
               )
;
 
-- 평균 금액에서 +-500 정도 받는 사람들만 조회한다.
SELECT *
FROM    EMPLOYEES
WHERE   SALARY > (
                  SELECT  AVG(SALARY) - 500
                  FROM    EMPLOYEES
               )
AND   SALARY < (
                  SELECT  AVG(SALARY) + 500
                  FROM    EMPLOYEES
               )
ORDER BY SALARY               
;
cs




예제2. 오라클에서만 사용할 수 있는 방법.
1
2
3
4
5
6
7
8
9
10
11
-- 부서별 연봉을 많이 받는 사람들의 정보를 조회하시오.
SELECT  *
FROM    EMPLOYEES
WHERE   ( DEPARTMENT_ID, SALARY ) IN (
                                        SELECT  DEPARTMENT_ID
                                                , MAX(SALARY)
                                        FROM    EMPLOYEES
                                        GROUP   BY DEPARTMENT_ID
                                      )
;
 
cs



결과

이렇게 하면 NULL은 비교가 되지 않는다.
널까지 비교하려면 아래처럼 NVL을 사용해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 부서별 연봉을 많이 받는 사람들의 정보를 조회하시오.
SELECT  *
FROM    EMPLOYEES
WHERE   ( NVL(DEPARTMENT_ID, 0), SALARY ) IN (
                                                SELECT  NVL(DEPARTMENT_ID, 0)
                                                        , MAX(SALARY)
                                                FROM    EMPLOYEES
                                                GROUP   BY DEPARTMENT_ID
                                             )
;
 
 
 
cs


예제3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 회사 전체 평균 연봉보다 더 버는 사원들 중 LAST_NAME 에 u가 있는 사원들이 
-- 근무하는 부서에서 근무하는 사원들의 사번, LAST_NAME 및 연봉을 조회한다.
 
SELECT  EMPLOYEE_ID
        , LAST_NAME
        , SALARY
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IN (
                            SELECT  DEPARTMENT_ID
                            FROM    EMPLOYEES
                            WHERE   LAST_NAME LIKE '%u%'
                            AND     SALARY > (
                                                SELECT AVG(SALARY)
                                                FROM   EMPLOYEES
                                             )
 
                         )
;
 
cs


'프로그래밍 > 데이터베이스' 카테고리의 다른 글

Primary key, Foreign key  (0) 2016.02.17
~서브쿼리 실습문제  (1) 2016.02.17
GROUP BY 쿼리  (0) 2016.02.16
SELECT 쿼리  (0) 2016.02.15
Oracle 설치하기  (0) 2016.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함