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 @ 81

Revision 62, 5.9 KB checked in by thomasg, 12 years ago (diff)

Fin correction typo et orthographe V2 du document

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