Médiaforma

PHP MySQL – Jointures complexes

Print Friendly

Les requêtes SQL traditionnelles sont construites sur cette syntaxe :

SELECT [un ou plusieurs champs] FROM [une ou plusieurs tables]
 WHERE [une ou plusieurs conditions];

Les jointures simples sont effectuées dans la clause WHERE. Par contre, les jointures complexes se font entre le FROM et le WHERE via des mots clés spécifiques : INNER JOIN, LEFT JOIN ou RIGHT JOIN.

Les requêtes SQL complexes ont donc une syntaxe différente :

SELECT [un ou plusieurs champs] FROM [une ou plusieurs tables]
 [INNER | LEFT | RIGHT] JOIN [champ de jointure]
 WHERE [une ou plusieurs conditions]

Examinons une requête INNER JOIN

La requete SELECT simple :

SELECT * FROM orders, order_details
          WHERE orders.OrderID=order_details.OrderID;

Devient :

SELECT * FROM orders INNER JOIN order_details
          ON orders.OrderID=order_details.OrderID

Seule la syntaxe change : le comportement à l’exécution est identique.

Examinons une requête LEFT JOIN

Les requêtes de type LEFT JOIN sont plus permissives que les autres requêtes. Supposons qu’il existe des enregistrements dans la première table pour lesquels le champ sur lequel s’effectue la jointure ne soit pas renseigné. Dans une jointure simple, ils seront purement et simplement ignorés. Dans une jointure de type LEFT JOIN, ils seront retenus, mais la valeur NULL apparaîtra pour ces enregistrements dans le champ utilisé pour effectuer la jointure ainsi que dans tous les champs de la deuxième table.

La requete SELECT simple :

SELECT * FROM orders, order_details
          WHERE orders.OrderID=order_details.OrderID;

Devient :

SELECT * FROM orders LEFT JOIN order_details
          ON orders.OrderID=order_details.OrderID

Pour terminer, examinons les requêtes RIGHT JOIN

Les requêtes de type RIGHT JOIN sont comparables aux requêtes LEFT JOIN. Supposons qu’il existe des enregistrements dans la deuxième table pour lesquels le champ sur lequel s’effectue la jointure ne soit pas renseigné. Dans une jointure simple, ils seront purement et simplement ignorés. Dans une jointure de type RIGHT JOIN, ils seront retenus, mais la valeur NULL apparaîtra pour ces enregistrements dans le champ utilisé pour effectuer la jointure ainsi que dans tous les champs de la première table.

La requete SELECT simple :

SELECT * FROM orders, order_details
          WHERE orders.OrderID=order_details.OrderID;

Devient :

SELECT * FROM orders RIGHT JOIN order_details
          ON orders.OrderID=order_details.OrderID
Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply