FULL JOIN
Petite vérification
Avant de commencer, vérifiez si vous savez...
- sur les tables
livreetgenre, écrire une requêteRIGHT JOIN ... ON T1.id_genre = T2.id, et vérifier que tous les genres apparaissent dans le résultat, y compris ceux qui n'ont aucun livre - expliquer quelle table est retournée en intégralité avec ce
RIGHT JOIN - réécrire
FROM livre AS T1 RIGHT JOIN genre AS T2 ON T1.id_genre = T2.iden unLEFT JOINéquivalent en inversant l'ordre des tables, et vérifier que les deux requêtes retournent le même résultat
📌 Réponse attendue
4ème type de jointure "FULL JOIN"
La jointure FULL JOIN est également appelée FULL OUTER JOIN.
SELECT *
FROM livre AS T1
FULL JOIN genre AS T2
ON T1.id_genre = T2.id;
FULL JOIN = LEFT JOIN + INNER JOIN + RIGHT JOIN
Le FULL JOIN n'est actuellement pas supporté par MariaDB et MySQL.
Pour exécuter une jointure FULL JOIN avec MariaDB ou MySQL,
il suffit de faire une UNION des requêtes LEFT JOIN et RIGHT JOIN :
SELECT * FROM livre AS T1 LEFT JOIN genre AS T2 ON T1.id_genre = T2.id
UNION
SELECT * FROM livre AS T1 RIGHT JOIN genre AS T2 ON T1.id_genre = T2.id;
Dans notre exemple, la jointure FULL JOIN
retournera toutes les correspondances entre un livre et un genre, les livres sans genre et les genres sans livre !
SELECT * FROM livre AS T1 LEFT JOIN genre AS T2 ON T1.id_genre = T2.id
UNION
SELECT * FROM livre AS T1 RIGHT JOIN genre AS T2 ON T1.id_genre = T2.id;

Exercice
UNION supprime automatiquement les lignes dupliquées (contrairement à UNION ALL).
C'est pourquoi LEFT JOIN + UNION + RIGHT JOIN simule correctement un FULL JOIN : les lignes avec correspondance dans les deux tables n'apparaissent qu'une seule fois.