samedi 5 décembre 2015

SQL EXCEPT / MINUS

A savoir : cette commande s’appelle différemment selon les Systèmes de Gestion de Base de Données (SGBD) :
  • EXCEPT : PostgreSQL
  • MINUS : MySQL et Oracle

Syntaxe

La syntaxe d’une requête SQL est toute simple :
SELECT * FROM table1
EXCEPT
SELECT * FROM table2

Schéma explicatif

Cette commande permet de récupérer les éléments de l’ensemble A sans prendre en compte les éléments de A qui sont aussi présent dans l’ensemble B. Dans le schéma ci-dessous seule la zone bleu sera retournée grâce à la commande EXCEPT (ou MINUS).
Sélection d'un ensemble avec exception
Sélection d’un ensemble avec exception

Exemple

Imaginons un système informatique d’une entreprise. Ce système contient 2 tables contenant des listes de clients:
  • Une table « clients_inscrits » qui contient les prénoms, noms et date d’inscription de clients
  • Une table « clients_refus_email » qui contient les informations des clients qui ne souhaitent pas être contacté par email
Cet exemple aura pour objectif de sélectionner les utilisateurs pour envoyer un email d’information. Les utilisateurs de la deuxième table ne devront pas apparaître dans les résultats.
Table « clients_inscrits » :
idprenomnomdate_inscription
1LionelMartineau2012-11-14
2PaulCornu2012-12-15
3SarahSchmitt2012-12-17
4SabineLenoir2012-12-18
Table « clients_refus_email » :
idprenomnomdate_refus
1PaulCornu2013-01-27
2ManuelGuillot2013-01-27
3SabineLenoir2013-01-29
4NataliePetitjean2013-02-03
Pour pouvoir sélectionner uniquement le prénom et le nom des utilisateurs qui accepte de recevoir des emails informatifs. La requête SQL à utiliser est la suivante :
SELECT prenom, nom FROM clients_inscrits
EXCEPT
SELECT prenom, nom FROM clients_refus_email
Résultats :
prenomnom
LionelMartineau
SarahSchmitt
Ce tableau de résultats montre bien les utilisateurs qui sont dans inscrits et qui ne sont pas présent dans le deuxième tableau. Par ailleurs, les résultats du deuxième tableau ne sont pas présent sur ce résultat final.