[NOT] EQUAL_NULL
[NOT] EQUAL_NULL
두 표현식이 같은지 비교해요. 이 함수는 NULL 안전(NULL-safe)해서, 동일성 비교를 위해 NULL을 알려진 값으로 취급해요. 이는 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 |
+------+------+------------------------+---------------------------------+----------------------------+--------------------------------------+