본문 바로가기

IT 기초/SQL

[SQL 문법] 서브 쿼리(Sub Query)

▶ 쿼리(Query): 데이터베이스에 원하는 정보를 검색하기 위해 요청하는 것 

▶ 서브쿼리(Sub Query): 메인쿼리 안에 또 다른 SELECT 문이 있는 명령어

 

* 서브 쿼리 종류


1) SELECT절 서브 쿼리

- 테이블의 열 추가하는 명령어, 스칼라(Scala) 서브쿼리라고도 함

- JOIN 활용하지 않고 다른 테이블의 정보 가져올 수 있음

- 데이터 결합(JOIN)과 비교했을 때 처리 속도가 느려 잘 사용 X

 

예시)

SELECT  *

                , (SELECT GENDER FROM CUSTOMER WHERE A.MEM_NO = MEM_NO) AS GENDER

FROM SALES AS A;

 

→ 테이블 결합 사용하지 않고 SALES 테이블에 CUSTOMER 테이블의 GENDER 열이 함께 조회됨 


2) FROM절 서브 쿼리

- FROM 절 안의 테이블로 사용되는 서브쿼리

- 열 이름 및 테이블명을 지정해주어야 함

- 세가지 서브 쿼리 중 분석에서 가장 많이 사용됨 (테이블 결합 JOIN과 함께)

 

FROM 절 뒤에는 테이블명, GROUP BY는 기존 테이블을 새로운 테이블로 생성

 

FROM 절 서브쿼리 + JOIN 예시)

회원별 구매횟수 테이블 및 회원 테이블을 결합 후 임시테이블로 저장

 

CREATE TEMPORARY TABLE 임시테이블명

SELECT A.구매횟수

               B.*

   FROM (

               SELECT MEM_NO

                              ,COUNT(ORDER_NO) AS 구매횟수

                  FROM  SALES

               GROUP

                       BY MEM_NO

               ) AS A

   INNER

      JOIN CUSTOMER AS B

         ON A.MEM_NO = B.MEM_NO;


3) WHERE절 서브 쿼리

WHERE절 안에 리스트 형태로 사용할 수 있는 명령어

 

예시)

CUSTOMER 테이블의 가입일자가 2019인 회원의 주문 횟수 구하기

 

SELECT  COUNT(ORDER_NO) AS 주문횟수

   FROM  SALES

WHERE  MEM_NO IN (SELECT MEM_NO FROM CUSTOMER WHERE YEAR(JOIN_DATE=2019);

 

* YEAR : 날짜형 함수, 연도 반환함

* IN 연산자에서는 ( ) 안에 리스트 형태가 와야 함

 

(SELECT MEM_NO FROM CUSTOMER WHERE YEAR(JOIN_DATE=2019)는

2019년의 회원번호 리스트

 

결과 → 

주문횟수
2685

이런식으로 나타남