MySQL IN
Summary : dans ce tutoriel, vous apprendrez à utiliser l’opérateur MySQL IN
pour déterminer si une valeur spécifiée correspond à n’importe quelle valeur dans une liste ou une sous-requête.
Introduction à l’opérateur IN de MySQL
L’opérateur IN
vous permet de déterminer si une valeur spécifiée correspond à toute valeur dans un ensemble de valeurs ou retournée par une sous-requête.
Les éléments suivants illustrent la syntaxe de l’opérateur IN
:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Examinons la requête plus en détail :
- Utiliser un
column
ou une expression (expr
) avec l’opérateurIN
dans la clauseWHERE
. - Séparer les valeurs de la liste par des virgules (,).
L’opérateur IN
renvoie 1 si la valeur de la column_1
ou le résultat de l’expression expr
est égal à n’importe quelle valeur de la liste, sinon, il renvoie 0.
Lorsque les valeurs de la liste sont toutes des constantes, MySQL effectue les étapes suivantes :
- D’abord, évaluer les valeurs en fonction du type de l’expression
column_1
ou du résultat de l’expressionexpr
. - Deuxièmement, trier les valeurs.
- Troisièmement, rechercher la valeur en utilisant l’algorithme de recherche binaire. Par conséquent, une requête qui utilise l’opérateur
IN
avec une liste de constantes s’exécute très rapidement.
Notez que si la expr
ou toute valeur de la liste est NULL
, l’opérateur IN
renvoie NULL
.
Vous pouvez combiner l’opérateur IN
avec l’opérateur NOT
pour déterminer si une valeur ne correspond à aucune valeur dans une liste ou une sous-requête. Et vous pouvez également utiliser l’opérateur IN
dans la clause WHERE
d’autres instructions telles que UPDATE
, et DELETE
.
Exemples de l’opérateur IN de MySQL
Mettons-nous en pratique avec quelques exemples d’utilisation de l’opérateur IN
. Consultez le tableau suivant offices
de la base de données exemple:

Si vous voulez trouver les bureaux qui se trouvent aux États-Unis. et en France, vous pouvez utiliser l’opérateur IN
comme la requête suivante :
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Essayez-le
Vous pouvez obtenir le même résultat avec l’opérateur OR
comme la requête suivante :
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Essayez-le
Dans le cas où la liste comporte de nombreuses valeurs, vous devez construire une très longue déclaration avec plusieurs OR
opérateurs. Par conséquent, l’opérateur IN
vous permet de raccourcir la requête et de la rendre plus lisible.
Pour obtenir les bureaux qui ne sont pas situés aux États-Unis et en France, vous utilisez NOT IN
dans la clause WHERE
comme suit :
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Essayez-le

Utilisation de MySQL IN avec une sous-requête
L’opérateur IN
est souvent utilisé avec une sous-requête. Au lieu de fournir une liste de valeurs littérales, la sous-requête obtient une liste de valeurs d’une ou plusieurs tables et les utilise comme valeurs d’entrée de l’opérateur IN
.
Regardons les tables orders
et orderDetails
de la base de données exemple :

Par exemple, si vous voulez trouver les commandes dont les valeurs totales sont supérieures à 60,000
, vous utilisez l’opérateur IN
comme le montre la requête suivante :
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Essayez-le

L’ensemble de la requête ci-dessus peut être décomposé en deux requêtes distinctes.
Premièrement, la sous-requête renvoie une liste de numéros d’ordre dont les valeurs sont supérieures à 60,000
en utilisant les clauses GROUP BY
et HAVING
:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Essayez-le

Second, la requête externe utilise l’opérateur IN
dans la clause WHERE
pour obtenir les données de la table orders
:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Try It Out
Dans ce tutoriel, vous avez appris à utiliser l’opérateur MySQL IN
pour déterminer si une valeur correspond à n’importe quelle valeur dans une liste de valeurs.
- Ce tutoriel vous a-t-il été utile ?
- OuiNon
.