정의
하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
서브쿼리는 메인쿼리의 칼럼 사용 가능
메인쿼리는 서브쿼리의 칼럼 사용 불가능
서브쿼리는 괄호로 묶어서 사용
서브쿼리에서는 order by 사용 불가
Scalar subquery - select 절에 사용
inline view - from 절에 사용
nested subquery - where 절에 사용
mysql> select case_number,
-> (select avg(case_number) from crime_status where crime_type like '강도' and status_type like '검거') avg from crime_status where crime_type like '강도' and status_type like '검거' and police_station like '%은평%';
select c.police_station, c.crime_type, c.case_number
from crime_status c,
(select max(case_number) counts, police_station from crime_status group by police_station) m
where c.case_number = m.counts and c.police_station = m.police_station;
where A in (select name from DB where condition)
where A exists (select name from DB where condition) 존재하면~
select name from police_station p
-> where exists (select police_station, reference from crime_status c where p.name = c.reference and c.case_number >
2000);
문제가 약간 이상했다. 총 범죄 검거로 생각할 수도 있는데 .. 각 범죄에 대한 얘기였다.
select name from celeb where name any = (select host from snl_show);
any = <<<- "=" 잘넣자
select name from celeb where name all(select host from snl_show where id = 1); 여러개의 이름을 만족할 수 없으니 where로 한정함
select name from celeb where name = all(select host from snl_show where sex='w');
snl_show 에는 sex가 없는데 작동도 되고 이상한 답변이 나온다.ㅎㅎ;
select name,sex,agency from celeb where (sex, agency) = (select sex, agency from celeb where name ='차승원')
oil_price 데이터가 없어서 가상 실습했음
Scalar
select max(가격) maxp, (select avg(가격) avgp from oil_price where 셀프='y') from oil_price where 셀프 ='Y' and
상표='sk에너지';Inline view
select o.상호, o.상표, o.가격, s.max_price from oil_price o, (select 상표, max(가격) maxp from oil_price group by
상표) p where o.상표 = p.상표 and p.maxp = o.가격;single row
select 상호, 가격 from oil_price where 가격 > (select avg(가격) from oil_price)