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 :
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
nom | prenom | nomactivite |
---|---|---|
Duchesse | Valérie | Danse |
Bertrand | Adrien | Judo |
Suza | Alvaro | Natation |
Dupon | Jean | Judo |