서브쿼리 개념 및 예시
서브쿼리란?
- 한 쿼리 내에 포함된 또 하나의 쿼리입니다.
- GROUP BY 절을 제외하고 모든 부분에서 사용 가능합니다.
- 서브쿼리는 반드시 괄호 안에 포함되어야 합니다.
SELECT의 서브쿼리
SELECT [컬럼], (SELECT [컬럼] FROM [테이블] WHERE 조건)
FROM [테이블]
WHERE 조건;
- = 스칼라 서브쿼리입니다.
- SELECT 절의 서브쿼리는 결과가 반드시 하나의 값이어야 합니다.
FROM의 서브쿼리
SELECT [컬럼]
FROM (SELECT [컬럼] FROM [테이블] WHERE [조건]) AS [별명]
WHERE 조건;
- =인라인 뷰 서브쿼리입니다.
- FROM 절의 서브쿼리는 결과가 반드시 하나의 테이블이어야 합니다.
- 서브쿼리로 만들 테이블은 alias가 필수입니다.
WHERE의 서브쿼리
SELECT [컬럼]
FROM [테이블]
WHERE [컬럼][연산자](SELECT [컬럼] FROM [테이블] WHERE 조건);
- =중첩 서브쿼리→ 하나의 컬럼에는 여러 개의 값 존재할 수도 있습니다.
- 일반적으로 WHERE [컬럼][연산자][서브쿼리] 형식으로 사용합니다.
- WHERE 절의 서브쿼리는 결과가 반드시 하나의 컬럼이어야 합니다. 단, EXISTS 제외합니다.
연산자
1. 비교연산자
- 서브쿼리에서 비교 연산자만 사용하는 경우, 서브쿼리의 결과 값이 반드시 하나의 값이어야 한다.
-
연산자 활용 의미 = A = [서브쿼리] A와 [서브쿼리]의 결과 값이 같습니다. != A != [서브쿼리] A와 [서브쿼리]의 결과 값이 같지 않습니다. > A > [서브쿼리] A가 [서브쿼리]의 결과 값보다 큽니다. < A < [서브쿼리] A가 [서브쿼리]의 결과 값보다 작습니다. >= A >= [서브쿼리] A가 [서브쿼리]의 결과 값보다 크거나 같습니다. <= A <= [서브쿼리] A가 [서브쿼리]의 결과 값보다 작거나 같습니다.
2. 주요연산자
- 주요 연산자 사용 시, 서브쿼리의 결과는 하나의 컬럼이어야 합니다.
- EXISTS는 단독으로 사용 가능 & 결과값이 여러 컬럼이어도 가능합니다.
-
연산자 활용 의미 IN A IN ([서브쿼리]) A가 [서브쿼리]의 결과 값 내에 있습니다. ALL A < ALL([서브쿼리]) A가 모든 [서브쿼리]의 결과 값보다 작습니다. A > ALL([서브쿼리]) A가 모든 [서브쿼리]의 결과 값보다 큽니다. ANY A < ANY([서브쿼리]) A가 [서브쿼리]의 결과 값보다 하나라도 작습니다. A > ANY([서브쿼리]) A가 [서브쿼리]의 결과 값보다 하나라도 큽니다. EXISTS EXISTS([서브쿼리]) [서브쿼리]의 결과 값이 존재합니다. NOT EXISTS([서브쿼리]) [서브쿼리]의 결과 값이 존재하지 않습니다. - ALL 연산자 사용 시 유의점
- < (작다)와 사용 : 서브쿼리를 통해 도출되는 컬럼 값 중에서 가장 작은 값보다 비교하는 값이 작은 지 확인이 필요합니다.
- > (크다)와 사용 : 서브쿼리를 통해 도출되는 컬럼 값 중에서 가장 큰 값보다 비교하는 값이 큰 지 확인이 필요합니다.
- ANY 연산자 사용 시 유의점
- < (작다)와 사용 : 서브쿼리를 통해 도출되는 컬럼 값 중에서 가장 큰 값보다 비교하는 값이 작은 지 확인이 필요합니다.
ex) 서브쿼리를 통해 도출된 컬럼이 (10, 50)이면 50보다 작은지를 비교합니다. - > (크다)와 사용 : 서브쿼리를 통해 도출되는 컬럼 값 중에서 가장 큰 값보다 비교하는 값이 큰 지 확인이 필요합니다.
ex) 서브쿼리를 통해 도출된 컬럼이 (10, 50)이면 50보다 작은지를 비교합니다.
- < (작다)와 사용 : 서브쿼리를 통해 도출되는 컬럼 값 중에서 가장 큰 값보다 비교하는 값이 작은 지 확인이 필요합니다.
3. EXISTS 연산자
- 값이 있으면 TRUE 없으면 FALSE 반환함
'Database' 카테고리의 다른 글
[Database] - Join이란 (4) | 2024.11.09 |
---|---|
[Database] - 정규화 (1NF, 2NF, 3NF, BCNF) (4) | 2024.11.08 |
[Database] - HeidiSQL 단축키 설정 (0) | 2024.10.17 |
[Database / Redis] - Redis 비밀번호 설정 (0) | 2024.04.06 |
[Database] - 동시성 제어란? (2) | 2024.03.13 |