Opérations complexes et Jointure (union, except, intersect)

Jointure SQL : Découvrez UNION, EXCEPT et INTERSECT

Le langage SQL nous permet d'avoir des requêtes plus complexes, telles que la sélection simultanée de données à partir de deux tables.

SQL ensembliste

La suite pourrait être intéressante pour tout le monde mais surtout les amateurs de l'algèbre relationnelle. Il y en a qui disent qu'on n'aurait pas dû sécher les cours de math. Pour faire plaisir à tout le monde, une petite révision alors sur les opérations ensemblistes. Eh oui ! C'est utile aussi en SQL.

On entend par opération ensemblistes les opérations tel que l'UNION, l'INTERSECTION etc. Si A et B sont deux ensembles, A union B contiendra tous les éléments de A et de B sans exception. A l'inverse, A exeption B contiendra tous les éléments qui sont uniquement dans A (C'est-à-dire qui ne sont pas dans B). En d'autres termes, c'est la différence entre les deux ensembles. L'intersection de A et de B contiendra des éléments qui sont à la fois dans A et dans B.

Par analogie, on peut traduire et utiliser toutes ces notions en SQL. Les opérateurs en question seront UNION, INTERSECT, EXCEPT. Ils s'appliquent entre deux tables ayant les mêmes structures et on les met entre deux clauses SELECT.

Pour unir les lignes de résultat de deux requêtes select, on a une requête de la forme :

SELECT ... FROM table1 WHERE ...
UNION
SELECT ... FROM table2 WHERE ...

 

Pour faire la différence entre les lignes de résultat de deux requêtes select, on utilise INTERSECT comme suit :

SELECT ... FROM table1 WHERE ...
EXCEPT
SELECT ... FROM table2 WHERE ...

 

Pour avoir une intersection entre les lignes de résultat de deux requêtes select, voici la requête correspondante :

SELECT ... FROM table1 WHERE ...
INTERSECT
SELECT ... FROM table2 WHERE ...

 

Toutefois, certains opérateurs comme EXCEPT ou INTERSECT ne sont pas du tout reconnus par des versions Mysql et aussi par d'autre SGBD.

Quand on parle d'ensemble, on ne peut pas se passer de sous ensemble. On a assimilé les requêtes à des ensembles, ce qui nous donne aussi la notion de sous requête. Une sous requête est tout simplement une requête contenue dans une autre dont voici un exemple :

SELECT ... FROM … WHERE ... WHERE ---- <= (SELECT ... FROM … WHERE ...
)

 

Le deuxième SELECT remplace alors une valeur.

Jointure et produit cartésien

Contrairement aux opérations ensemblistes, la jointure peut s'exécuter sur deux tables n'ayant pas la même structure. Elle permet de sélectionner des données dans deux tables en même temps. Il s'agit d'un produit cartésien de deux tables. Les clauses utilisées sont les mêmes que celle étudiées précédemment.

Toutefois, comme il s'agit ici de plusieurs tables, il s'avère nécessaire de préciser le nom des tables d'où provient chaque champ. Chaque fois que l'on indique un champ on met alors le nom de la table devant le nom du champ et un point sépare les deux comme suit : table1.champ1

Exemple :

Ajoutons une autre table à notre table étudiant et réalisons une jointure entre les deux tables.

La deuxième table sera une table qui contiendra les activités des étudiants. Elle possède deux champs etudiant et nomactivite et voici à quoi elle ressemble :

Présentation de ta table
etudiant activite
1 Natation
1 Danse
3 Judo
5 Natation
8 Judo

Requête SQL

SELECT etudiant.nom, etudiant.prenom, activite.nomactivite FROM etudiant, activite
WHERE etudiant.id_etudiant = activite.etudiant

 
Résultats

Résultat d'une requête SQL avec WHERE
nom prenom nomactivite
Duchesse Valérie Danse
Bertrand Adrien Judo
Suza Alvaro Natation
Dupon Jean Judo

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence SEO Aseox.