|
recette
#11 |
F�vrier 2011 |
Local Council |
County |
Region |
ATRANI |
SALERNO |
CAMPANIA |
BARDONECCHIA |
TORINO |
PIEMONTE |
BRIGA ALTA |
CUNEO |
PIEMONTE |
CASAVATORE |
NAPOLI |
CAMPANIA |
LAMPEDUSA E LINOSA |
AGRIGENTO |
SICILIA |
LU |
ALESSANDRIA |
PIEMONTE |
MORTERONE |
LECCO |
LOMBARDIA |
NE |
GENOVA |
LIGURIA |
OTRANTO |
LECCE |
PUGLIA |
PINO SULLA SPONDA DEL LAGO MAGGIOR |
VARESE |
LOMBARDIA |
PREDOI |
BOLZANO |
TRENTINO-ALTO ADIGE |
RE |
VERBANO-CUSIO-OSSOLA |
PIEMONTE |
RO |
FERRARA |
EMILIA-ROMAGNA |
ROMA |
ROMA |
LAZIO |
SAN VALENTINO IN ABRUZZO CITERIORE |
PESCARA |
ABRUZZO |
VO |
PADOVA |
VENETO |
La liste de local councils ci dessus est une sorte de
live Guinness des Records.
Pour une raison ou pour une
autre, chacun poss�de une caract�ristique exceptionnelle.
Peut-�tre
�tes-vous �tonn�s, car (except� Rome) aucune d'elles ne
fait partie des lieux les plus renomm�es d'Italie.
Voici
l'explication:
Roma � le plus d'habitants: 2,546,804 habitants
Morterone � le moins d'habitants: 33 habitants
Roma est la plus grande ville: 1,287 km�
Atrani est la plus petite ville: 0.1 km�
Casavatore � la plus forte densit� de population: 13,627.5 hab/km�
Briga Alta � la plus faible densit� de population: 1.2 habs/km�
Pino sulla sponda del Lago Maggior(e) et San Valentino in Abruzzo Citeriore partagent le privil�ge d'avoir le nom le plus long.
de l'autre cot� Lu, Ne, Re, Ro et Vo ont les noms les plus courts.
Predoi est situ� le plus au nord
Lampedua e Linosa est situ� le plus au sud
Bardonecchia est situ� le plus � l'ouest
Otranto iest situ� le plus � l'est
Mettre au point une telle table, aussi inutile soit-elle, est
assez facile.
Voici la requ�te SQL correspondante.
SELECT lc.lc_name AS
LocalCouncil, |
Et oui, cette requ�te est assez complexe.
Mais vous �tes
dor�navant dans la section Haute cuisine.
Donc je suppose
que vous �tes � la recherche de requ�tes go�teuses et �pic�es :
les voil� !
Apr�s tout, cette requ�te n'est pas aussi
complexe qu'elle en a l'aire, sa structure est m�me plut�t simple.
analysons la �tape par �tape:
SELECT lc.lc_name AS
LocalCouncil, |
Vous pouvez maintenant reconna�tre l'architecture de cette
requ�te et comprendre ce qu'elle fait.
Rien de trop complexe ni
de difficile:
la table local_councils est JOINte � la table counties .
la table counties est JOINte � la table regions.
la fonction spatiale ST_Area() retourne la superficie de la g�om�trie en m�, la division permet d'obtenir des km�.
une expression num�rique est utilis�e pour calculer la densit� de population en habs/km�
la clause WHERE ... IN (...) permet de fileter les r�sultats.
Vous savez d�j� tout �a, et je suppose que la suite vous
int�resse davantage.
La partie la plus int�ressante est situ�e
dans la clause WHERE ... IN
(...)
... |
Ce code SQL est vraiment simple: chaque requ�te d�termine une valeur Min / Max.
... |
C'est la premi�re fois que nous introduisons la clause UNION:
cela permet de coller ensemble deux r�sultats, de fa�on � n'en former plus qu'un.
Il y a une condition � satisfaire: � la fois le r�sultat de droite et de gauche doit retourner le m�me nombre de colonne, et les colonnes correspondantes doivent contenir le m�me type de donn�e.
... |
SQL impl�mente un m�canisme fantastique: la sous-requete.
Vous pouvez d�finir une sous-requ�te, qui sera ex�cut�e en
premier, dont les r�sultats seront ins�r�s dans la requ�te
principale.
Maintenant, le code SQL ne para�t plus si
myst�rieux:
dans ce cas, la sous-requ�te est en fait une UNION.
la requ�te gauche retourne la valeur de Max(population).
la requ�te gauche retourne la valeur de Min(population).
puis UNION
assemble les deux r�sultats:
le r�sultat de la sous-requ�te
est constitu� de de cet assemblage .
ainsi la clause WHERE population IN (...) de la requ�te principale va simplement recevoir deux valeurs de population � v�rifier.
Enfin, la requ�te principale va retourner un r�sultats constitu� d'une liste de lc_id
... |
Rien ne nous emp�che de faire plus d'une UNION:
cette requ�te est valide.
Ainsi, le code SQL ci-dessus
s'interpr�te de cette fa�on:
comme nous l'avons vu pr�c�demment, la requ�te de gauche fournis une liste de valeur de lc_id (Max/Min population).
la requ�te de droite effectue une op�ration �quivalente et retourne une autre liste de valeur de lc_id (Max/Min ST_Area(geometry)).
Ainsi, l' UNION de second niveau va simplement retourner une liste allong�e de valeurs de lc_id, i.e. la premi�re assembl�e � la deuxi�me
et ainsi de suite ...
SELECT lc.lc_name AS
LocalCouncil, |
D'apr�s la syntaxe SQL, l'utilisation
cons�cutive de deux tirets (--)
permet de marquer un commentaire.
i.e. tout le texte situ�
apr�s -- ne sera pas interpr�t� par le moteur SQL.
Commenter
ces requ�tes permet de rendre plus accessibles des requ�tes
complexes.
Conclusion: SQL est un langage fantastique, bas�
sur une syntaxe simple et intuitive. |
|
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 |