Search
Duplicate
moon
sun

서브쿼리

서브쿼리

: 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
복사