[MySQL] SQL 문법 정리 (9) : Subquery (서브쿼리)
2024. 1. 29. 01:49
반응형
사용 데이터
Subquery (서브쿼리)
SQL문 안에서 또 다른 SQL문을 사용하는 방법을 의미한다.
- 외부 쿼리의 결과에 따라 조건을 동적으로 결정할 수 있다.
- 서브쿼리를 통해 계산된 값을 사용하여 외부 쿼리를 수행할 수 있다.
- 서브쿼리를 사용하여 특정 그룹에 대한 집계 함수를 계산하고 결과를 외부 쿼리에 사용할 수 있다.
단일 행을 반환하는 서브쿼리
서브쿼리가 한 개의 행을 반환하는 경우 일반적으로 비교 연산자와 함께 사용되어 외부 쿼리와 비교하거나 해당 행을 그대로 사용하기도 한다.
Select 절에서 서브쿼리 사용
책 이름과 판매량을 구하시오
select bookname,
(select count(*) from orders where bookid = B.bookid) as salesCount
from book B;
From 절에서 서브쿼리 사용
출판사별로 출판사의 평균 도서 가격보다 비싼 도서 이름을 구하시오
select B.bookname
from book B, (select avg(price) as aver, publisher from book group by publisher) as A
where B.price > A.aver and B.publisher = A.publisher;
Where 절에서 서브쿼리 사용
출판사별로 출판사의 평균 도서 가격보다 비싼 도서를 구하시오
select * from book b
where price > (select avg(price) from book where publisher = b.publisher);
여러 행을 반환하는 서브쿼리
서브쿼리가 여러 개의 행을 반환하는 경우 행 비교 연산자를 사용하여 원래 쿼리의 결과와 비교하게 된다.
키워드로는 SOME, ANY, ALL, IN, NOT IN 등이 있다.
가장 비싼 도서의 이름은 무엇인가? (ALL)
select bookname from book
where price >= all(select price from book);
# (MAX / MIN) 을 사용해서도 같은 동작 가능
select bookname from book
where price = (select max(price) from book);
주문이 있는 고객의 이름과 주소를 보이시오. (IN)
select * from customer
where custid in (select custid from orders);
서브쿼리 개념
Correlated Subquery (상관 서브쿼리)
- 외부 쿼리와 내부 서브쿼리 간에 연관성이 있는 경우를 Corelated Subquery라고 부른다.
- 내부 서브쿼리에서 외부 쿼리의 컬럼을 참조하기 때문에 각 행에 대한 서브쿼리의 결과가 동적으로 변경될 수 있다.
- 주로 SELECT, WHERE 절에서 사용된다.
Derived Relation (파생 관계)
- 서브쿼리의 결과를 임시 테이블로 취급하여 사용하는 것을 나타낸다.
- 주로 FROM 절에서 사용된다.
# Correlated Subquery
select b.bookname from book b
where price > (select avg(price) from book where publisher = b.publisher);
# Derived relation
select B.bookname
from book B, (select avg(price) as aver, publisher from book group by publisher) as A
where B.price > A.aver and B.publisher = A.publisher;
반응형
'Database > SQL' 카테고리의 다른 글
[MySQL] SQL 문법 정리 (8) : Join 표현식 (1) | 2024.01.29 |
---|---|
[MySQL] SQL 문법 정리 (7) : Natural JOIN과 Cartesian Product (0) | 2024.01.17 |
[MySQL] SQL 문법 정리 (6) : SET Operation (집합 연산) (0) | 2024.01.17 |
[MySQL] SQL 문법 정리 (5) : SELECT - ORDER BY / GROUP BY / 집계함수 (0) | 2023.11.16 |
[MySQL] SQL 문법 정리 (4) : SELECT - FROM/WHERE (0) | 2023.11.05 |