Changeset 62 for trunk/workshop-foss4g/simple_sql.rst
- Timestamp:
- 17/03/2012 00:49:40 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/workshop-foss4g/simple_sql.rst
r45 r62 4 4 =============================== 5 5 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éer notre premiÚre base de données. Rappel: 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. 7 8 Rappel: 7 9 8 10 .. code-block:: sql … … 10 12 SELECT postgis_full_version(); 11 13 12 Maintenant que nous avons charg erdes données dans notre base, essayons d'utiliser SQL pour les interroger. Par exemple,14 Maintenant que nous avons chargé des données dans notre base, essayons d'utiliser SQL pour les interroger. Par exemple, 13 15 14 "Quel sont les noms des quartiers de la ville de New York ?"15 16 "Quels sont les noms des quartiers de la ville de New York ?" 17 16 18 Ouvrez une fenêtre SQL depuis pgAdmin en cliquant sur le bouton SQL 17 19 … … 23 25 24 26 SELECT name FROM nyc_neighborhoods; 25 27 26 28 et cliquez sur le bouton **Execute Query** (le triangle vert). 27 28 .. image:: ./screenshots/pgadmin_08.png 29 30 .. image:: ./screenshots/pgadmin_08.png 29 31 30 32 La requête s'exécutera pendant quelques (mili)secondes et retournera 129 résultats. 31 33 32 .. image:: ./screenshots/pgadmin_09.png 34 .. image:: ./screenshots/pgadmin_09.png 33 35 34 Mais que c'est-il exactement passé ici ? Pour le comprendre, commençons par présenter les quatre types de requêtes du SQL :36 Mais que s'est-il exactement passé ici ? Pour le comprendre, commençons par présenter les quatre types de requêtes du SQL : 35 37 36 38 * ``SELECT``, retourne des lignes en réponse à une requête … … 38 40 * ``UPDATE``, modifie des lignes existantes d'une table 39 41 * ``DELETE``, supprime des lignes d'une table 40 41 Nous travaillerons principalement avec des requêtes de type ``SELECT`` afin d'interroger les tables en utilisant des fonctions spatiales.42 43 Nous travaillerons principalement avec des requêtes de type ``SELECT`` afin d'interroger les tables en utilisant des fonctions spatiales. 42 44 43 45 Requête de type SELECT … … 47 49 48 50 SELECT colonnes FROM données WHERE conditions; 49 51 50 52 .. note:: 51 53 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>`_. 53 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>`_. 54 55 55 Les ``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 à retourner. 56 57 Les ``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. 56 58 57 59 "Quel sont les noms des quartiers de Brooklyn ?" 58 60 59 Nous retournons à notre table ``nyc_neighborhoods`` avec le filtre en main. La table contient tou tles quartiers de New York et nous voulons uniquement ceux de Brooklyn.61 Nous 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. 60 62 61 63 .. code-block:: sql 62 64 63 SELECT name 64 FROM nyc_neighborhoods 65 SELECT name 66 FROM nyc_neighborhoods 65 67 WHERE boroname = 'Brooklyn'; 66 68 67 La requête prendra à nouveau quelque (mil i)secondes et retournera les 23 éléments résultants.69 La requête prendra à nouveau quelque (milli)secondes et retournera les 23 éléments résultants. 68 70 69 Parfois nous aurons besoin d'appliquer des fonctions sur le résultatsd'une de nos requêtes. Par exemple,71 Parfois, nous aurons besoin d'appliquer des fonctions sur le résultat d'une de nos requêtes. Par exemple, 70 72 71 73 "Quel est le nombre de lettres dans les noms des quartiers de Brooklyn ?" 72 74 73 75 Heureusement PostgreSQL fournit une fonction calculant la longueur d'une chaîne de caractÚres : :command:`char_length(string)`. 74 76 75 77 .. code-block:: sql 76 78 77 SELECT char_length(name) 78 FROM nyc_neighborhoods 79 SELECT char_length(name) 80 FROM nyc_neighborhoods 79 81 WHERE boroname = 'Brooklyn'; 80 82 81 Bien 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éedes "fonctions d'aggrégations".83 Bien 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". 82 84 83 PostgreSQL fournit un ensemble de fonctions d'aggrégations, parmi slesquelles :command:`avg()` pour calculer la moyenne, and :command:`stddev()` pour l'écart type.85 PostgreSQL fournit un ensemble de fonctions d'aggrégations, parmi lesquelles :command:`avg()` pour calculer la moyenne, and :command:`stddev()` pour l'écart type. 84 86 85 "Quel est le nombre moyen et l'écart type du nombre de lettre dans le nomsdes quartier de Brooklyn ?"86 87 "Quel est le nombre moyen et l'écart type du nombre de lettres dans le nom des quartier de Brooklyn ?" 88 87 89 .. code-block:: sql 88 90 89 SELECT avg(char_length(name)), stddev(char_length(name)) 90 FROM nyc_neighborhoods 91 SELECT avg(char_length(name)), stddev(char_length(name)) 92 FROM nyc_neighborhoods 91 93 WHERE boroname = 'Brooklyn'; 92 94 93 95 :: 94 96 95 avg | stddev 97 avg | stddev 96 98 ---------------------+-------------------- 97 99 11.7391304347826087 | 3.9105613559407395 98 100 99 Les 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.101 Les 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. 100 102 101 "Quel est la moyenne d es les noms de quartier de New York, renvoyer par quartiers?"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 ?" 102 104 103 105 .. code-block:: sql 104 106 105 SELECT boroname, avg(char_length(name)), stddev(char_length(name)) 106 FROM nyc_neighborhoods 107 SELECT boroname, avg(char_length(name)), stddev(char_length(name)) 108 FROM nyc_neighborhoods 107 109 GROUP BY boroname; 108 109 110 110 Nous 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. 111 111 112 Nous 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 112 114 :: 113 115 114 boroname | avg | stddev 116 boroname | avg | stddev 115 117 ---------------+---------------------+-------------------- 116 118 Brooklyn | 11.7391304347826087 | 3.9105613559407395 … … 119 121 Queens | 11.6666666666666667 | 5.0057438272815975 120 122 Staten Island | 12.2916666666666667 | 5.2043390480959474 121 123 122 124 Liste de fonctions 123 125 ------------------ … … 125 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. 126 128 127 `char_length(string) <http://www.postgresql.org/docs/current/static/functions-string.html>`_: fonction s'appli cant aux chaînes de caractÚre de PostgreSQL qui retourne le nombre de lettres dans une chaîne.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. 128 130 129 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. 130 131 132
Note: See TracChangeset
for help on using the changeset viewer.