1. 스칼라 서브쿼리 - select절에만 사용 / 결과 : 하나의 칼럼
ex1) 서울은평경찰서의 강도 검거 건수와 서울시 경찰서 전체의 평균 강도 검거 건수 조회
select case_number,
(select avg(case_number)
from crime_status
where crime_type like '강도' and status_type like '검거')avg
from crime_status
where police_station like '은평' and crime_type like '강도' and status_type like '검거';
2. 인라인 뷰-from 절에 사용 / 메인쿼리에서는 인라인 뷰에서 조회한 컬럼만 사용 가능
ex1) 경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형 조회
select c.police_station, c.crime_type, c.case_number
from crime_status c,
(select police_station, max(case_number) count
from crime_status
where status_type='발생'
group by police_station) m
where c.police_station = m.police_station and c.case_number = m.count; # m테이블과 c 조인
3. 중첩 서브쿼리-where절에 사용
1) single row : 하나의 열 검색(서브쿼리 비교연산자와 사용)
select name from celeb where name = (select host from snl_show); # 1개 아니므로 오류
select name from celeb where nmae = (select host from snl_show where id=1);
2) multiple row : 하나 이상의 열 검색
# snl에 출연한 영화배우 조회(in)
select host
from snl_show
where host in(select name from celeb
where job_title like '영화배우');
# exists : 서브쿼리 결과에 값 있으면 반환
where exists (select police_station from crime_status c
where p.name = c.reference and case_number >2000);
# any : 서브쿼리 결과 중 최소한 하나라도 만족(비교연산자 사용)
select name from celeb
where name = any (select host from snl_show);
# all : 서브쿼리 결과 모두 만족(비교연산자 사용)
select name from celeb
where name = all (select host from snl_show where id=1);
3) multiple column : 하나 이상의 행 검색
# 강동원과 성별, 소속사가 같은 연예인 이름, 성별 , 소속사 조회
select name, sex, agency
from celeb
where (sex, agency) in (select sex, agency from celeb where name ='강동원');