- Catégories :
EQUAL_NULL¶
Compare si deux expressions sont égales. La fonction est NULL-safe, ce qui signifie qu’elle considère les NULLs comme des valeurs connues permettant de comparer l’égalité. Notez que cela diffère de l’opérateur de comparaison EQUAL (=
), qui considère les NULLs comme des valeurs inconnues.
- Voir aussi:
Syntaxe¶
EQUAL_NULL( <expr1> , <expr2> )
Notes sur l’utilisation¶
La valeur renvoyée dépend de la présence de valeurs NULL parmi les entrées :
- Renvoie TRUE:
EQUAL_NULL( <null> , <null> )
- Renvoie FALSE:
EQUAL_NULL( <null> , <non_null> )
EQUAL_NULL( <non_null> , <null> )
Sinon :
EQUAL_NULL(<expr1>, <expr2>)
équivaut à<expr1> = <expr2>
Pour plus de détails, voir les exemples ci-dessous.
Détails du classement¶
The collation specifications of all input arguments must be compatible.
The comparisons follow the collation based on the input arguments” collations and precedences.
Exemples¶
Créer une table avec des données simples :
CREATE OR REPLACE TABLE x (i number); INSERT INTO x values (1), (2), (null);
Afficher le produit cartésien généré en joignant la table à elle-même sans filtre :
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 | +------+------+
Retourner des lignes contenant seulement des valeurs égales pour les deux colonnes :
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 | +------+------+
Retourner des lignes contenant seulement des valeurs égales ou NULL pour les deux colonnes :
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 | +------+------+
Illustrer tous les résultats possibles pour EQUAL (=
) et 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 | +------+------+-----------+---------------------+------------+----------------------+
Illustrer tous les résultats possibles pour EQUAL_NULL et 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 | | 1 | 2 | False | Not | True | Selected | | 1 | NULL | False | Not | True | Selected | | 2 | 1 | False | Not | True | Selected | | 2 | 2 | True | Selected | False | Not | | 2 | NULL | False | Not | True | Selected | | NULL | 1 | False | Not | True | Selected | | NULL | 2 | False | Not | True | Selected | | NULL | NULL | True | Selected | False | Not | +------+------+-----------------------+---------------------------------+----------------------------+--------------------------------------+