본문 바로가기
DataBase

서브 쿼리(subquery)SELECT,FROM,WHERE

by 스파이디웹 2020. 7. 7.
728x90

쿼리 안에 있는 쿼리. WHERE 절/FROM 절/SELECT 절 안에 들어가는 쿼리를 통칭하여 서브쿼리라고 한다.


WHERE 절 SUBQUERY

WHERE 절 안에 들어있다. 가장 자주 쓰이고, 우리가 서브 쿼리 하면 가장 먼저 떠올리는 서브 쿼리이다.

중첩서브쿼리 (nested subqueries) 라고도 불린다.

 

SELECT * FROM student A WHERE A.student_name IN (SELECT B.student_name FROM subject B WHERE B.subject_name = 'MATH');

 

▲ 선택과목 B 테이블에서 'MATH'를 선택한 학생들의 이름을 찾아, 학생 A 테이블에서 모든 정보를 조회하는 쿼리


FROM 절 SUBQUERY

 

FROM 절 안에 들어있다. 인라인뷰 (inline views) 라고 불린다.

 

SELECT A.item_name, subquery1.total_amt FROM suppliers A, (SELECT supplier_id, SUM(B.amount) AS total_amt FROM orders B GROUP BY supplier_id) subquery1 WHERE subquery1.supplier_id = A.supplier_id;

 

▲ 각각의 공급자가 공급한 물품(item_name)과 총수량(total_amt)을 알고 싶은데, 두 정보가 서로 다른 테이블에 들어있는 경우, 공급자(suppliers)와 주문(oreders) 두 테이블로부터 각각 원하는 데이터를 불러와 출력하는 쿼리


SELECT 절 SUBQUERY

SELECT 절 안에 들어있다. 스칼라서브쿼리 (Scalar subqueries) 라고도 불린다.

 

SELECT 절에 오는 서브쿼리는 반드시 단일 값을 리턴해야 한다. SUM, COUNT, MIN, MAX 등과 같은 집계 함수가 많이 쓰이는 이유이다.

 

SELECT product_name, list_price, ROUND( (SELECT AVG( list_price ) FROM products p1 WHERE p1. category_id = p2.category_id ), 2 ) avg_list_price FROM products p2 ORDER BY product_name;

 

▲ 테이블에는 존재하지 않는 데이터(가격 평균/합 등)를 조회하고 싶을 때 사용하는 쿼리

▼ 결과 테이블

 

출처: blog.naver.com/PostView.nhn?blogId=pyj721aa&logNo=221466664622&categoryNo=0&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView

728x90

댓글