Recette
#3: |
|
Février 2011 |
SQL dispose d'une autre syntaxe pour les opérations de
jointure. |
SELECT lc.lc_id AS
lc_id, |
La requête ci-dessus à un air de déjà vu non ? vous avez raison, nous l'avons déjà utilisé ...
SELECT lc.lc_id AS
lc_id, |
Bien, cette nouvelle requête est identique à la première,
mais a été écrite en suivant la deuxième syntaxe:
l'utilisation de la clause JOIN ... ON (...) rend plus explicite la requête.
et les conditions de JOINture
sont maintenant directement exprimée au sein du terme ON
(...) :
ceci permet d'avoir une requête plus lisible
et compréhensible.
cependant, il ne s'agit la que d'une autre syntaxe:
il n'y
a aucune différence avec la première requête du point de vue
fonctionnel.
SELECT r.region_name AS
region, |
region |
county |
local_council |
population |
ABRUZZO |
PESCARA |
PESCARA |
116286 |
CALABRIA |
REGGIO DI CALABRIA |
REGGIO DI CALABRIA |
180353 |
CAMPANIA |
NAPOLI |
NAPOLI |
1004500 |
CAMPANIA |
SALERNO |
SALERNO |
138188 |
EMILIA-ROMAGNA |
BOLOGNA |
BOLOGNA |
371217 |
... |
... |
... |
... |
Rien d'étrange dans cette requête:
on a simplement introduit la clause ON (... AND lc.population < 100000)afin d'exclure les Local Council peu peuplés.
SELECT r.region_name AS
region, |
region |
county |
local_council |
population |
ABRUZZO |
CHIETI |
NULL |
NULL |
ABRUZZO |
L'AQUILA |
NULL |
NULL |
ABRUZZO |
PESCARA |
PESCARA |
116286 |
ABRUZZO |
TERAMO |
NULL |
NULL |
BASILICATA |
MATERA |
NULL |
NULL |
BASILICATA |
POTENZA |
NULL |
NULL |
... |
... |
... |
... |
En apparence, cette requête est la même que la précédente.
Mais
il y a pourtant une différence remarquable:
cette fois nous avons utilisé la
clause LEFT JOIN
:
la liste des résultats diffère de la requète précédente.
la clause JOIN inclus dans les résultats uniquement les lignes dont le terme de droite ET le terme de gauche correspondent au critère de jointure.
la clause LEFT JOIN est différente: elle va littéralement joindre les deux tables, tous les éléments de la première table sont listés, auxquels sont greffés les éléments de la table jointe: les lignes de la table jointe ne redondant pas aux critères de jointure prennent la valeur NULL.
Cette différence entre JOIN
et LEFT JOIN est
fondamentale. |
|
Author: Alessandro Furieri a.furieri@lqt.it |
This work is licensed under the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. |
|
|
|
Permission is granted to copy, distribute and/or modify this
document under the terms of the |