Elles permettent d'extraire des colonnes de plusieurs tables.
SELECT colonnes FROM table1 JOIN table2 ON table1.colonne = table2.colonne [WHERE condition]
SELECT rs_client, ca_client, lib_categorie FROM client JOIN categorie ON client.id_categorie=categorie.id_categorie
Tous les clients et la catégorie à laquelle ils appartiennent.
SELECT rs_client, ca_client, lib_categorie FROM client JOIN categorie ON client.id_categorie=categorie.id_categorie WHERE ca_client > 25000
Tous les clients ayant un CA > 25000 et la catégorie à laquelle ils appartiennent.
Pour la jointure d'une table avec elle-même il faut utiliser les alias.
SELECT a1.nom, a2.nom "Chef" FROM agent a1 JOIN agent a2 ON a1.id_chef=a2.id_agent.
Liste les noms des agents et celui de leur chef.
Thêta jointure
Jointure sur autre opérateur que =.
SELECT c1.rs_client, c1.ca_client FROM client c1 JOIN client c2 on c1.ca_client < c2.ca_client and c2.id_client = 300 order by c1.ca_client
Lister les clients ayant un CA inférieur à celui du client 300 en triant par ordre croissant du CA.
Jointures multiples
SELECT cl.id_client, rs_client, lib_categorie, date_commande FROM client cl JOIN categorie ca ON cl.id_categorie=ca.id_categorie JOIN commande co ON cl.id_client=co.id_client WHERE ca_client > 25000 ORDER BY id_commande
Les clients, leur catégorie et les dates de leurs commandes pour les clients ayant un CA > 25000 triés dans l'ordre de l'id commande.
L'alias est facultatif si la colonne n'est que dans une seule table.
Jointures et agrégats
SELECT id_article, SUM(qte_commande) FROM lignecde lg JOIN commande co ON lg.id_commande = co.id_commande WHERE date_commande > '01/01/2017' GROUP BY id_article
Cumul des quantités commandées par article pour les commandes postérieures au 01/01/2017.
Jointures externes
Extraite toutes les lignes d'une table et seulement celles pour qui la jointure est vérifiée dans l'autre table. La table pour laquelle on veut TOUTES les occurrences doit être avant le LEFT OUTER JOIN ou après le RIGHT OUTER JOIN.
SELECT ... FROM table1 LEFT | RIGHT OUTER JOIN table2 ON condition [[LEFT | RIGHT OUTER JOIN table3 ON condition]] [AND | WHERE condition]
Le WHERE ne doit pas porter sur la table listant TOUTES les occurrences => utiliser AND
SELECT lib_categorie, rs_client FROM client cl RIGHT OUTER JOIN categorie cat ON cl.id_categorie=cat.id_categorie AND rs_client LIKE '%CA%' ORDER BY lib_categorie
Les catégories clients et leurs clients, y compris celles qui n'ont été attribuées à aucun client pour les clients dont la raison sociale contient CA.