mySQL 서브쿼리

서브쿼리

  • SQL문 안에 ‘부품’처럼 들어가는 SELECT문.
  • 전체 SQL문에서 일부를 이루는 또다른 SQL문.
  • 괄호로 서브쿼리를 감싸주어야 한다.
  • 전체 SQL문을 outer query(외부쿼리), 서브쿼리를 inner query(내부쿼리)라고도 함.
  • HAVING절, SELECT절, WHERE절, FROM절 등에서도 사용 가능하다.
1
2
3
4
5
6
SELECT i.ID, i.name, AVG(star) AS avg_star
FROM item AS i LEFT OUTER JOIN review AS r
ON R.ITEM_ID = I.ID
GROUP BY i.id, i.name
HAVING avg_star < (SELECT AVG(star) FROM review)
ORDER BY avg_star DESC;

select절에 있는 서브쿼리

1
2
3
4
5
6
SELECT
id,
name,
price,
(SELECT MAX(price) FROM item) AS max_price
FROM main.item;

where 절에 있는 서브쿼리

전체 상품의 평균 가격을 구하는 쿼리보다 높은 가격을 가진 상품

1
2
3
4
5
6
7
SELECT
id,
name,
price,
(SELCT AVG(price) FROM item) AS avg_price
FROM main.item
WHERE price > (SELECT AVG(price) FROM item);

최고가 상품

1
2
SELECT id, name, price
FROM price = (SELECT MAX(price) FROM item);

최저가 상품

1
2
SELECT id, name, price
FROM price = (SELECT MIN(price) FROM item);

리뷰가 최소 3개 이상 달린 상품들의 정보만 보고싶을 경우

1
2
3
4
5
6
7
SELECT * FROM item
WHERE id IN
(
SELECT item_id
FROM review
GROUP BY item_id HEAVING COUNT(*) >= 3
);

ANY

  • 각 row의 값중 하나라도 조건을 만족하는 경우가 있으면 True를 리턴한다.
  • SOME과 같은 기능을 한다.
1
WHERE view_count > ANY(서브쿼리)
1
2
3
SELECT * FROM FOR_TEST.theater
WHERE view_count > ANY(SELECT view_count FROM FOR_TEST.theater WHERE category = 'ACTION')
AND category != 'ACTION'

ALL

  • 모든 경우에 대해서 해당 조건이 성립해야 True를 리턴한다.
    1
    2
    3
    SELECT * FROM FOR_TEST.theater
    WHERE view_count > ALL(SELECT view_count FROM FOR_TEST.theater WHERE category = 'ACTION')
    AND category != 'ACTION'

FROM절에 있는 서브쿼리

  • derived(파생시키다, 도출해내다) table은 서브쿼리로 새롭게 도출된 테이블이다.
  • derived table은 해당 sql문 안에서만 유효한 하나의 테이블이다.
  • derived table에는 꼭 alias를 붙여줘야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
AVG(review_count),
MAX(review_count),
MIN(review_count)
FROM
(SELECT
substring(address, 1, 2) AS region,
COUNT(*) AS review_count
FROM revie 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;

REFERENCE
코드잇 온라인 강의 개발자를 위한 SQL 데이터베이스

  • © 2020-2025 404 Not Found
  • Powered by Hexo Theme Ayer