Database
 sql >> Base de données >  >> RDS >> Database

Opérateur SQL différent de (!=) pour les débutants

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.