Opérateurs d'ensembles¶
Les bases de données relationnelles sont basées sur la théorie des ensembles en mathématiques.
Il existe donc des opérateurs dits les opérateurs d'ensembles.
Oracle propose trois opérateurs pour combiner ou comparer les résultats de plusieurs requêtes. Ces opérateurs permettent de travailler comme avec des ensembles en mathématiques.
Règles¶
Avant d’utiliser ces opérateurs :
✔ Les requêtes doivent avoir le même nombre de colonnes
✔ Les colonnes doivent être de types compatibles
✔ L’ordre des colonnes doit être identique
Opérateurs¶
| Opérateur Oracle | Rôle | Opérateur Mathématique |
|---|---|---|
| UNION | Combine deux résultats de requêtes et supprime les lignes doublons | A ∪ B (sans doublons) |
| UNION ALL | Combine deux résultats de requêtes sans supprimer les doublons | A ∪ B (avec doublons) |
| INTERSECT | Renvoie uniquement les lignes communes aux deux résultats de requêtes | A ∩ B |
| MINUS | Renvoie les lignes présentes dans la première requête, sans celles de la seconde | A − B |
UNION et UNION ALL¶
Regroupe les lignes de deux requêtes ayant le même nombre de colonnes et des types compatibles.
La distinction :
- UNION : fusionne les résultats et élimine les doublons.
- UNION ALL : fusionne les résultats en conservant les doublons (plus rapide).
🧾 Exemple
Table clients_web
| nom |
|---|
| Alice |
| Bob |
Table clients_magasin
| nom |
|---|
| Bob |
| Charlie |
Requête:
SELECT nom FROM clients_web
UNION
SELECT nom FROM clients_magasin;
Résultat :
| nom |
|---|
| Alice |
| Bob |
| Charlie |
👉 Bob apparaît une seule fois avec UNION
👉 UNION ALL retourne toutes les lignes, en conservant les doublons
⚙️ Ce qui se passe en interne
- Exécute les deux requêtes
- Combine les résultats
- Supprime les doublons
INTERSECT¶
Trouver les lignes communes aux deux résultats.
Oracle compare les résultats des deux requêtes et ne garde que les lignes identiques pour toutes les colonnes retournées.
🧾 Exemple
Table clients_web
| nom |
|---|
| Alice |
| Bob |
Table clients_magasin
| nom |
|---|
| Bob |
| Charlie |
Requête :
SELECT nom FROM clients_web
INTERSECT
SELECT nom FROM clients_magasin;
Résultat :
| nom |
|---|
| Bob |
👉 Seulement les clients présents dans les deux sources
⚙️ Ce qui se passe en interne
- Exécute les deux requêtes
- Compare les lignes
- Garde seulement les correspondances
MINUS¶
Trouver les lignes présentes dans la première requête, qui ne sont pas dans la deuxième.
Ou encore, Oracle compare les deux résultats et soustrait les lignes de la seconde requête.
🧾 Exemple
Table clients_web
| nom |
|---|
| Alice |
| Bob |
Table clients_magasin
| nom |
|---|
| Bob |
| Charlie |
Requête :
SELECT nom FROM clients_web
MINUS
SELECT nom FROM clients_magasin;
Résultat :
| nom |
|---|
| Alice |
👉 Alice est uniquement dans clients_web
L'ordre des SELECT est très important puisque c'est toujours les résultats du premier moins ceux du deuxième
⚙️ Ce qui se passe en interne
- Exécute les deux requêtes
- Compare les lignes
- Garde celles qui apparaissent uniquement dans la première