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

Opérateur SQL ET pour les débutants

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.