본문 바로가기

직장인 자기계발/SQL

SQL : 서브쿼리(sub query)

728x90

 서브쿼리란? 

: SELECT문 안에 다시 SELECT문이 기술된 형태의 쿼리로 두 번 작성해서 결과를 출력해야 하는 SELECT문을 한 번만 작성해서 처리할 수 있도록 함

 

SELECT 열 이름1, 열 이름 2, ... 
FROM  테이블 이름
WHERE 조건식 연산자
                            ( SELECT  열 이름1, 열 이름 2, ...
                              FROM   테이블 이름
                              WHERE 조건식 ) ;   

 

 1. 단일 행 서브쿼리 

 

: 하나의 행을 검색하는 서브쿼리 

: 조건식인 WHERE절에 기술되는 열의 개수, 데이터 타입은 메인 쿼리와 서브쿼리가 같아야 함

 

EX ) employees 테이블의 first_name이 'Jason'인 직원과 salary가 동일한 직원에는 누가 있는가? 

 

 

SELECT*
FROM employees A
WHERE A.salary = (
                SELECT salary
                FROM employees
                WHERE first_name='Jason'
                );

 

-

 

[실행결과]

 

 

2. 다중 행 서브쿼리

: 하나 이상의 행을 검색하는 서브쿼리

 

다중 행 연산자의 종류

다중 행 연산자 설명
IN 같은 값
NOT IN 같은 값이 아님
EXISTS 값이 있으면 반환함
ANY 최소한 하나라도 만족하는 것
<.= 와 같은 비교 연산자와 같이 사용 
ALL 모두 만족하는 것
<.= 와 같은 비교 연산자와 같이 사용 

 

EX) employees 테이블에서 department_id별로 가장 높은 salary가 얼마인지 찾고,

해당 salary에 해당하는 직원이 누구인가?

 

SELECT *
FROM employees A
WHERE A.salary IN(
                SELECT MAX(salary)
                FROM employees
                GROUP BY department_id
                )
ORDER BY A.salary DESC;

 

 

[실행결과]

 

 

3. 다중 열 서브쿼리

: 하나 이상의 열을 검색하는 서브쿼리

: 쿼리 내에 비교되는 열이 여러 개 들어갈 수 있음

 

SELECT 열 이름
FROM   테이블 이름
WHERE (열 이름1, 열 이름2, ...) IN (SELECT  열 이름1, 열 이름2, ...)
                                             FROM    테이블 이름
                                             WHERE   조건식 );

EX) employees 테이블에서 department_id별로 가장 낮은 salary가 얼마인지 찾고

찾아낸 department_id별 salary에 해당하는 직원은?

 

SELECT *
FROM employees A
WHERE (A.department_id, A.salary) IN (
                                                   SELECT department_id, MIN(salary)
                                                   FROM employees
                                                   GROUP BY department_id)
ORDER BY A.salary desc;

 

[실행결과]

 

 

4. FROM 절 서브쿼리 

: SELECT문을 간결하게 작성할 수 있으며 인라인뷰라고도 불림

 

SELECT 열 이름1
FROM 테이블 이름 별칭 1,
                                     (SELECT 열 이름2
                                      FROM  테이블 이름
                                      WHERE 조건식) 별칭 2
WHERE 별칭1.열 이름1=별칭 2. 열 이름2

EX) 직원 중에서 department_name이 Finance인 직원의 정보 출력하기

 

SELECT*
FROM employees A,
                              (SELECT department_id
                               FROM  department
                               WHERE department_name='Finance') B
WHERE A.department_id=B.department_id;

 

 

[실행결과]

'직장인 자기계발 > SQL' 카테고리의 다른 글

SQL : 조인  (0) 2021.01.22
SQL : 그룹 함수  (0) 2021.01.21
SQL : 단일 행 함수  (0) 2021.01.20
SQL : DDL (CREATE / ALTER/TRUNCATE/DROP)  (0) 2021.01.18
SQL : DML (INSERT/UPDATE/DELETE) 방법  (0) 2021.01.17