😊 단일 값을 반환하는 서브쿼리
평균 에이전시 비용을 계산해 평균 보다 많이 받는 에이전시 반환
SELECT *
FROM sales_agents
WHERE agency_fee > (SELECT AVG(agency_fee) FROM sales_agents);
각 그림의 금액 옆에 전체 그림의 평균 금액을 함께 보여주고 싶을 때
SELECT name AS painting, price,( SELECT avg(price) FROM paintings ) AS avg_price
FROM paintings;
- 두개의 예시에서 사용된 서브 쿼리 메인 쿼리에 독립적이다
- 즉 서브 쿼리만 가지고도 쿼리가 실행이 되고 그 자체로도 유의미한 수치를 얻어낼 수 있다
😊 여러 행을 반환하는 서브쿼리
1. 여러 행을 가진 한 개의 열을 반환하는 서브쿼리
- 주로 WHERE 절에 사용되어 메인 쿼리의 결과를 필터링하는 데에 사용된다
- 보통 IN, NOT IN, ANY, ALL, EXISTS, NOT EXISTS와 같은 연산자와 함께 사용해
- 서브 쿼리를 통해 반환된 여러 개의 값을 특정 값과 비교한다
SELECT AVG(agency_fee)
FROM sales_agents
WHERE id NOT IN (SELECT id FROM managers);
SELECT id FROM managers;
2. 여러 행을 가진 다수의 열을 반환하는 서브쿼리
- 각 갤러리에서 최고급여를 받는 사원의 이름과 그 사원이 속한 갤러리의 ID 값
SELECT first_name, gallery_id
FROM sales_agents
WHERE (agency_fee , gallery_id) IN
(SELECT MAX(agency_fee), gallery_id FROM sales_agents GROUP BY gallery_id );
| first_name | gallery_id |
|---|
| Denis | 2 |
| Kate | 3 |
| Helen | 1 |
SELECT MAX(agency_fee), gallery_id FROM sales_agents GROUP BY gallery_id;
| MAX(agency_fee) | gallery_id |
|---|
| 2,250 | 2 |
| 3,120 | 3 |
| 4,500 | 1 |
출처 : https://kimsyoung.tistory.com/