서브 쿼리는 하나의 SELECT 문장에서 그 문장 안에 포함된 또 하나의 SELECT 문장입니다. 서브 쿼리를 순차적으로 사용하여 복잡한 쿼리문을 쉽게 구현할 수 있습니다.
기본 사용법
SELECT column2
FROM t_table
WHERE column1 = (SELECT문)
서브 쿼리는 괄호 안에 SELECT문을 입력하여 사용합니다. 또한, 서브 쿼리에는 group by having을 사용할 수 없습니다.
단일 행 서브 쿼리는 오직 하나의 행만을 반환하는 서브 쿼리를 갖는 것을 말합니다.
예시
SELECT address
FROM t_table
WHERE phone = (SELECT phone
FROM t_member
WHERE name = "홍길동");
단일 행 서브쿼리는 예시와 같이 WHERE 절에서 사용할 수 있습니다.
다중 행 서브 쿼리는 여러 행을 반환하는 서브 쿼리를 말합니다. WHERE 절에서 사용하기 위해서는 아래와 같은 연산자를 통해 사용할 수 있습니다.
서브 쿼리 연산자 |
설명 |
IN |
메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다. |
ANY, SOME |
메인 쿼리의 비교 조건이 서브 쿼리의 결과와 하나 이상 일치하면 참입니다. |
ALL |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다. |
EXIST |
메인 쿼리의 비교 조건이 서브 쿼리의 결과 중 만족하는 값이 하나라도 존재하면 참입니다. |
IN
SELECT column1, column2
FROM t_table
WHERE column1 IN (SELECT column1 FROM t_table WHERE column2 > 500);
서브 쿼리로 조회되는 column1의 값들 중에서 column1의 값이 하나라도 존재하면 참이 되어 조회됩니다. ANY와 SOME의 사용한 결과도 같습니다.
ALL
SELECT column_name
FROM table_name
WHERE column_name ALL (SELECT column_name FROM table_name WHERE condition);
서브 쿼리로 조회되는 column_name의 값들과 column_name의 값이 모두 존재해야 참이되어 조회됩니다.
EXIST
SELECT column_name
FROM table_name
WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);
테이블에서 서브 쿼리의 값과 같은 행이 존재한다면 조회합니다.
FROM절에 사용하는 서브 쿼리를 인라인 뷰라고 합니다. 서브 쿼리를 FROM 절에 사용해 하나의 테이블처럼 사용할 수 있습니다.
예시
SELECT A.address
FROM (SELECT phone
FROM t_member
WHERE name = "홍길동") A;
FROM절에 서브 쿼리를 사용한 모습입니다. 별칭을 붙여주어 간편하게 서브 쿼리에서 조회된 address 컬럼에 접근할 수 있습니다.
[SQL] 인덱스를 사용하여 쿼리 성능 향상시키기 (1) | 2020.10.28 |
---|---|
[SQL] PRIMARY KEY, FOREIGN KEY 데이터 무결성을 위한 제약 조건 (0) | 2020.10.13 |
[SQL] JOIN문 정리(LEFT JOIN, RIGHT JOIN, INNER JOIN, CROSS JOIN) (0) | 2020.10.06 |
[SQL] 시퀀스의 개념과 시퀀스 생성하기 (0) | 2020.10.05 |
[SQL] 뷰(View)의 개념과 뷰 사용하기 (1) | 2020.10.04 |