Articles

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:

SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Code language: SQL (Structured Query Language) (sql)

Examinons la requête plus en détail :

  • Utiliser un column ou une expression ( expr ) avec l’opérateur IN dans la clause WHERE.
  • 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’expression expr.
  • 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:

Tableau des bureaux

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 :

SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Essayez-le

Exemple de liste de pays de MySQL IN
Vous pouvez obtenir le même résultat avec l’opérateur OR comme la requête suivante :

SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Code language: SQL (Structured Query Language) (sql)

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 :

SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Essayez-le

MySQL NOT IN offices example

.

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 :

tableauorders orderdetails

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 :

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Code language: SQL (Structured Query Language) (sql)

Essayez-le

MySQL IN avec exemple de sous-requête

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 :

SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Code language: SQL (Structured Query Language) (sql)

Essayez-le

MySQL IN subquery

Second, la requête externe utilise l’opérateur IN dans la clause WHERE pour obtenir les données de la table orders :

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Code language: SQL (Structured Query Language) (sql)

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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *