L'opérateur égal (=
) est probablement l'opérateur le plus couramment utilisé en SQL. Il compare l'égalité de deux expressions. Même si vous venez tout juste de commencer votre parcours SQL, vous connaissez probablement cet opérateur.
Tableau des sources
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 Pets;
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Exemple
Si nous voulions obtenir tous les animaux avec un certain propriétaire, nous pourrions faire ceci :
SELECT *
FROM Pets
WHERE OwnerId = 3;
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Notre requête utilise l'opérateur égal (=
) pour comparer l'égalité de la valeur du OwnerId
colonne et 3
.
Dans ce cas, le propriétaire numéro 3 a 3 animaux de compagnie.
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 animaux nommés Fluffy, nous pourrions procéder comme suit :
SELECT *
FROM Pets
WHERE PetName = 'Fluffy';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Notre requête utilise l'opérateur égal (=
) pour comparer l'égalité de la valeur du PetName
colonne et la chaîne Fluffy
.
Dans notre cas, nous pouvons voir que l'hôtel pour animaux de compagnie a actuellement deux animaux appelés Fluffy.
Plusieurs conditions
Si vous avez plusieurs conditions, vous pouvez utiliser plusieurs opérateurs égal.
Comme ceci :
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Nous pouvons voir qu'il a renvoyé les lignes où le PetName
la colonne était soit Fluffy
ou Tweet
.
Négation de la condition
Vous pouvez utiliser le NOT
pour annuler la condition fournie par l'opérateur égal. Voici un exemple :
SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Une autre façon de procéder consiste à utiliser l'opérateur différent de, qui est soit <>
ou !=
(ou les deux) selon votre SGBD.
Valeurs NULLES
Vous avez peut-être remarqué que notre exemple de table d'origine contient quelques NULL
valeurs dans la colonne DOB.
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 égal 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 la colonne DOB à NULL
.
SELECT * FROM Pets
WHERE DOB = NULL;
Résultat :
(0 rows affected)
La façon de tester NULL
est d'utiliser IS
.
Par conséquent, nous aurions besoin de réécrire la déclaration ci-dessus comme suit.
SELECT * FROM Pets
WHERE DOB IS NULL;
Résultat :
+---------+-------------+-----------+-----------+-------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+-------| | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+-------+
NULL
les valeurs peuvent être difficiles à comprendre pour les débutants. En fait, ils peuvent être difficiles à comprendre pour les développeurs expérimentés ! En SQL, NULL
a une signification légèrement différente de NULL
dans la plupart des autres langages de programmation.
Mais la chose importante à retenir est que, en SQL, NULL
signifie l'absence d'une valeur. Il n'y a pas de valeur. Par conséquent, nous ne pouvons pas dire qu'il est égal ou non à quelque chose d'autre, car il n'y a pas de valeur de départ.
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.