SELECT column1, (SELECT column2 FROM table2 WHERE condition)
FROM table1
WHERE condition;
SELECT a.column, b.column
FROM table1 a, (SELECT column1, column2 FROM table2) b
WHERE condition;
(from절에는 테이블이 옴. from절에 온 쿼리를 하나의 테이블로 인지 = a테이블과 b테이블을 조인해서 사용)
서브쿼리가 비교연산자( = , > , >= , < , <= , <> , != ) 와 사용되는 경우, 서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다.(두개 이상인 경우 에러)
SELECT column_names
FROM table_name
WHERE column_name = (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_name;
서브쿼리 결과 중에 포함될 때
SELECT column_names
FROM table_name
WHERE column_name IN (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_name;
서브쿼리 결과에 값이 있으면 반환
SELECT column_names
FROM table_name
WHERE EXISTS IN (SELECT column_name FROM table_name WHERE condition)
ORDER BY column_names;
서브쿼리 결과중에 최소한 하나라도 만족하면(비교연산자 사용)
SELECT column_names
FROM table_name
WHERE column_name = ANY (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_names;
서브쿼리 결과를 모두 만족하면(비교연산자 사용)
SELECT column_names
FROM table_name
WHERE column_name = ALL (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_names;
서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우
SELECT column_names
FROM table_name a
WHERE (a.column1, a.column2, ...) IN (SELECT b.column1, b.column2, ...)
FROM table_name b
WHERE a.column_name = b.column_name)
ORDER BY column_names;
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 oi
l_price);
3번에서 조회한 주유소에서 주유한 연예인의 이름과 주유소이름, 주유일을 nested subquery를 사용해 조회(refueling 테이블)
= select 이름, 주유소, 주유일
-> from refueling
-> where 주유소 in (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.주유소;