Aller au contenu

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

  1. Exécute les deux requêtes
  2. Combine les résultats
  3. 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

  1. Exécute les deux requêtes
  2. Compare les lignes
  3. 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

  1. Exécute les deux requêtes
  2. Compare les lignes
  3. Garde celles qui apparaissent uniquement dans la première