쿼리 안에 있는 쿼리. 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;
▲ 테이블에는 존재하지 않는 데이터(가격 평균/합 등)를 조회하고 싶을 때 사용하는 쿼리
▼ 결과 테이블

'DataBase' 카테고리의 다른 글
정규형(normal form), 정규화(normalization)와 반(역)정규화(Denormalization) (0) | 2020.08.23 |
---|---|
이상현상(Anomaly)과 함수 종속성(Functional Dependency) (0) | 2020.08.23 |
[DataBase] Oracle 문법(계정 생성과 권한 부여,취소,조회,TABLE SPACE) (0) | 2020.07.06 |
MySQL 데이터 타입(data type) 정리 (0) | 2020.07.06 |
Oracle 데이터 타입(data type) 정리 (0) | 2020.07.06 |
댓글