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.

  • 🔍 Objectif principal : La clause WHERE limite les lignes concernées par une instruction, de sorte que SELECT, UPDATE et DELETE n'affectent que les lignes correspondantes.
  • 🔗 ET Operator: Les lignes ne sont renvoyées que lorsque toutes les conditions sont vraies, ce qui restreint l'ensemble des résultats.
  • 🔀 OR Operator: Des lignes sont renvoyées lorsqu'une seule condition est vraie, élargissant ainsi l'ensemble des résultats.
  • 📋 DEDANS et PAS DEDANS : Le mot-clé IN correspond à une liste de valeurs dans une expression, tandis que NOT IN exclut cette même liste.
  • Comparaison Operateurs : Les fonctions égales à (=), supérieures à (>), inférieures à (<) et différentes de (<>) permettent de filtrer les colonnes numériques, de texte et de date.
  • ⚠️ Gestion des valeurs NULL : NULL ne correspond jamais à = ou <>, donc IS NULL et IS NOT NULL sont nécessaires pour tester les valeurs manquantes.

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.

clause WHERE dans MySQL

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 email
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 email
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 email
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 email
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

FAQ

WHERE filtre les lignes individuelles avant le groupepingElle ne peut donc pas faire référence à des fonctions d'agrégation. HAVING filtre les groupes après l'exécution de GROUP BY, ce qui en fait l'endroit idéal pour des conditions telles que COUNT(*) > 5.

Utilisez IS NULL ou IS NOT NULL. OperaLes opérateurs tels que = et <> renvoient « inconnu » pour NULL, donc `postal_address` = NULL ne correspond à rien, tandis que `postal_address` IS NULL fonctionne.

Oui, lorsque la colonne filtrée est indexée, MySQL Ne lit que les lignes correspondantes au lieu de parcourir la table.ping une colonne dans une fonction, telle que YEAR(`date_of_birth`) = 1980, empêche l'utilisation d'un index.

Oui. Les assistants IA transforment le langage courant en SQL, et MySQL Workbench peut exécuter le résultat. RevVérifiez chaque condition par rapport à votre schéma, car un modèle peut inventer des noms de colonnes.

Commencez par tester avec SELECT. Une clause WHERE incorrecte sur une requête Requête DELETE ou UPDATE Vous pouvez modifier chaque ligne. Prévisualisez les lignes correspondantes, puis réutilisez la même condition pour l'écriture.

Résumez cet article avec :