[SQL/DB] 조건 연산자 / WITH문 / 트랜잭션
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은 작업을 시작하겠다는 의미 생략가능
Author And Source
이 문제에 관하여([SQL/DB] 조건 연산자 / WITH문 / 트랜잭션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@6v6/SQLDB-조건-연산자-WITH문-트랜잭션저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)