[SQL] 서브 쿼리
2025. 5. 21. 16:26ㆍCoding Study/데이터베이스
서브쿼리
SQL 문 안에 SQL 문이 들어가는 경우 서브쿼리라고 하며
괄호를 꼭 써줘야 한다.
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;
review 의 갯수가 3개인 아이템을 반환하는 쿼리
SELECT * FROM item
WHERE id IN
(
SELECT item_id
FROM review
GROUP BY item_id HAVING COUNT(*)>=3
)
Any
Any.가 WHERE 절에 사용될 때는, 서브쿼리의 결과에 있는 각 로우의 값 중 하나라도 조건을 만족하면 TRUE 를 반환>
WHERE count > Any( 서브쿼리 ) --서브쿼리의 결과값 중하나라도 조검이 맞으면 true
FROM 뒤에있는 서브 쿼리(*derived table) 에는 무조건 alias 를 붙어야 한다.
SELECT AVG(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
*derived table : 서브쿼리로 생성된 테이블
WITH 문 사용
WITH 문으로 서브쿼리를 통해 만든 결과물을 테이블명으로 저장 가능하다.
이렇게 만든 임시 테이블은 CTO ( Common Table Expression, 공통테이블 표현식) 이라고 한다.
WITH review_count_summary AS ( -- WITH 문뒤에 테이블명을쓰고 AS 서브쿼리 작성
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 != '안드'
)
SELECT
AVG(review_count)
FROM review_count_summary; -- WITH 문으로 작성한 테이블명 적용'Coding Study > 데이터베이스' 카테고리의 다른 글
| Prisma /데이터베이스/ 3Tier의 개념 (2) | 2025.05.22 |
|---|---|
| [SQL] 기타 팁 (1) | 2025.05.21 |
| [SQL] JOIN (0) | 2025.05.21 |
| [SQL]GROUPING (0) | 2025.05.21 |
| SQL 명령어 (CRUD 기준) (0) | 2025.05.19 |