Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-foss4g/simple_sql.rst @ 37

Revision 37, 5.9 KB checked in by nbozon, 13 years ago (diff)

Section 0 to 8 corrected

RevLine 
[1]1.. _simple_sql:
2
[37]3Partie 6 : Requêtes SQL simples
[19]4===============================
[1]5
[37]6:term:`SQL`, pour "Structured Query Language", définit la maniÚre d'interroger et de mettre des données dans une base. Vous avez déjà rédigé du SQL lorsque nous avons créer notre premiÚre base de données.  Rappel:
[1]7
8.. code-block:: sql
9
10   SELECT postgis_full_version();
11
[37]12Maintenant que nous avons charger des données dans notre base, essayons d'utiliser SQL pour les interroger. Par exemple,
[1]13
[19]14  "Quel sont les noms des quartier de la ville de New York ?"
[1]15 
[19]16Ouvrez une fenêtre SQL depuis pgAdmin en cliquant sur le bouton SQL
[1]17
18.. image:: ./screenshots/pgadmin_05.png
19
[19]20Puis saisissez la requête suivante dans la fenêtre
[1]21
22.. code-block:: sql
23
24  SELECT name FROM nyc_neighborhoods;
25 
[19]26et cliquez sur le bouton **Execute Query** (le triangle vert).
[1]27 
28.. image:: ./screenshots/pgadmin_08.png 
29
[19]30La requête s'exécutera pendant quelques (mili)secondes et retournera 129 résultats.
[1]31
32.. image:: ./screenshots/pgadmin_09.png 
33
[19]34Mais que c'est-il exactement passé ici ? Pour le comprendre, commençons par présenter les quatre type de requêtes du SQL :
[1]35
[19]36 * ``SELECT``, retourne des lignes en réponse à une requête
37 * ``INSERT``, ajoute des lignes dans une table
38 * ``UPDATE``, modifit des lignes existantes d'une table
39 * ``DELETE``, supprimer des lignes d'une table
[1]40 
[19]41Nous travaillerons principalement avec des requêtes de type ``SELECT``afin d'interroger les tables en utilisant des fonctions spatiales.
[1]42
[19]43Requête de type SELECT
44----------------------
[1]45
[19]46Une requête de type Select est généralement de la forme :
[1]47
[19]48  SELECT colonnes FROM données WHERE conditions;
[1]49 
50.. note::
51
[19]52    Pour une description exhaustive des paramÚtres possible d'une requête ``SELECT``, consultez la `documentaton de PostgresSQL  <http://www.postgresql.org/docs/8.1/interactive/sql-select.html>`_.
[1]53   
54
[37]55Les ``colonnes`` sont soit des noms de colonnes soit des fonctions utilisant les valeurs des colonnes. Les ``données`` sont soit une table seule, soit plusieures tables reliées ensemble en réalisant une jointure sur une clef ou une autre condition. Les ``conditions`` représentent le filtre qui restreint le nombre de lignes a retourner.
[1]56
[19]57  "Quel sont les noms des quartier de Brooklyn ?"
[1]58
[37]59Nous retournons à notre table ``nyc_neighborhoods`` avec le filtre en main. La table contient tout les quartiers de New York et nous voulons uniquement ceux de Brooklyn.
[19]60
[1]61.. code-block:: sql
62
63  SELECT name
64    FROM nyc_neighborhoods
65    WHERE boroname = 'Brooklyn';
66
[37]67La requête prendra à nouveau quelque (mili)secondes et retournera les 23 éléments résultants.
[1]68
[37]69Parfois nous aurons besoin d'appliquer des fonctions sur le résultats d'une de nos requêtes. Par exemple,
[1]70
[19]71  "Quel est le nombre de lettres dans les noms des quarties de Brooklyn ?"
[1]72 
[37]73Heureusement PostgreSQL fournit une fonction calculant la longueur d'une chaîne de caractÚres : :command:`char_length(string)`.
[1]74
75.. code-block:: sql
76
77  SELECT char_length(name)
78    FROM nyc_neighborhoods
79    WHERE boroname = 'Brooklyn';
80
[37]81Bien souvent nous sommes moins interressés par une ligne particuliÚre mais plus par un calcul statistique sur l'ensemble résultant. Donc connaitre la longueur des noms de quartiers est moins interressant que de calculer la moyenne des ces longueurs. Les fonctions qui renvoit un résultat unique en utilisant un ensemble de valeurs sont appelée des "fonctions d'aggrégations".
[1]82
[19]83PostgreSQL fournit un ensemble de fonctions d'aggrégations, parmis lesquelles :command:`avg()` pour calculer la moyenne, and :command:`stddev()` pour l'écart type.
[1]84
[19]85  "Quel est le nombre moyen et l'écart type du nombre de lettre dans le noms des quartier de Brooklyn ?"
[1]86 
87.. code-block:: sql
88
89  SELECT avg(char_length(name)), stddev(char_length(name))
90    FROM nyc_neighborhoods
91    WHERE boroname = 'Brooklyn';
92 
93::
94
95           avg         |       stddev       
96  ---------------------+--------------------
97   11.7391304347826087 | 3.9105613559407395
98
[19]99Les fonctions d'agrégation dans notre dernier exemple sont appliquées à chaque ligne de l'ensemble des résultats. Comment faire si nous voulons rassembler des données ? Pour cela nous utilisons la clause ``GROUP BY``. Les fonctions d'agrégation ont souvent besoin d'une clause ``GROUP BY`` pour regrouper les éléments en utilisant une ou plusieures colonnes.
[1]100
[19]101  "Quel est la moyenne des les noms de quartier de New York, renvoyer par quartiers ?"
[1]102
103.. code-block:: sql
104
105  SELECT boroname, avg(char_length(name)), stddev(char_length(name))
106    FROM nyc_neighborhoods
107    GROUP BY boroname;
108 
[19]109
110Nous ajoutons la colonne ``boroname`` dans le résultat afin de pouvoir déterminer quelle valeur statistique s'applique à quel quartier. Dans une requête agrégée, vous pouvez seulement retourner les colonnes qui sont (a) membre de la clause de regroupement ou (b) des fonctions d'agrégation.
[1]111 
112::
113
114     boroname    |         avg         |       stddev       
115  ---------------+---------------------+--------------------
116   Brooklyn      | 11.7391304347826087 | 3.9105613559407395
117   Manhattan     | 11.8214285714285714 | 4.3123729948325257
118   The Bronx     | 12.0416666666666667 | 3.6651017740975152
119   Queens        | 11.6666666666666667 | 5.0057438272815975
120   Staten Island | 12.2916666666666667 | 5.2043390480959474
121 
[19]122Liste de fonctions
123------------------
[1]124
[19]125`avg(expression) <http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: fonction d'agrégation de PostgreSQL  qui retourne la valeur moyenne d'une colonne.
[1]126
[37]127`char_length(string) <http://www.postgresql.org/docs/current/static/functions-string.html>`_: fonction s'applicant aux chaînes de caractÚre de PostgreSQL qui retourne le nombre de lettres dans une chaîne.
[1]128
[19]129`stddev(expression) <http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-STATISTICS-TABLE>`_: fonction d'aggrégation de PostgreSQL qui retourne l'écart type d'un ensemble de valeurs.
[1]130 
[19]131 
Note: See TracBrowser for help on using the repository browser.