서브쿼리
: SQL문 내부에 사용하는 SELECT 문
•
메인쿼리 : 서브쿼리를 사용하는 최종적인 SELECT 문
실행 결과에 따른 분류
•
단일행 서브쿼리 : 결과 데이터가 하나인 서브쿼리
•
다중행 서브쿼리 : 결과 데이터가 여러 행인 서브쿼리
다중행 연산자
•
IN : 해당 컬럼과 여러 개의 값이 일치하는 데이터를 구하는 연산
•
ANY : A 비교연산 ANY B 비교한 결과 중, 하나 만이라도 조건을 만족하는 A 를 구하는 연산
•
ALL : A 비교연산 ALL B 비교한 결과 중, 모든 데이터에 대해 조건을 만족하는 A 를 구하는 연산
•
EXISTS : 서브쿼리에 존재하는 데이터만 조회하는 연산
사용 위치에 따른 분류
•
스칼라 서브쿼리 : SELECT 절에서 사용하는 서브쿼리
•
인라인 뷰 : FROM 절에서 사용하는 서브쿼리
•
서브 쿼리 : WHERE 절 등에서 사용하는 서브쿼리
스칼라 서브쿼리
SELECT 절에서 사용하며 단일 값을 반환하는 서브쿼리
SELECT
name,
(SELECT COUNT(*) FROM orders WHERE customer_id = id) AS order_count
FROM customers;
SQL
복사
인라인 뷰
FROM 절에서 사용하는 서브쿼리
SELECT
name,
order_count
FROM (
SELECT
customer_id,
COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
) AS orders_by_customer;
SQL
복사
서브 쿼리
WHERE 절 등에서 사용하는 서브쿼리
SELECT
name
FROM customers
WHERE id IN (SELECT customer_id FROM orders);
SQL
복사
WITH 절
: 과도한 서브쿼리 사용으로 인해 쿼리의 가독성이 떨어지는 것을 방지하기 위해서,
서브쿼리로 사용할 SELECT 문의 조회결과를 임시테이블로 정의한 구문
•
형태
WITH
(
별칭1 AS (SELECT * FROM 테이블),
별칭2 AS (SELECT * FROM 테이블),
...
)
SELECT *
FROM 별칭1, 별칭2, ...
SQL
복사





