[NOT] EQUAL_NULL

[NOT] EQUAL_NULL

두 표현식이 같은지 비교해요. 이 함수는 NULL 안전(NULL-safe)해서, 동일성 비교를 위해 NULL을 알려진 값으로 취급해요. 이는 EQUAL 비교 연산자(=)와 다르다는 점에 유의해요. =는 NULL을 알려지지 않은 값으로 취급해요.

출처: Snowflake SQL Reference - [NOT] EQUAL_NULL

본문

구문

[ NOT ] EQUAL_NULL( <expr1> , <expr2> )

사용상 주의사항

반환 값은 입력 중 NULL 값이 있는지 여부에 따라 달라져요.

  • TRUE를 반환: EQUAL_NULL( <null> , <null> )
  • FALSE를 반환:
    • EQUAL_NULL( <null> , <not_null> )
    • EQUAL_NULL( <not_null> , <null> )
  • 그 외의 경우: EQUAL_NULL(<expr1>, <expr2>)는 <expr1> = <expr2>와 동등해요.

자세한 내용은 아래 예시를 참고해요.

컬레이션 상세

  • 모든 입력 인자의 컬레이션 지정은 호환 가능해야 해요.
  • 비교는 입력 인자의 컬레이션과 우선순위에 따라 수행돼요.

예시

간단한 데이터가 있는 테이블을 만들어요.

CREATE OR REPLACE TABLE x (i NUMBER);
INSERT INTO x VALUES
  (1),
  (2),
  (NULL);

필터 없이 테이블을 자기 자신과 조인해 생성한 데카르트 곱을 보여줘요.

SELECT x1.i x1_i, x2.i x2_i
  FROM x x1, x x2
  ORDER BY x1.i, x2.i;

+------+------+
| X1_I | X2_I |
|------+------|
|    1 |    1 |
|    1 |    2 |
|    1 | NULL |
|    2 |    1 |
|    2 |    2 |
|    2 | NULL |
| NULL |    1 |
| NULL |    2 |
| NULL | NULL |
+------+------+

두 컬럼 모두에 같은 값만 포함하는 행을 반환해요.

SELECT x1.i x1_i, x2.i x2_i
  FROM x x1, x x2
  WHERE x1.i = x2.i;

+------+------+
| X1_I | X2_I |
|------+------|
|    1 |    1 |
|    2 |    2 |
+------+------+

두 컬럼 모두에 같은 값 또는 NULL 값만 포함하는 행을 반환해요.

SELECT x1.i x1_i, x2.i x2_i
  FROM x x1, x x2
  WHERE EQUAL_NULL(x1.i, x2.i);

+------+------+
| X1_I | X2_I |
|------+------+
|    1 |    1 |
|    2 |    2 |
| NULL | NULL |
+------+------+

EQUAL(=)과 NOT EQUAL(<>)의 가능한 모든 결과를 보여줘요.

SELECT x1.i x1_i,
       x2.i x2_i,
       x1.i = x2.i,
       IFF(x1.i = x2.i, 'Selected', 'Not') "SELECT IF X1.I=X2.I",
       x1.i <> x2.i,
       IFF(NOT(x1.i = x2.i), 'Selected', 'Not') "SELECT IF X1.I<>X2.I"
  FROM x x1, x x2;

+------+------+-----------+---------------------+------------+----------------------+
| X1_I | X2_I | X1.I=X2.I | SELECT IF X1.I=X2.I | X1.I<>X2.I | SELECT IF X1.I<>X2.I |
|------+------+-----------+---------------------+------------+----------------------|
|    1 |    1 | True      | Selected            | False      | Not                  |
|    1 |    2 | False     | Not                 | True       | Selected             |
|    1 | NULL | NULL      | Not                 | NULL       | Not                  |
|    2 |    1 | False     | Not                 | True       | Selected             |
|    2 |    2 | True      | Selected            | False      | Not                  |
|    2 | NULL | NULL      | Not                 | NULL       | Not                  |
| NULL |    1 | NULL      | Not                 | NULL       | Not                  |
| NULL |    2 | NULL      | Not                 | NULL       | Not                  |
| NULL | NULL | NULL      | Not                 | NULL       | Not                  |
+------+------+-----------+---------------------+------------+----------------------+

EQUAL_NULL과 NOT EQUAL_NULL의 가능한 모든 결과를 보여줘요.

SELECT x1.i x1_i,
       x2.i x2_i,
       EQUAL_NULL(x1.i, x2.i),
       IFF(EQUAL_NULL(x1.i, x2.i), 'Selected', 'Not') "SELECT IF EQUAL_NULL(X1.I,X2.I)",
       NOT EQUAL_NULL(x1.i, x2.i),
       IFF(NOT EQUAL_NULL(x1.i, x2.i), 'Selected', 'Not') "SELECT IF NOT(EQUAL_NULL(X1.I,X2.I))"
  FROM x x1, x x2;

+------+------+------------------------+---------------------------------+----------------------------+--------------------------------------+
| X1_I | X2_I | EQUAL_NULL(X1.I, X2.I) | SELECT IF EQUAL_NULL(X1.I,X2.I) | NOT EQUAL_NULL(X1.I, X2.I) | SELECT IF NOT(EQUAL_NULL(X1.I,X2.I)) |
|------+------+------------------------+---------------------------------+----------------------------+--------------------------------------|
|    1 |    1 | True                   | Selected                        | False                      | Not                                  |
|    2 |    1 | False                  | Not                             | True                       | Selected                             |
| NULL |    1 | False                  | Not                             | True                       | Selected                             |
|    1 |    2 | False                  | Not                             | True                       | Selected                             |
|    2 |    2 | True                   | Selected                        | False                      | Not                                  |
| NULL |    2 | False                  | Not                             | True                       | Selected                             |
|    1 | NULL | False                  | Not                             | True                       | Selected                             |
|    2 | NULL | False                  | Not                             | True                       | Selected                             |
| NULL | NULL | True                   | Selected                        | False                      | Not                                  |
+------+------+------------------------+---------------------------------+----------------------------+--------------------------------------+

더 알아보기