SQL

[이론]SQL 심화 문법 정리 : 서브쿼리(SELECT절, FROM절, WHERE절)

노력하는 백곰 2024. 12. 4. 08:25

서브쿼리(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')