Eggs Sunny Side Up
본문 바로가기
Computer Engineering/DB_Oracle

서브쿼리

by guswn100059 2023. 3. 17.

1. 서브쿼리

 

2. 스칼라 서브쿼리

SELECT A.직원ID
     , A.연봉
     , A.부서ID
     , (
        SELECT 부서명
          FROM 부서
         WHERE 부서ID = A.부서ID
        ) AS 부서명
  FROM 직원 A
 WHERE 직원ID BETWEEN 'A0001' AND 'A0006';

방법1)

SELECT A.직원ID
     , A.연봉
     , A.부서ID
     , (
        SELECT 부서명
          FROM 부서
         WHERE 부서ID = A.부서ID
        ) AS 부서명
  FROM 직원 A
 WHERE 직원ID BETWEEN 'A0001' AND 'A0006';

방법2)

SELECT A.직원ID
     , A.연봉
     , A.부서ID
     , B.부서명
  FROM 직원 A LEFT OUTER JOIN 부서 B
    ON (A.부서ID = B.부서ID)
 WHERE A.직원ID BETWEEN 'A0001' AND 'A0006';

 

SELECT A.직원ID
     , A.이름
     , A.주민등록번호
     , (
        SELECT 연락처
          FROM 직원연락처
         WHERE 직원ID = A.직원ID
           AND 구분코드 = '휴대폰'
        ) AS 휴대폰번호
  FROM 직원 A
 WHERE 직원ID BETWEEN 'A0006' AND 'A0010';

SELECT A.직원ID
     , A.이름
     , A.주민등록번호
     , (
        SELECT 연락처
          FROM 직원연락처
         WHERE 직원ID = A.직원ID
           AND 구분코드 = '휴대폰'
        ) AS 휴대폰번호
     , (
        SELECT 주소
          FROM 직원주소
         WHERE 직원ID = A.직원ID
           AND 구분코드 = '집'
        ) AS 집주소
  FROM 직원 A
 WHERE 직원ID BETWEEN 'A0006' AND 'A0010';

 

3. 인라인뷰

SELECT A.직원ID
     , A.이름
     , A.연봉
     , B.부서별최고연봉
  FROM 직원 A
     , (
        SELECT 부서ID
             , MAX(연봉) AS 부서별최고연봉
          FROM 직원
         WHERE 부서ID IS NOT NULL
         GROUP BY 부서ID
        ) B
 WHERE A.부서ID = B.부서ID
   AND A.연봉 = B.부서별최고연봉;

SELECT *
  FROM (
        SELECT *
          FROM 직원
         ORDER BY 나이
        )
 WHERE ROWNUM <= 3;

 

4. 중첩서브쿼리

SELECT *
  FROM 직원
 WHERE 연봉 >= (
                SELECT AVG(연봉)
                  FROM 직원
                );

SELECT *
  FROM 직원 A
 WHERE 성별 = '남'
   AND 연봉 >= (
                SELECT AVG(연봉)
                  FROM 직원
                 WHERE 부서ID = A.부서ID
                );

SELECT *
  FROM 직원 A
 WHERE 연봉 = (
                SELECT MAX(연봉)
                  FROM 직원
                 WHERE 부서ID = A.부서ID);

SELECT *
  FROM 직원
 WHERE 입사일시 = (SELECT MAX(입사일시)
                    FROM 직원);

SELECT *
  FROM 직원
 WHERE 연봉 = (SELECT MAX(연봉)
                FROM 직원);

 

5. 단일행/다중행 연산자

SELECT 직원ID
     , 이름
     , 나이
     , 연봉
  FROM 직원
 WHERE 직원ID NOT IN (SELECT 직원ID
                        FROM 직원연락처);

'Computer Engineering > DB_Oracle' 카테고리의 다른 글

ROWNUM, TOP-N, 페이징  (0) 2023.03.11
SQL_FROM&JOIN 예제_총정리  (0) 2023.03.08
SQL_WHERE 예제_총정리  (0) 2023.03.08
SQL_SELECT 예제_총정리  (0) 2023.03.08
DDL  (0) 2023.03.08

댓글