En SQL, le AND
L'opérateur vous permet de vérifier plusieurs conditions lors du filtrage de vos requêtes.
Le AND
L'opérateur combine deux expressions booléennes et renvoie TRUE
lorsque les deux expressions sont TRUE
.
Tableau des sources
Le tableau suivant est utilisé 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
Voici un exemple simple pour démontrer le AND
opérateur.
SELECT * FROM Pets
WHERE PetName = 'Fluffy' AND DOB > '2020-11-01';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | +---------+-------------+-----------+-----------+------------+
Comme prévu, il n'a renvoyé que les lignes contenant à la fois le PetName
la colonne était Fluffy
et la DOB
la colonne était supérieure à 2020-11-01
.
Dans ce cas, une seule ligne correspondait à ce critère et, par conséquent, une seule ligne a été renvoyée.
Combiné avec d'autres opérateurs
Vos critères de filtrage peuvent combiner des expressions qui utilisent d'autres opérateurs en plus du AND
opérateur.
Voici un exemple qui inclut le OR
opérateur.
SELECT * FROM Pets
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Remarquez que j'ai entouré le OR
condition entre parenthèses. J'ai fait cela afin de spécifier l'ordre dans lequel chaque expression doit être évaluée.,
Par défaut, AND
les opérateurs sont évalués avant OR
les opérateurs. SQL a un ordre de priorité défini des opérateurs dans une expression, et cela dicte que le AND
l'opérateur est évalué avant le OR
opérateur.
Cependant, vous pouvez utiliser des parenthèses pour remplacer la priorité définie des opérateurs dans une expression. Tout ce qui se trouve entre parenthèses est évalué pour renvoyer une valeur unique. Cette valeur peut être utilisée par n'importe quel opérateur en dehors de ces parenthèses.
En d'autres termes, vous pouvez utiliser des parenthèses pour spécifier l'ordre dans lequel vous souhaitez que chaque opérateur logique soit évalué dans une expression.
Pour illustrer ce problème, jetez un œil aux résultats lorsque nous supprimons les parenthèses.
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';
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 | +---------+-------------+-----------+-----------+------------+
Maintenant, nous obtenons un résultat différent.
En effet, la requête vérifie maintenant PetName = 'Tweet' AND DOB >= '2020-11-20'
d'abord, puis vérifie le OR
expression PetName = 'Fluffy'
.
C'est comme si on mettait des parenthèses autour du AND
expression, comme ceci :
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');
Cependant, pour confondre encore plus les choses, nous pourrions réorganiser notre requête afin de ne pas utiliser de parenthèses, tout en obtenant toujours le même résultat que notre premier exemple avec des parenthèses.
Comme ceci :
SELECT * FROM Pets
WHERE DOB >= '2020-11-20'
AND 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 | +---------+-------------+-----------+-----------+------------+
Dans ce cas, le AND
l'expression a été évaluée en premier, comme prévu. L'ordre des expressions s'est simplement aligné de sorte que DOB >= '2020-11-20' AND PetName = 'Fluffy'
a été évalué en premier, nous avons donc exclu l'autre animal appelé Fluffy en raison de sa DOB
tombant en dehors de cette plage. Ce n'est qu'après cela que le OR
expression évaluée comme une condition alternative à notre AND
existant résultat.
Par conséquent, il est fortement recommandé d'utiliser des parenthèses lors de l'utilisation de plusieurs opérateurs. Cela garantit que la requête est évaluée exactement comme vous l'aviez prévu.