목표: 서브커리가 무엇인지 확인하고 이를 활용한다.
서브쿼리의 특징
1. 소괄호를 사용한다.
2. 쿼리 실행전 1번만 실행된다.
3. 서브쿼리는 비교 연산자 사용시 오른쪽에 적는다.
4. ORDER BY문을 내부에서 사용할 수 없다.
다중 행 연산자 | 설명 |
IN | 결과에 존재하는 임의의 값과 같은 조건 검색 |
ANY | 존재하는 어느 하나의 값이라도 만족하는 조건 검색 |
EXISTS | 결과를 만족하는 값이 존재하는지 확인 |
ALL | 존재하는 모든 값을 만족하는 조건 검색 |
단일 행 서브 쿼리
SELECT [열 이름]
FROM [테이블]
WHERE [열] = (SELECT [열] FROM [테이블])
예를 들어,
SELECT * FROM company
WHERE symbol = (SELECT symbol FROM company WHERE symbol IN ('APPL'))
다중 행 서브 쿼리
SELECT [열 이름]
FROM [테이블]
WHERE [열] IN (SELECT [열] FROM [테이블])
IN 문
예를 들어,
SELECT * FROM company
WHERE symbol IN (SELECT FROM company WHERE symbol IN ('MSFT', 'AMD', 'AAPL'))
ANY 문
예를 들어,
SELECT * FROM company
WHERE symbol = ANY (
SELECT symbol FROM company
WHERE symbol IN ('MSFT', 'AMD', 'APPL')
)
EXISTS문, NOT EXISTS 문
예를 들어,
SELECT * FROM company
WHERE EXISTS (
SELECT symbol FROM company
WHERE symbol IN ('MSFT', 'AMD', 'APPL')
)
ALL문
모든 값을 만족하는 조건을 주 쿼리에서 검색해 결과 반환
예를 들어,
SELECT * FROM company
WHERE symbol = ALL (
SELECT symbol FROM company
WHERE symbol IN ('MSFT', 'AMD', 'AAPL')
)
FROM 문에서 서브 쿼리를 사용해보고 싶다면
: 장점은 쿼리를 논리적으로 격리 할 수 있다. 보통 인라인 뷰라고 한다.
SELECT [열 이름]
FROM [테이블] AS a
INNER JOIN (SELECT [열] FROM [테이블] WHERE [열] = [값]) AS b ON [a.열] = [b.열]
WHERE [열] = [값]
SELECT 문에서 서브 쿼리 사용해보고 싶다면
: 서브쿼리는 집계 함수 (SUM, COUNT, MIN, MAX)와 사용하지 않는 것이 좋으며, 이를 스칼라 서브 쿼리 라고 한다.
SELECT [열 이름]
(SELECT <집계 함수> [열 이름] FROM [테이블 2]
WHERE [테이블 2.열] = [테이블 1. 열]) as Alias
FROM [테이블 1]
WHERE [조건]
'마케팅 이야기' 카테고리의 다른 글
[MYSQL] 문자열 함수 II (0) | 2024.03.11 |
---|---|
[SQL] 9. CTE문 (0) | 2024.03.07 |
[SQL] 7. 조인이란 (0) | 2024.03.03 |
[SQL] 6. CREAT 문 (0) | 2024.03.01 |
[SQL] 5. GROUP BY 그리고 HAVING 문 (0) | 2024.02.28 |