SQL을 사용하여 대량의 데이터를 다루는 경우, 임의의 결과를 저장할 때마다 테이블에 저장할 수 없다. 그렇다고 해서 그때마다 테이블을 생성할 수도 없다. 이러한 이 유로 인해 임시 결과를 정의하고 사용하는 경우의 임시테이블을 만들어 해당 테이블에 값을 저장할 수 있다. 이번 포스팅은 임시 테이블을 만들고, 실제 자주 사용하는 구문인 WITH문에 대해 알아보도록 하겠습니다.
WITH문은 언제 사용할까?
실제 실무에서는 동일한 SQL이 반복되어 사용되는 경우가 많다. 하지만 그때마다 동일한 쿼리를 실행하게 된다면, 프로그램 전체적으로 성능이 느려지는 문제가 발생한다. 이러한 상황에서 반복적인 사용을 가능하게 해주는 구문이 WITH 절입니다. 즉, 게임에서 사용하는 매크로와 마찬가지로 한번 지정해 주면 자동으로 반복하여 실행되도록 할 수 있습니다.
WITH문의 기본 구조
WITH CTE AS
(
#반복시킬 쿼리
SELECT
)
위와 같이 실행시킬 쿼리를 WITH문으로 감싸 CTE라는 임시 테이블을 생성할 수 있다.
WITH문
우선 샘플로 사용할 데이터를 MEMBER 테이블에서 조회해 보겠습니다. 조회할 항목은 성별, 이름, 나이입니다.
SELECT gender
, name
, age
FROM MEMEBER;
gender | name | age |
MALE | 문OO | 14 |
FEMAIL | 채OO | 24 |
MALE | 유OO | 25 |
MALE | 김OO | 16 |
FEMALE | 정OO | 23 |
실제 쿼리에 조건을 부여하고, 그 결과를 임시 테이블에 저장해 보도록 하겠습니다.
WITH ADULT AS
(
SELECT gender
, name
, age
FROM MEMBER
WHERE age > 19
)
SELECT gender
, name
, age
FROM ADULT
gender | name | age |
FEMAIL | 채OO | 24 |
MALE | 유OO | 25 |
FEMALE | 정OO | 23 |
MEMBER 테이블에서 age가 19보다 높은 데이터만을 추출하여 ADULT라는 새로운 임시테이블을 생성하였습니다.
다중 WITH문
WITH T1 AS (
SELECT '1' A FROM DUAL UNION ALL
SELECT '2' FROM DUAL
), T2 AS (
SELECT '3' A FROM DUAL UNION ALL
SELECT A FROM T1
)
SELECT * FROM T2
또한 위와 같은 방법으로 여러 개의 임시 테이블에 대한 생성도 가능합니다. 해당 내용은 직접 공부하면서 사용해 보시면 좋을 것 같습니다. 사실 이외에도 WITH문으로 할 수 있는 다양한 절이 존재합니다. 그중 가장 많이 사용하는 재귀형 계층 쿼리 WITH RECURSIVE 문에 대한 내용도 남겨놓도록 하겠습니다. 읽어주시면 감사하겠습니다.
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]트랜잭션(Trasaction) 예제로 간단하게 이해하기 (0) | 2023.07.02 |
---|---|
[MySQL]문자열의 대소문자를 변경하는 방법(UPPER, LOWER함수) (4) | 2023.06.25 |
[MySQL]소수점 다루기 - 반올림(ROUND)과 버림(TRUNCATE) (2) | 2023.06.18 |
[MySQL]데이터의 특정 값이 포함되어있는지 확인하는 방법(FIND_IN_SET) (3) | 2023.06.06 |
[MySQL]반드시 알아야 하는 쿼리의 실행 순서 (8) | 2023.05.06 |