INTERSECT – Éléments communs
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 4 minutes
La commande SQL INTERSECT permet d’obtenir l’intersection des résultats de 2 requêtes. Cette commande permet donc de récupérer les enregistrements communs à 2 requêtes. Cela peut s’avérer utile lorsqu’il faut trouver s’il y a des données similaires sur 2 tables distinctes.
Bon à savoir : Pour l’utiliser convenablement, il faut que les 2 requêtes retournent le même nombre de colonnes, avec les mêmes types de données et dans le même ordre.
Syntaxe
Section titled “Syntaxe”La syntaxe à adopter pour utiliser cette commande est la suivante :
SELECT * FROM table1INTERSECTSELECT * FROM table2;Dans cet exemple, il faut que les 2 tables soient similaires (mêmes colonnes, mêmes types et même ordre). Le résultat correspondra aux enregistrements qui existent dans table1 et dans table2.
Schéma explicatif
Section titled “Schéma explicatif”L’intersection de 2 ensembles A et B correspond aux éléments qui sont présents dans A et dans B, et seulement ceux-là.
┌─────────────────────────────────────┐│ INTERSECT ││ ┌──────────┐ ┌──────────┐ ││ │ A │ │ B │ ││ │ ┌────┐ │ │ ┌────┐ │ ││ │ │COMM│ │ │ │COMM│ │ ││ │ │UNS │ │ │ │UNS │ │ ││ │ └────┘ │ │ └────┘ │ ││ └──────────┘ └──────────┘ ││ Éléments communs ││ (A ∩ B = uniquement communs) │└─────────────────────────────────────┘Exemple concret
Section titled “Exemple concret”Prenons l’exemple de 2 magasins qui appartiennent au même groupe. Chaque magasin possède sa table de clients.
Table du magasin n°1 : magasin1_client
Section titled “Table du magasin n°1 : magasin1_client”| prenom | nom | ville | date_naissance | total_achat |
|---|---|---|---|---|
| Léon | Dupuis | Paris | 1983-03-06 | 135 |
| Marie | Bernard | Paris | 1993-07-03 | 75 |
| Sophie | Dupond | Marseille | 1986-02-22 | 27 |
| Marcel | Martin | Paris | 1976-11-24 | 39 |
Table du magasin n°2 : magasin2_client
Section titled “Table du magasin n°2 : magasin2_client”| prenom | nom | ville | date_naissance | total_achat |
|---|---|---|---|---|
| Marion | Leroy | Lyon | 1982-10-27 | 285 |
| Paul | Moreau | Lyon | 1976-04-19 | 133 |
| Marie | Bernard | Paris | 1993-07-03 | 75 |
| Marcel | Martin | Paris | 1976-11-24 | 39 |
Pour obtenir la liste des clients qui sont présents de façon identique dans ces 2 tables, il est possible d’utiliser la commande INTERSECT de la façon suivante :
SELECT * FROM magasin1_clientINTERSECTSELECT * FROM magasin2_client;Résultat
Section titled “Résultat”| prenom | nom | ville | date_naissance | total_achat |
|---|---|---|---|---|
| Marie | Bernard | Paris | 1993-07-03 | 75 |
| Marcel | Martin | Paris | 1976-11-24 | 39 |
Le résultat présente 2 enregistrements. Il s’agit des clients qui sont à la fois dans la table magasin1_client et dans la table magasin2_client. Sur certains systèmes, une telle requête permet de déceler des erreurs et d’enregistrer seulement à un seul endroit la même information.
Règles importantes
Section titled “Règles importantes”1. Même nombre de colonnes
Section titled “1. Même nombre de colonnes”Les requêtes doivent retourner le même nombre de colonnes :
-- ✅ ValideSELECT id, nom FROM table1INTERSECTSELECT id, nom FROM table2;
-- ❌ Invalide (nombre de colonnes différent)SELECT id, nom, prenom FROM table1INTERSECTSELECT id, nom FROM table2;2. Types de données compatibles
Section titled “2. Types de données compatibles”Les colonnes correspondantes doivent avoir des types de données compatibles :
-- ✅ Valide (si id est INT et nom est VARCHAR)SELECT id, nom FROM table1INTERSECTSELECT id, nom FROM table2;3. Ordre des colonnes
Section titled “3. Ordre des colonnes”L’ordre des colonnes doit être le même :
-- ✅ ValideSELECT id, nom, ville FROM table1INTERSECTSELECT id, nom, ville FROM table2;
-- ❌ Invalide (ordre des colonnes différent)SELECT id, nom, ville FROM table1INTERSECTSELECT ville, id, nom FROM table2;Compatibilité selon les SGBD
Section titled “Compatibilité selon les SGBD”Tous les SGBD ne supportent pas INTERSECT de la même manière :
| SGBD | Support |
|---|---|
| PostgreSQL | Supporte INTERSECT nativement |
| SQL Server | Supporte INTERSECT nativement |
| Oracle | Supporte INTERSECT nativement |
| MySQL | Ne supporte pas INTERSECT (version < 8.0.31) |
| SQLite | Supporte INTERSECT |
Alternative pour MySQL (versions antérieures) :
Section titled “Alternative pour MySQL (versions antérieures) :”SELECT DISTINCT * FROM magasin1_clientWHERE EXISTS ( SELECT * FROM magasin2_client WHERE magasin2_client.prenom = magasin1_client.prenom AND magasin2_client.nom = magasin1_client.nom AND magasin2_client.ville = magasin1_client.ville);Ou en utilisant INNER JOIN (nous verrons les jointures en détail dans le module 6) :
SELECT DISTINCT m1.*FROM magasin1_client m1INNER JOIN magasin2_client m2ON m1.prenom = m2.prenomAND m1.nom = m2.nomAND m1.ville = m2.ville;Comparaison des opérateurs ensemblistes
Section titled “Comparaison des opérateurs ensemblistes”| Opérateur | Résultat |
|---|---|
| UNION | Tous les éléments de A et B (sans doublons) |
| UNION ALL | Tous les éléments de A et B (avec doublons) |
| INTERSECT | Éléments communs à A et B |
| EXCEPT | Éléments de A qui ne sont pas dans B |
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment obtenir les éléments communs avec INTERSECT. Mais comment obtenir les éléments d’une requête qui ne sont pas dans une autre ?
👉 Chapitre 19 : EXCEPT / MINUS – Soustraire des résultats
Bonne continuation !
Junior TSAFACK – 08/08/2026