본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 데이터 조회 및 필터 | WITH

by dazwischen 2021. 9. 22. 13:51
반응형

데이터를 먼저 불러와서 선작업을 한 후에 종합적으로 데이터 처리를 해야할 경우가 있다. 그럴 때 이용할 수 있는 것이 WITH 기능이다. WITH는 서브쿼리를 이용하는 것에 조금 기능을 익히기만 하면 되기 때문에 알아 둔다면 더욱더 자유롭게 SQL을 이용하는데 도움이 된다.

WITH

sql-with-썸네일-이미지
SQL WITH

01 WITH 절 사용방법

WITH절을 사용하기 위한 정해진 문법(약속)이 있다. 그 것을 익히는 것이 앞으로 WITH 기능을 잘 이해하고 이용하는데 어려움을 덜어준다. 꼭 사용법을 외우자.

--- WITH절 작성
WITH TEMP_NAME AS ( SUBQUERY )
--- WITH절 완료 및 메인쿼리 시작
SELECT	*
FROM	TEMP_NAME
;

먼저 WITH 를 이용해서 선작업할 (임시로 이용할) 테이블 이름을 정해준다. 위에서는 TEMP_NAME으로 정했다. 이름 다음에 AS를 작성하고 괄호안에 불러올 쿼리를 작성해 준다. 이렇게 해서 WITH 절이 완성이 된다. 이렇게 완성된 WITH절의 데이터셋 (데이터집합)은 메인쿼리에서 하나의 존재하는 테이블처럼 이용하면 된다.

EXAMPLE

SQL 시험 점수별별로 등급을 80점 이상 1등급, 60점 이상 2등급, 60점 미만 불합격으로 나누고 등급이 2등급 이상인 수험생들의 이름과 등급을 알려주세요.

WITH 등급분류 AS (
	SELECT	이름, 점수,
    		(CASE	WHEN POINT >= 80 THEN '1등급'
    		WHEN POINT < 80 AND POINT >= 60 THEN '2등급'
            	ELSE '불합격'
            	END) 등급 
	)
SELECT	이름, 등급
FROM	등급분류
WHERE	등급 IN ('1등급', '2등급')
;

 

 

02 WITH 절 여러번 사용 가능하다

여러 곳에서 데이터를 모아와서 가공 후 마지막 종합하고 싶을 때는 WITH 절을 여러번 사용해 주기만 하면 된다.

--- WITH 절 시작
WITH 	  TEMP_NAME1 AS ( SUBQUERY )
	, TEMP_NAME2 AS ( SUBQUERY )
--- WITH 절 끝 메인쿼리 시작
SELECT	*
FROM 	TEMP_NAME1 A, TEMP_NAME2 B
;

EXAMPLE

SQL 시험점수 80점 이상은 1등급, 60점 이상은 2등급, 60점 미만은 불합격 분류하고 수헙생들 정보에서 컴퓨터 공학과 학생들과 관련직 종사자들은 관련여부 컬럼 TURE로 그 외에는 FALSE 표기한 후에 수험생 이름, 점수, 등급, 관련여부를 한 번에 보여주세요.

WITH 
	 등급분류 AS (
		SELECT	ID, 이름, 점수,
    			(CASE	WHEN POINT >= 80 THEN '1등급'
    			WHEN POINT < 80 AND POINT >= 60 THEN '2등급'
           	 	ELSE '불합격'
           	 	END) 등급 
		)
	, 관계 AS (
    		SELECT	ID, 이름,
        		(CASE WHEN 직업 = '컴퓨터 공학과 학생' OR 직업 = '관련직 종사자' THEN TRUE
                	ELSE FALSE
			END) 관련여부
		)
SELECT	이름, 등급, 관련여부
FROM	등급분류, 관계
;

SUMMARY

  • WITH 절은 임시로 테이블을을 불러와서 사용할 때 사용한다.
  • 작성 순서 : WITH 임시테이블이름 AS (SUBQUERY) 메인쿼리
  • WITH절은 여러 번 작성이 가능하다. WITH를 한 번 쓰고 "임시테이블이름 AS (SUBQUERY)"를 콤마 (,) 로 이어주면된다.
반응형

댓글