MySQL Clause WHERE : AND, OR, IN, NOT IN Exemple de requête
⚡ Résumé intelligent
MySQL La clause WHERE filtre les lignes avant qu'elles n'atteignent le résultat, en appliquant des critères précis aux instructions SELECT, UPDATE et DELETE. La compréhension des opérateurs AND, OR, IN, NOT IN et de comparaison permet aux débutants de récupérer exactement les enregistrements requis par une requête.

Qu'est-ce que la clause WHERE dans MySQL?
clause WHERE in MySQL est un mot clé utilisé pour spécifier les critères exacts des données ou des lignes qui seront affectées par l'instruction SQL spécifiée. La clause WHERE peut être utilisée avec des instructions SQL telles que INSERT, UPDATE, SELECT et DELETE pour filtrer les enregistrements et effectuer diverses opérations sur les données.
Nous avons examiné comment interroger les données d'un base de données en utilisant l'instruction SELECT du didacticiel précédent. L'instruction SELECT a renvoyé tous les résultats de la table de base de données interrogée.
Il arrive cependant que l'on souhaite limiter les résultats d'une requête à une condition spécifique. La clause WHERE en SQL s'avère très utile dans ces situations, et son fonctionnement est identique dans un contexte donné. Requête DELETE ou UPDATE comme dans une requête SELECT.
Syntaxe de la clause WHERE
La syntaxe de base de la clause WHERE est la suivante.
SELECT * FROM tableName WHERE condition;
ICI. (en anglais seulement)
- « SELECT * FROM nom_table » est la norme Instruction SELECT
- "OÙ" est le mot-clé qui restreint l'ensemble des résultats, et "condition" Il s'agit du filtre appliqué aux résultats. Ce filtre peut être une plage de valeurs, une valeur unique ou une sous-requête.
Supposons que nous souhaitions obtenir les informations d'un membre à partir de la table des membres, en fonction de son numéro d'adhésion 1. Le script ci-dessous permet d'y parvenir.
SELECT * FROM `members` WHERE `membership_number` = 1;
Exécuter ce script dans MySQL établi La commande « myflixdb » produit le résultat ci-dessous.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Une seule condition est rarement suffisante. Les sections ci-dessous combinent WHERE avec Opérateurs logiques.
Clause WHERE combinée avec – ET LOGIQUE Operator
Avec l'opérateur logique ET, une ligne est renvoyée uniquement si TOUS les critères spécifiés sont remplis.
Supposons que nous voulions tous les films de la catégorie 2 sortis en 2008. Le script ci-dessous permet d'y parvenir.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
L'exécution du script ci-dessus sur la base de données « myflixdb » produit le résultat suivant.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
ET restreint un ensemble de résultats. OU l'élargit.
Clause WHERE combinée avec – OR LOGIQUE Operator
Avec l'opérateur OU, une ligne est renvoyée si au moins un des critères spécifiés est rempli.
Le script suivant répertorie tous les films appartenant soit à la catégorie 1, soit à la catégorie 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Les résultats sont présentés ci-dessous.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
L'enchaînement de nombreuses conditions OU rend les formules difficiles à lire. Le mot-clé IN résout ce problème.
Clause WHERE combinée avec – IN Mots-clés
La clause WHERE, lorsqu'elle est utilisée avec le mot-clé IN, ne concerne que les lignes dont les valeurs correspondent à la liste fournie. IN permet de réduire le nombre de clauses OR que vous auriez autrement à écrire.
MySQL La requête WHERE IN renvoie les lignes où membership_number est soit 1, 2 ou 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Les résultats sont présentés ci-dessous.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN effectue le filtrage inverse.
Clause WHERE combinée avec – PAS DANS Mots-clés
Avec le mot-clé NOT IN, la clause WHERE exclut toutes les lignes dont la valeur correspond à la liste fournie.
La requête suivante renvoie les lignes où membership_number n'est PAS 1, 2 ou 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Les résultats sont présentés ci-dessous.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
L'opérateur WHERE filtre également les valeurs par taille et par égalité, en utilisant des opérateurs de comparaison.
Clause WHERE combinée avec – COMPARAISON Operajeudi
Les opérateurs de comparaison inférieur à (<), égal à (=), supérieur à (>) et différent de (<>) peuvent tous être utilisés avec la clause WHERE.
= Égal à
Le script suivant récupère toutes les membres féminines de la table des membres en utilisant l'opérateur de comparaison égal à.
SELECT * FROM `members` WHERE `gender` = 'Female';
Les résultats sont présentés ci-dessous.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Supérieure à
Le script suivant extrait tous les paiements supérieurs à 2,000 du tableau des paiements.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Les résultats sont présentés ci-dessous.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Différent de
Le script suivant récupère tous les films dont l'identifiant de catégorie n'est pas 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Les résultats sont présentés ci-dessous.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Référence rapide : Clause WHERE Operajeudi
Les opérateurs les plus fréquemment associés à WHERE sont résumés ci-dessous. Les définitions complètes figurent dans le MySQL référence de l'opérateur.
| Opérateur | Sens | Exemple de condition |
|---|---|---|
| = | Égal à | `genre` = 'Femme' |
| <> | Pas égal à | `category_id` <> 1 |
| > / | Supérieur à / inférieur à | `amount_paid` > 2000 |
| ET/OU | Tous les critères / n'importe quel critère | `category_id` = 2 ET `year_released` = 2008 |
| DANS / PAS DANS | Correspond à une liste / l'exclut | `membership_number` IN (1,2,3) |
| EST NUL / N'EST PAS NUL | Tests de valeurs manquantes | `postal_address` EST NULL |
⚠️ Remarque : NULL ne correspond jamais à = ou <>. Utilisez IS NULL ou IS NOT NULL lorsqu'une colonne peut ne contenir aucune valeur.
Casse-tête : Trouver les films rendus en retard
Supposons que nous souhaitions récupérer les films loués qui n'ont pas été rendus avant la date limite du 25/06/2012. La combinaison de la clause WHERE avec l'opérateur « inférieur à » et la clause AND permet d'obtenir ce résultat.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Exécuter le script ci-dessus dans MySQL L'établi donne les résultats suivants.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

