CH 17 SQL Subquery
하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다. 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
주의
• Subquery 는 괄호로 묶어서 사용
• 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
• subquery 에서는 order by 를 사용X
종류
• 스카라 서브쿼리 (Scalar Subquery) - SELECT 절에 사용
• 인라인 뷰 (Inline View) - FROM 절에 사용
• 중첩 서브쿼리 (Nested Subquery) - WHERE 절에 사용
스칼라 서브쿼리 (Scalar Subquery)
서울은평경찰서의 강도 검거 건수와 서울시 경찰서 전체의 평균 강도 검거 건수를 조회


인라인 뷰 (Inline View)
경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회

중첩 서브쿼리 (Nested Subquery) - WHERE 절에서 사용하는 서브쿼리.
• Single Row - 하나의 열을 검색하는 서브쿼리
• Multiple Row - 하나 이상의 열을 검색하는 서브쿼리
• Multiple Column - 하나 이상의 행을 검색하는 서브쿼리
Single Row
서브쿼리가 비교연산자( =, >, >=, <, <=, <>, !=)와 사용되는 경우,
서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다. (두개 이상인 경우 에러)

Multiple Row - IN
SNL 에 출연한 영화배우를 조회

EXISTS
범죄 검거 혹은 발생 건수가 2000건 보다 큰 경찰서 조회


oil_price 테이블에서 셀프주유의 평균가격과 SK에너지의 가장 비싼 가격을 Scalar Subquery 를 사용하여 조회
select max(가격) , (select avg(가격) from oil_price where 셀프='Y')
from oil_price
where 상표='SK에너지';
oil_price 테이블에서 상표별로 가장 비싼 가격과 상호를 Inline View 를 사용하여 조회하세요.
select o.상호,o.상표,s.max_price
from oil_price o , (select 상표,max(가격) max_price from oil_price group by 상표) s
where o.상표 =s.상표 and o.가격 = s.max_price;
평균가격 보다 높은 주유소 상호와 가격을 Nested Subquery 를 사용하여 조회하세요.
select 상호,가격
from oil_price
where 가격 > (select avg(가격) from oil_price);
refueling 테이블과 oil_price 테이블에서 10만원 이상 주유한 연예인 이름, 상호, 상표, 주유 금액, 가격을 Inline View 를 사용하여 조회하세요.
select r.이름,o.상호,o.상표,r.금액,o.가격
from oil_price o,
(select 이름,주유소,금액 from refueling where 금액 >= 100000)r
where o.상호 = r.주유소;