L3 Info : SGBD
 
◃  Ch. 10 SQL : DQL (Algèbre relationnel et SQL)  ▹
 

Intersection et différence

  • Intersection :
    • Comme pour l'union, les relations doivent être du même type et les doublons ne sont pas conservés.
    • Définition : Soient R1 et R2 deux relations de même type, l'intersection de ces deux relations, R1 ∩ R2, est une relation du même type, dont le corps consiste en l'ensemble de tous les n-uplets t tel que t ∈ R1 et t ∈ R2.
    • En SQL, cette opération est implantée par l'opérateur INTERSECT qui retourne les éléments identiques de 2 requêtes.
    • MySQL implante cette opération seulement depuis la version 8.0
  • Différence :
    • Définition : Soient R1 et R2 deux relations de même type, la différence de ces deux relations, R1 − R2, est une relation du même type, dont le corps consiste en l'ensemble de tous les n-uplets t tel que t ∈ R1 et t ∉ R2.
    • En SQL, cette opération est implantée par l'opérateur EXCEPT (MINUS sous oracle) qui élimine les enregistrements de la première requête également présents dans la seconde.
    • MySQL implante cette opération seulement depuis la version 8.0
  • Exemples :
    -- avec PostgreSQL ou Oracle
    SELECT * FROM professeur WHERE prof_nom LIKE 'A%'
          INTERSECT
    SELECT * FROM professeur WHERE prof_id<4;
     prof_id | prof_nom | prof_prenom | prof_tel | prof_adresse | prof_statut 
    ---------+----------+-------------+----------+--------------+-------------
           1 | Amanton  | Laurent     |          |              | MCF
    (1 row)
    
    -- avec PostgreSQL
    SELECT * FROM professeur WHERE prof_nom LIKE 'A%'
          EXCEPT
    SELECT * FROM professeur WHERE prof_id<4;
     prof_id | prof_nom | prof_prenom | prof_tel | prof_adresse | prof_statut 
    ---------+----------+-------------+----------+--------------+-------------
           5 | Arfi     | Mustapha    |          |              | MCF
    (1 row)
    
    -- avec Oracle
    SELECT * FROM professeur WHERE prof_nom LIKE 'A%'
          MINUS
    SELECT * FROM professeur WHERE prof_id<4;
     prof_id | prof_nom | prof_prenom | prof_tel | prof_adresse | prof_statut
    ---------+----------+-------------+----------+--------------+-------------
           5 | Arfi     | Mustapha    |          |              | MCF
    (1 row)