[SQL] Sub-query-1

박경국·2022년 5월 26일
0

SQL

목록 보기
12/14
post-thumbnail
  • SELECT 절에는 평균값, 최대값, 최소값 등 컬럼의 특징을 찾는 서브쿼리를 많이 활용함
SELECT 
id, name, price, 
(SELECT AVG(price) FROM item) AS avg_price, 
(price - (SELECT AVG(price) FROM item)) AS diff_price 
FROM item;
  • WHERE 절에는 table의 특정 조건에 해당하는 값을 찾을 때 많이 활용함. 예를 들어 테이블에서 가장 비싼 제품을 찾을 때, WHERE 절에서 서브쿼리로 price의 조건을 걸어줄 수 있음
SELECT id, name, price FROM item
WHERE price = (SELECT MAX(price) FROM item);
  • 서브쿼리를 사용하면 JOIN 기능을 대체하고, 다른 테이블의 결과를 현재 쿼리의 조건으로 만들 수 있음
SELECT * FROM item
WHERE id IN (SELECT item_id FROM review GROUP BY item_id HAVING count(*) >= 3);
SELECT i.id, i.name, COUNT(*)
FROM item AS i INNER JOIN review AS r
ON i.id = r.item_id
GROUP BY i.id, i.name
HAVING COUNT(*) >= 3;
  • FROM 뒤에 서브쿼리를 사용할 경우 Alias를 지정해줘야 한다.
SELECT AVG(review_count), MIN(review_count), MAX(review_count)
FROM
(SELECT
SUBSTRING(address, 1, 2) AS region,
COUNT(*) AS review_count
FROM review AS r LEFT OUTER JOIN member AS m
ON r.mem_id = m.id
GROUP BY SUBSTRING(address, 1, 2)
HAVING region IS NOT NULL
AND region != '안드') AS review_count_summary;
  • JOIN이 있는데 서브쿼리를 사용하는 이유. 일반적인 상황에서는 JOIN의 속도가 더 빠름. 하지만 서브쿼리를 사용할 수 밖에 없는 상황이 있음
    • ALL, ANY 등의 함수를 사용한 경우
    • WHERE 절에 집계합수를 활용한 서브쿼리를 사용한 경우
    • GROUP BY를 사용한 서브 쿼리를 FROM 절에 활용한 경우

0개의 댓글