서브쿼리란?
하나의 SQL문 안에 포함되어 있는 또 다른 SQL
반드시 괄호로 묶기
- SELECT 절
- FROM 절
- WHERE 절
- HAVING 절
- ORDER 절
- 기타 DML(INSERT.DELETE,UPDATE)
GROUP BY절 사용불가
서브 쿼리 종류
동작하는 방식
1. UN-CORRELATED(비연관) 서브쿼리
- 서브쿼리가 메인쿼리 컬럼을 가지고 있지 않은 형태의 서브쿼리
- 메인쿼리에 서브쿼리가 실행된 결과 값을 제공하기 위한 목적으로 사용
2. CORRELATED(연관) 서브쿼리
- 서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태의 서브 쿼리
- 일반적으로 메인쿼리가 먼저 수행된 후에 서브쿼리에 조건이 맞는지 확인하고자 할때 사용
위치에 따라
1. SELECT절 서브쿼리
스칼라 서브쿼리
SELECT절에 사용되는 서브쿼리는 하나의 컬럼 처럼 사용하기 위해 사용
* 하나의 값만 반환
SELECT 컬럼1, 컬럼2,
(SELECT 컬럼 FROM 테이블 WHERE 조건) AS 별칭
FROM 메인테이블
WHERE 조건;
2. FROM절 서브쿼리
인라인뷰
서브쿼리 결과 테이블처럼 사용하기 위해 주로 사용
열 이름과 테이블명을 꼭 명시 해줘야함
SELECT 컬럼1, 컬럼2
FROM (SELECT 컬럼A, 컬럼B FROM 테이블명 WHERE 조건) AS 인라인뷰_별칭
WHERE 조건;
3. WHERE절 서브쿼리
가장 일반적인 서브쿼리
비교상수 자리에 값을 전달하기 위한 목적으로 주로 사용
SELECT 컬럼1, 컬럼2
FROM 테이블명
WHERE 컬럼 연산자 (SELECT 컬럼 FROM 테이블명 WHERE 조건);
리턴 데이터의 형태에 따라 단일행 서브쿼리, 다중행 서브쿼리, 다중컬럼 서브쿼리, 상호연관 서브쿼리로 구분
a. 단일행 서브쿼리
서브쿼리 결과가 1개의 행이 리턴 되는 형태
단일행 서브쿼리 연산자
=. <>, >,>=,<,<=
b. 다중행 서브쿼리
서브쿼리 결과가 여러 행이 리턴되는 형태
단일행 서브쿼리 연산자 사용불가
다중행 서브 쿼리 연산자
IN, ANY
C. 다중컬럼 서브쿼리
서브쿼리 결과가 여러 컬럼이 리턴되는 형태
메인 쿼리와의 비교 컬럼 2개 이상
대소 비교 전달 불가 (두 값을 동시에 묶어 대소 비교 할수 없음)
D. 상호연관 서브쿼리
메인쿼리와 서브쿼리의 비교를 수행하는 형태
'SQL > SQL 이론' 카테고리의 다른 글
[SQL] 윈도우 함수 (window function) (0) | 2024.10.30 |
---|---|
[SQL] 연산자 - between and, in, like, is null (0) | 2024.05.17 |
[SQL] WHERE 조건에 해당하는 데이터 조회 (0) | 2024.05.17 |
[SQL] SELECT~ FROM 데이터 조회 (0) | 2024.05.17 |