■ 서브쿼리(Sub Query)
- 내부 쿼리의 결과를 기반으로 데이터를 필터링, 검색 또는 조작할 때 사용되는 쿼리 내에 포함된 쿼리(부모 쿼리 안에 작성된 자식 쿼리)
- 서브쿼리는 동장형식, 변환 데이터 형태, 구문 위치 등에 따라 분류되며, 그중 구문 위치는 SELECT, FROM, WHERE절에 사용
■ 서브쿼리 종류
1. SELECT절 서브쿼리
- SELECT절에 사용되는 서브쿼리는 하나의 열처럼 사용
- 예시) ORDER과 MEMBER 테이블의 공통된 값만 매칭하되, ORDER의 전부와 MEMBER의 GENDER 열(Column)만 나오도록 조회
→①LEFT JOIN 활용
SELECT
A_Table.*, B_TaBLE.GENDER
FROM
ORDER AS A_Table
LEFT JOIN MEMBER AS B_TaBLE
ON A_Table.MEM_NO = B_TaBLE.MEM_NO
→②SELECT절 서브쿼리 활용
#설명 : SELECT절 서브쿼리가 하나의 'GENDER' 컬럼처럼 사용
SELECT
*,
(SELECT GENDER
FROM MEMBER AS B_TaBLE
WHERE B_TaBLE.MEM_NO = A_Table.MEM_NO) AS GENDER
FROM
ORDER AS A_Table
2. FROM절 서브쿼리
- FROM절에 사용되는 서브 쿼리는 하나의 테이블처럼 사용(열 이름과 테이블명을 꼭 명시 必)
- 예시) ORDER 테이블에서 회원번호(MEM_NO)별 주문금액 (SALES_AMT)의 합계를 조회
→①GROUP BY 활용
SELECT
MEM_NO,
SUM(SALES_AMT) AS TOT_AMT
FROM
ORDER
GROUP BY
MEM_NO
→②FROM절 서브쿼리 활용
#설명 : FROM절 안에 조건을 넣고, SELECT으로 전체를 호출
#참고 : 실전에서는 2차 가공을 통해 결과를 얻고자 1차 가공에서 테이블을 필터링할 때 활용
SELECT
*
FROM
(SELECT MEM_NO, SUM(SALES_AMT) AS TOT_AMT
FROM ORDER
GROUP BY MEM_NO) AS A_Table
3. WHERE절 서브쿼리
- WHERE절에 사용되는 서브 쿼리는 일반 서브쿼리(즉, 보편적 서브쿼리)
- 예시) MEMBER 테이블의 MEM_NO = '1000005'인 주문내역을 ORDER 테이블에서 조회
→WHERE절 서브쿼리 활용
SELECT
*
FROM
ORDER
WHERE
MEM_NO IN (SELECT MEM_NO
FROM MOMBER
WHERE MEM_NO ='1000005')
- 예시) MEMBER 테이블의 GENDER = 'MAN'인 주문내역을 ORDER 테이블에서 조회
→WHERE절 서브쿼리 활용
SELECT
*
FROM
ORDER
WHERE
MEM_NO IN (SELECT MEM_NO
FROM MOMBER
WHERE GENDER ='MAN')