Équivalent de INTERSECT en MySQL
Dans ce tutoriel nous allons vous présenter l’opérateur INTERSECT et vous montrer comment simuler l’opérateur MySQL INTERSECT.
Notez que MySQL ne supporte pas l’opérateur INTERSECT. Ce tutoriel vous explique comment simuler l’opérateur INTERSECT dans MySQL à l’aide de la clause IN ou à l’aide de jointure.
L’opérateur INTERSECT
D’abord, expliquons ce qu’est une requête INTERSECT. Une requête INTERSECT renvoie l’intersection de 2 ensembles ou plus. Si un enregistrement existe dans les deux ensembles de données, il sera inclus dans les résultats d’intersection. Cependant, si un enregistrement existe dans un ensemble de données et non dans l’autre, il sera omis des résultats d’intersection.
La requête INTERSECT renvoie les enregistrements dans la zone ombrée en rouge (B et C).
Syntaxe:
SELECT colonne1, colonne2, ... colonne_n FROM table1 [WHERE conditions] INTERSECT SELECT colonne1, colonne2, ... colonne_n FROM table2 [WHERE conditions];
Exemple en utilisant la clause IN:
Regardons un exemple, comment simuler une requête INTERSECT dans MySQL comportant un champ avec le même type de données.
Si votre SGBD prend en charge l’opérateur INTERSECT (ce que MySQL ne fait pas), vous auriez alors utilisé l’opérateur INTERSECT pour renvoyer les valeurs ClientId qui se trouve dans la table « Clients » et « Commandes ».
SELECT ClientId FROM Commandes INTERSECT SELECT ClientId FROM Clients;
Comme vous ne pouvez pas utiliser l’opérateur INTERSECT dans MySQL, vous utiliserez l’opérateur IN pour simuler la requête INTERSECT comme suit:
SELECT Commandes.ClientId FROM Commandes WHERE Commandes.ClientId IN (SELECT Clients.ClientId FROM Clients);
Dans cet exemple simple, nous avons utiliser l’opérateur IN pour renvoyer toutes les valeurs ClientId présentes dans la table « Clients » et « Commandes ».
Exemple, en utilisant l’opérateur INTERSECT avec une condition(WHERE):
SELECT ClientId FROM Commandes WHERE Totale > 50 INTERSECT SELECT ClientId FROM Clients;
Voici comment simuler la requête INTERSECT à l’aide de l’opérateur IN et inclure la condition WHERE:
SELECT Commandes.ClientId FROM Commandes WHERE Commandes.Totale > 50 AND Commandes.ClientId IN ( SELECT Clients.ClientId FROM Clients );
Exemple en utilisant la jointure
La requête suivante utilise l’opérateur DISTINCT et la clause INNER JOIN pour renvoyer les lignes distinctes des deux tables:
SELECT DISTINCT ClientID FROM Clients INNER JOIN Commandes USING(ClientID);