CASE 표현식으로 IF/ELSE문과 같은 로직을 구사할 수 있다. 해당 표현식으로 다양한 조건문 처리를 할 수 있다.
SELECT
CASE WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
ELSE 조건식3
END;
입력한 인자값 중에 널값이 아닌 첫번째 값을 리턴한다.
널 처리할 때 유용하게 사용
COALESCE(DISCOUNT, 0)
-- DISCOUNT가 널이라면 0을 리턴하고 널이 아니라면 DISCOUNT값을 리턴한다.
입력한 두개의 인자의 값이 동일하면 NULL을 리턴하고 그렇지 않으면 첫번째 인자값을 리턴한다.
NULLIF(1, 0) -- 1
NULLIF(0, 0) -- null
데이터 값을 특정 데이터 타입으로 형변환이 가능하도록한다.
각종 데이터 값을 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)
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문의 결과를 임시집합으로 사용할 수 있음!
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를 이용해서 깊이 만큼 들여쓰기해서 출력
BEGIN, COMMIT, ROLLBACK
DML 작업을 하고 난 후 DBMS에 반영할건지 말건지를 정해야한다. 그렇게 하는 명령어가 COMMIT, ROLLBACK임!
오라클은 DDL은 커밋하지 않아도 됨!
BEGIN은 작업을 시작하겠다는 의미 생략가능