É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];
Liste des commandes MySQLListe des commandes MySQLDans ce tutoriel vous allez découvrir les différentes commandes MySQL qui devraient être utiles pour travailler avec des bases de données.   1. Pour vous…Lire plus  

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);


Questions techniques sur MYSQLQuestions techniques sur MYSQL – Partie 1Nous avons divisé cette collection de questions techniques sur MYSQL sous sept chapitres là, c’est la premiere, puis vous trouverez la deuxième partie, la troisième…Lire plus

Laisser un commentaire

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