Skip to content

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.


La syntaxe à adopter pour utiliser cette commande est la suivante :

SELECT * FROM table1
INTERSECT
SELECT * 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.

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) │
└─────────────────────────────────────┘

Prenons l’exemple de 2 magasins qui appartiennent au même groupe. Chaque magasin possède sa table de clients.

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
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_client
INTERSECT
SELECT * FROM magasin2_client;
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.


Les requêtes doivent retourner le même nombre de colonnes :

-- ✅ Valide
SELECT id, nom FROM table1
INTERSECT
SELECT id, nom FROM table2;
-- ❌ Invalide (nombre de colonnes différent)
SELECT id, nom, prenom FROM table1
INTERSECT
SELECT id, nom FROM table2;

Les colonnes correspondantes doivent avoir des types de données compatibles :

-- ✅ Valide (si id est INT et nom est VARCHAR)
SELECT id, nom FROM table1
INTERSECT
SELECT id, nom FROM table2;

L’ordre des colonnes doit être le même :

-- ✅ Valide
SELECT id, nom, ville FROM table1
INTERSECT
SELECT id, nom, ville FROM table2;
-- ❌ Invalide (ordre des colonnes différent)
SELECT id, nom, ville FROM table1
INTERSECT
SELECT ville, id, nom FROM table2;

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_client
WHERE 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 m1
INNER JOIN magasin2_client m2
ON m1.prenom = m2.prenom
AND m1.nom = m2.nom
AND m1.ville = m2.ville;

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

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