본문 바로가기

Database/SQL

COALESCE와 ::(double colon) 의미

COALESCE(병합) 은 어떨때 쓰는가?

SQL은 굉장히 직관적이다 

SELECT 는 말 그대로 선택이고 MAX는 최대값, JOIN은 합치기 등등..

근데 유난히 이 COALESCE는 한국어로 병합인데 이건 좀 이해하기 힘들더라...

 

어쨋건... 이걸 쓰는 이유는 Null값을 다루기 위해서다.

 

CREATE TABLE purchase_log (
    purchase_id varchar(255)
  , amount      integer
  , coupon      integer
);

INSERT INTO purchase_log
VALUES
    ('10001', 3280, NULL)
  , ('10002', 4650,  500)
  , ('10003', 3870, NULL)
;

 

이 상태에서 할인가격을 구하려면 amount 에서 coupon을 빼야 할텐데,

쿠폰이 없는 고객들은 쿠폰의 value가 NULL이 되면서, 결과적으로는

3200원 - NULL을 시전하게 되어 오류가 생기는데, 이때 COALESCE를 사용하여

 

amount - COALESCE(coupon , 0) AS 할인가격 을 설정해준다. 

첫번째 인자(coupon)가 NULL이면 0 을 반환해주고 coupon이 만약 천원으로 들어가면 

그대로 그 천원이 반환된다. 

 

출처 : https://augustines.tistory.com/64

 

PostgreSQL - COALESCE 함수 활용

쿼리를 만들 때, null 값을 특정 데이터로 가공해서 추출이 필요할 때가 있다. 뿐만 아니라, application layer에서 데이터가 아닌 null 을 리턴할 때, NullPointerException을 초래할 수도 있고, 집계 쿼리를

augustines.tistory.com

 

더블콜론 ( :: )  의 의미

간단하다. 타입 캐스팅 (형변환) 이라고 보면 된다

(내 기억엔 프로그래밍 언어에도 c#같은곳에서 사용하는걸로 알고있는데...)

 

1 :: BOOLEAN 이면 true가 출력될 것이고

1.2 :: INTEGER 이면 float를 int로 바꾸니 1이 출력될 것이다.

 

사실 

 

CAST (1 :: BOOLEAN)

CAST(1.2 :: INTEGER)

 

키워드로 해도 결과는 똑같다. 

'Database > SQL' 카테고리의 다른 글

Check 키워드로 제약조건 설정(DB Validation) 하기  (0) 2023.04.24