On a vu lors de notre cours sur l'algèbre relationnelle le principe des opérations ensemblistes. Le passage en SQL est juste une pure traduction de cela. C'est-à-dire qu'il faut que les deux requêtes reliées par une union, une intersection, ou une différence doivent se faire sur le même schéma.
En SQL, les trois opérateurs sont modélisés par les mots-clés union, interect, minus, MAIS évidemment ce serait trop facile comme cela, ces opérations fonctionnent ou pas en fonction du SGBD utilisé. Par exemple, ça n'existe pas avec mysql.



- mysql> # liste des étudiants qui ont une note en PHP ou en BDD
- mysql> select id_e from affectation where id_c=1 union select id_e from affectation where id_c=2;
- mysql> # liste des étudiants qui ont une note en PHP et en BDD
- mysql> select id_e from affectation where id_c=1 intersect select id_e from affectation where id_c=2;
- mysql> select id_e from affectation where id_c=1 and id_e in (select id_e from affectation where id_c=2);
- mysql> select id_e from affectation a1 where id_c=1 and exists (select id_e from affectation a2 where a1.id_e=a2.id_e and a2.id_c=2);
- mysql> # liste des étudiants qui ont une note en BDD mais pas en PHP
- mysql> select id_e from affectation where id_c=2 minus select id_e from affectation where id_c=1;
- mysql> select id_e from affectation where id_c=2 and id_e not in (select id_e from affectation where id_c=1);
- mysql> select id_e from affectation a1 where id_c=2 and not exists (select id_e from affectation a2 where a1.id_e=a2.id_e and a2.id_c=1);