[SQL/DB] 조건 연산자 / WITH문 / 트랜잭션

ack·2021년 7월 9일
0

SQL/DB

목록 보기
8/8
post-thumbnail

ch07 조건 연산자 / WITH문 / 트랜잭션

01. CASE

CASE 표현식으로 IF/ELSE문과 같은 로직을 구사할 수 있다. 해당 표현식으로 다양한 조건문 처리를 할 수 있다.

SELECT
	CASE WHEN 조건식1 THEN 결과1
		 WHEN 조건식2 THEN 결과2
		 ELSE 조건식3
	END;

02. COALESCE

입력한 인자값 중에 널값이 아닌 첫번째 값을 리턴한다.

널 처리할 때 유용하게 사용

COALESCE(DISCOUNT, 0) 
-- DISCOUNT가 널이라면 0을 리턴하고 널이 아니라면 DISCOUNT값을 리턴한다.

03. NULLIF

입력한 두개의 인자의 값이 동일하면 NULL을 리턴하고 그렇지 않으면 첫번째 인자값을 리턴한다.

 NULLIF(1, 0) -- 1
 NULLIF(0, 0) -- null

04. CAST

데이터 값을 특정 데이터 타입으로 형변환이 가능하도록한다.

각종 데이터 값을 CAST 표현식을 이용해 적절하게 형변환한다.

SELECT CAST('100' AS INTEGER) -- INTEGER로 변환
SELECT CAST('10C' AS INTEGER) -- 문자가 포함되어 있어서 INTEGER로 변환 안됨
SELECT CAST('2015-01-01' AS DATE) -- DATE형으로 변환
SELECT CAST('10.2' AS DOUBLE PRECISION) 

05. WITH문의 활용

SELECT문의 결과를 임시 집합으로 저장해두고 SQL문에서 마치 테이블처럼 해당 집합을 불러올 수 있다.

WITH TMP1 AS (
SELECT
	   FILM_ID
	 , TITLE
	 ,
	 (CASE
		WHEN LENGTH < 30 THEN 'SHORT'
		WHEN LENGTH >= 30
		AND LENGTH < 90 THEN 'MEDIUM'
		WHEN LENGTH > 90 THEN 'LONG'
	  END) LENGTH
  FROM
	   FILM
)
SELECT * FROM TMP1; 
-- TMP1으로 sql문의 결과를 임시집합으로 사용할 수 있음!

06. 재귀 쿼리

WITH문을 이용하여 재귀 쿼리를 작성할 수 있다.

재귀쿼리랑 데이터값 기준 부모 자식간의 관계를 표현하는 SQL이다.

WITH RECURSIVE TMP1 AS (
SELECT
       EMPLOYEE_ID
     , MANAGER_ID
     , FULL_NAME
     , 0 LVL
  FROM
       TB_EMP_RECURSIVE_TEST
 WHERE MANAGER_ID IS NULL -- MANAGER_ID IS NULL인 조건부터 재귀 시작
UNION 
SELECT
       E.EMPLOYEE_ID
     , E.MANAGER_ID
     , E.FULL_NAME
     , S.LVL + 1
  FROM
     TB_EMP_RECURSIVE_TEST E
   , TMP1 S 
 WHERE S.EMPLOYEE_ID = E.MANAGER_ID
) 
SELECT EMPLOYEE_ID, MANAGER_ID, LPAD(' ', 4 * (LVL)) || FULL_NAME AS FULL_NAME FROM TMP1; -- LPAD를 이용해서 깊이 만큼 들여쓰기해서 출력

07. 트랜잭션

BEGIN, COMMIT, ROLLBACK

DML 작업을 하고 난 후 DBMS에 반영할건지 말건지를 정해야한다. 그렇게 하는 명령어가 COMMIT, ROLLBACK임!

오라클은 DDL은 커밋하지 않아도 됨!

BEGIN은 작업을 시작하겠다는 의미 생략가능

profile
아자 (*•̀ᴗ•́*)و

0개의 댓글