SQL 정리 - (5)

  • 조건 연산자

    • CASE
    • coalesce
    • null if
    • cast
    • with
    • 재귀커리
    • 트랜잭션
      • begin
      • commit
      • rollback

  • CASE 행으로 뽑는다.

SELECT

SUM (CASE WHEN RENTAL_RATE = 0.99 THEN 1 ELSE 0 END) AS “C”

FROM FILM;

  • coalesce : 입력한 인자값 중에서 널값이 아닌 첫번째 값을 리턴한다. (널 처리할 때 유용하게 사용된다.)

SELECT

PRODUCT, price, discount, COALESCE(DISCOUNT, 0)

, (PRICE - COALESCE(DISCOUNT, 0)) AS NET_PRICE

FROM TB_ITEM_COALESCE_TEST;


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

SELECT (SUM(CASE WHEN GENDER = 1 THEN 1 ELSE 0 END) / NULLIF(SUM(CASE WHEN GENDER = 2 THEN 1 ELSE 0 END), 0)) * 100

AS “MALE/FEMALE RATIO”

FROM TB_MEMBER_NULLIF_TEST;


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

SELECT CAST (‘100’ AS INTEGER);

SELECT CAST ‘100’::INTEGER; 두개의 결과는 같다.


  • 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 )


  • 재귀 커리 : 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

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;#   는 concat의미,LPAD는 왼쪽에 공백둘 때 사용

오라클 DDL은 커밋을 할 필요가 없다 POSTGRESQL dms DDL도 커밋을 해야한다.

  • DML을 작업 하고 난 후 DBMS에 반영할건지 말건지를 결정해야 한다. 그렇게 하는게 COMMIT,ROLLBACK

commit 하기 전에 데이터를 입력하고 rollback하면 입력이 취소됨. 하지만 commit하고 rollback하면 효과가 없다.


  • References

    • 패스트 캠퍼스 모두를 위한 SQL

Comments