En SQL, l'opérateur différent de (!=
) compare la non-égalité de deux expressions. C'est-à-dire qu'il teste si une expression n'est pas égal à une autre expression.
Si l'un des opérandes ou les deux sont NULL
, NULL
est renvoyé.
SQL a également un autre opérateur différent de (<>
), qui fait la même chose. Celui que vous utilisez peut dépendre de votre SGBD, de celui avec lequel vous êtes le plus à l'aise, et peut-être aussi si votre organisation a des conventions de codage qui dictent laquelle doit être utilisée.
Tableau source
Imaginez que notre base de données contient le tableau suivant. C'est le tableau que nous utiliserons pour les exemples sur cette page.
SELECT * FROM Owners;
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Exemple
Si nous voulions retourner une liste de tous les propriétaires qui n'ont pas de OwnerId
de 3
, nous pourrions faire ceci :
SELECT *
FROM Owners
WHERE OwnerId != 3;
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Notre requête utilise l'opérateur différent de (!=
) pour tester si le OwnerId
la colonne n'est pas égale à 3
. La requête renvoie tous les propriétaires sauf le propriétaire numéro 3.
Chaînes
Lors de la comparaison avec une valeur de chaîne, utilisez des guillemets autour de la chaîne. Par exemple, si nous voulions obtenir des informations sur tous les propriétaires dont le prénom n'est pas Homer, nous pourrions procéder comme suit :
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Conditions multiples
Si vous avez plusieurs conditions, vous pouvez utiliser plusieurs opérateurs (qu'ils soient identiques ou différents).
Comme ceci :
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Une fois que vous commencez à utiliser plus de conditions, vous devez utiliser des parenthèses pour entourer les conditions que vous souhaitez évaluer en premier. Si vous ne le faites pas, vous risquez d'obtenir des résultats inattendus, car les conditions sont évaluées dans un ordre que vous n'aviez pas prévu.
Négation de la condition
Si vous utilisez le NOT
pour annuler la condition fournie par l'opérateur différent de, vous finirez par obtenir les résultats des égaux (=
) opérateur :
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Dans ce cas, vous feriez mieux d'utiliser simplement les égaux (=
) opérateur, comme ceci :
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Bien sûr, cela pourrait être annulé avec le NOT
, qui nous donnerait alors le même résultat que le pas égal à (!=
) l'opérateur nous donne :
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
Valeurs NULLES
Vous avez peut-être remarqué que notre exemple de table d'origine contient quelques NULL
valeurs dans le Email
colonne.
Une colonne contenant NULL
signifie qu'il n'a aucune valeur. Ceci est différent de 0
ou false
, ou même une chaîne vide.
Vous ne pouvez pas utiliser l'opérateur différent de pour comparer avec NULL
. En fait, cela peut dépendre de votre SGBD et de sa configuration. Mais pour l'instant, regardons ce qui se passe si j'essaie de comparer l'Email
colonne à NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Résultat :
(0 rows affected)
La façon de tester non-NULL
valeurs est d'utiliser IS NOT NULL
.
Par conséquent, nous aurions besoin de réécrire la déclaration ci-dessus comme suit.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Maintenant, nous n'obtenons que les lignes qui ne sont pas NULL
dans le Email
colonne.
Si vous êtes intéressé, consultez SQL Server ANSI_NULLS Explained
pour voir comment vous pouvez changer la façon dont NULL
les valeurs sont traitées dans SQL Server.