[SQL] BOOLEAN 타입 정리, NULL 의 BOOLEAN 연산

Peter·2021년 7월 13일
0

SQL

목록 보기
13/19

BOOLEAN

%%sql

SELECT *
FROM raw_data.boolean_test;

  • flag 컬럼에 정보가 담긴 테이블
  • flag = True, flag is True는 동일표현
  • flag is True, flag is not False 는?
%%sql

SELECT
    COUNT(CASE WHEN flag = True THEN 1 END) true_cnt1,
    COUNT(CASE WHEN flag is True THEN 1 END) true_cnt2,
    COUNT(CASE WHEN flag is not False THEN 1 END) not_false_cnt
FROM raw_data.boolean_test;

  • 트루 2개 인건 동일
  • False가 아닌것에 NULL값도 포함되서 가운트됨

NULL 비교

  • NULL 비교는 항상 IS 혹은 IS NOT으로 수행
  • NULL 비교를 = 혹은 !=혹은 <> 으로 수행하면 잘못된 결과가 나옴
%%sql

SELECT COUNT(1)
FROM raw_data.boolean_test
WHERE flag is NULL;
  • 1개가 카운트됨
%%sql

SELECT COUNT(1)
FROM raw_data.boolean_test
WHERE flag = NULL;
  • 0개가 카운트됨
  • 연산자에 반응 안함

COALESCE

%%sql

SELECT
     value,
     COALESCE(value, 0)
FROM raw_data.count_test;

  • NULL값을 다른 값으로 바꿔주는 함수
  • NULL 대신 다른 백업값을 리턴해줌
  • COALESCE(밸류가 None ro NULL이면,0으로 )

테이블의 NULL값 여부 설정

%%sql

DROP TABLE IF EXISTS adhoc.keeyong_test_null;
CREATE TABLE adhoc.keeyong_test_null (
    value int NOT NULL
);
  • test_null 테이블을 만들고 value 컬럼 속성에 NOT NULL을 하면 컬럼에 NULL이 오진 못함
%%sql

INSERT INTO adhoc.keeyong_test_null VALUES (NULL);
  • 위 설정한 상태로 컬럼에 NULL을 넣으려고 하면 에러를 리턴해줌
profile
컴퓨터가 좋아

0개의 댓글