MySQL - Opérateur INTERSECT

Salut à toi, futurs passionnés de MySQL ! Aujourd'hui, nous allons plonger dans le monde fascinant de l'opérateur INTERSECT. En tant que votre professeur d'informatique bienveillant, je suis excité de vous guider dans cette aventure. Ne vous inquiétez pas si vous êtes nouveau dans la programmation ; nous allons avancer pas à pas, et avant que vous ne vous en rendiez compte, vous serez en train de croiser des données comme un pro !

MySQL - INTERSECT Operator

Opérateur INTERSECT de MySQL

Qu'est-ce que l'INTERSECT ?

Imaginez que vous avez deux cercles dans un diagramme de Venn. L'opérateur INTERSECT est comme trouver la partie重叠 de ces cercles. En termes de MySQL, il renvoie les lignes communes entre deux ou plusieurs requêtes SELECT.

Malheureusement, MySQL n'a pas un opérateur INTERSECT intégré comme certains autres systèmes de bases de données. Mais ne vous inquiétez pas ! Nous pouvons obtenir le même résultat en utilisant d'autres méthodes. Regardons comment nous pouvons faire cela en utilisant INNER JOIN ou la clause IN.

INTERSECT en utilisant INNER JOIN

SELECT DISTINCT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column1 = table2.column1 AND table1.column2 = table2.column2;

Reprenons cela :

  1. SELECT DISTINCT : Cela garantit que nous n'obtenons pas de lignes en double.
  2. INNER JOIN : Cela combine les lignes des deux tables en fonction d'une colonne liée entre elles.
  3. ON : Cela spécifie la condition pour joindre les tables.

INTERSECT en utilisant la clause IN

SELECT column1, column2, ...
FROM table1
WHERE (column1, column2, ...) IN (SELECT column1, column2, ... FROM table2);

Voici ce qui se passe :

  1. Nous sélectionnons à partir de table1.
  2. La clause WHERE ... IN vérifie si les colonnes sélectionnées existent dans table2.

INTERSECT avec l'opérateur BETWEEN

Maintenant, rajoutons un peu de piquant ! Nous pouvons combiner notre logique INTERSECT avec l'opérateur BETWEEN pour trouver des lignes communes dans une plage spécifique.

SELECT employee_id, salary
FROM employees
WHERE salary BETWEEN 50000 AND 70000
AND employee_id IN (
SELECT employee_id
FROM performance
WHERE rating > 8
);

Cette requête trouve les employés avec des salaires entre 50 000 et 70 000 qui ont également une note de performance supérieure à 8. C'est comme trouver le point de交汇 des employés bien payés et à haute performance !

INTERSECT avec l'opérateur IN

L'opérateur IN peut être extrêmement utile lorsqu'il est combiné avec notre logique INTERSECT. Regardons un exemple :

SELECT product_name, category
FROM products
WHERE category IN ('Electronics', 'Books', 'Toys')
AND product_id IN (
SELECT product_id
FROM sales
WHERE sale_date >= '2023-01-01'
);

Cette requête trouve les produits dans certaines catégories qui ont été vendus depuis le début de 2023. C'est comme créer une liste de "best-seller" pour certains départements !

INTERSECT avec l'opérateur LIKE

L'opérateur LIKE nous permet de rechercher un modèle spécifique dans une colonne. Voyons comment nous pouvons l'utiliser avec notre logique INTERSECT :

SELECT customer_name, email
FROM customers
WHERE customer_name LIKE 'A%'
AND customer_id IN (
SELECT customer_id
FROM orders
WHERE total_amount > 1000
);

Cette requête trouve les clients dont les noms commencent par 'A' et qui ont passé des commandes supérieures à 1000 $. C'est comme créer une liste VIP pour vos gros dépensiers de la liste 'A' !

Opérateur INTERSECT en utilisant un programme client

Parfois, nous devons peut-être effectuer une opération INTERSECT du côté client. Voici un simple script Python qui le démonstre :

import mysql.connector

# Connexion à MySQL
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Exécution de la première requête
query1 = "SELECT column1, column2 FROM table1 WHERE condition1"
cursor.execute(query1)
result1 = set(cursor.fetchall())

# Exécution de la deuxième requête
query2 = "SELECT column1, column2 FROM table2 WHERE condition2"
cursor.execute(query2)
result2 = set(cursor.fetchall())

# Opération INTERSECT
intersect_result = result1.intersection(result2)

# Affichage des résultats
for row in intersect_result:
print(row)

# Fermeture de la connexion
cursor.close()
cnx.close()

Ce script :

  1. Se connecte à MySQL
  2. Exécute deux requêtes distinctes
  3. Convertit les résultats en ensembles
  4. Utilise l'intersection des ensembles Python pour trouver les lignes communes
  5. Affiche les résultats

Souvenez-vous, bien que cela fonctionne, il est généralement plus efficace d'effectuer de telles opérations directement dans MySQL lorsque c'est possible.

Méthode Description Exemple
INNER JOIN Trouve les lignes communes basées sur une condition de jointure SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id
Clause IN Trouve les lignes dans une table qui existent dans une autre SELECT * FROM table1 WHERE id IN (SELECT id FROM table2)
BETWEEN avec IN Trouve les lignes communes dans une plage SELECT * FROM table1 WHERE value BETWEEN 1 AND 10 AND id IN (SELECT id FROM table2)
LIKE avec IN Trouve les lignes communes correspondant à un modèle SELECT * FROM table1 WHERE name LIKE 'A%' AND id IN (SELECT id FROM table2)
Côté client Effectue l'intersection dans le code de l'application Voir l'exemple Python ci-dessus

Et voilà ! Vous avez fait un grand tour de l'opérateur INTERSECT dans MySQL. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces requêtes. Avant que vous ne vous en rendiez compte, vous croiserez des ensembles de données comme un administrateur de base de données chevronné. Bonne chance avec vos requêtes !

Credits: Image by storyset