Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 2. Le langage SQL | Avance rapide | Suivant |
Pour retrouver les données d'une table, elle est
interrogée. Une instruction
SQL SELECT est utilisée pour
faire cela. L'instruction est divisée en liste de sélection (la
partie qui liste les colonnes à retourner), une liste de tables
(la partie qui liste les tables à partir desquelles les données
seront retrouvées) et une qualification optionnelle (la partie qui
spécifie les restrictions). Par exemple, pour retrouver toutes
les lignes de la table temps
, tapez :
SELECT * FROM temps;
Ici, * est un raccourci pour << toutes les colonnes >>. [1] Donc, le même résultat pourrait être :
SELECT ville, temp_basse, temp_haute, prcp, date FROM temps;
le résultat devrait être :
ville | temp_basse | temp_haute | prcp | date ---------------+------------+------------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 San Francisco | 43 | 57 | 0 | 1994-11-29 Hayward | 37 | 54 | | 1994-11-29 (3 rows)
Vous pouvez écrire des expressions, pas seulement des références à de simples colonnes, dans la liste de sélection. Par exemple, vous pouvez faire :
SELECT ville, (temp_haute+temp_basse)/2 AS temp_moy, date FROM temps;
Cela devrait donné :
ville | temp_moy | date ---------------+----------+------------ San Francisco | 48 | 1994-11-27 San Francisco | 50 | 1994-11-29 Hayward | 45 | 1994-11-29 (3 rows)
Notez comment la clause AS est utilisée pour renommer la sortie d'une colonne. (La clause AS est optionnelle.)
Une requête peut être << qualifiée >> en ajoutant une clause WHERE qui spécifie quelles lignes sont souhaitées. La clause WHERE contient une expression booléenne (vraie) et seules les lignes pour lesquelles l'expression booléenne est vraie sont renvoyées. Les opérateurs booléens habituels (AND, OR et NOT) sont autorisés dans la qualification. Par exemple, ce qui suit recherche le temps à San Francisco les jours pluvieux :
SELECT * FROM temps WHERE ville = 'San Francisco' AND prcp > 0.0;
Résultat :
ville | temp_basse | temp_haute | prcp | date ---------------+------------+------------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 (1 row)
Vous pouvez demander que les résultats d'une requêtes soient renvoyés dans un ordre trié :
SELECT * FROM temps ORDER BY ville;
ville | temp_basse | temp_haute | prcp | date --------------+------------+------------+------+------------ Hayward | 37 | 54 | | 1994-11-29 San Francisco | 43 | 57 | 0 | 1994-11-29 San Francisco | 46 | 50 | 0.25 | 1994-11-27
Dans cet exemple, l'ordre de tri n'est pas spécifié complètement, donc vous pouvez obtenir les lignes San Francisco dans n'importe quel ordre. Mais, vous auriez toujours obtenu les résultats affichés ci-dessus si vous aviez fait
SELECT * FROM temps ORDER BY ville, temp_basse;
Vous pouvez demander que les lignes dupliquées soient supprimées du résultat d'une requête :
SELECT DISTINCT ville FROM temps;
ville --------------- Hayward San Francisco (2 rows)
De nouveau, l'ordre des lignes résultats pourrait varier. Vous pouvez vous assurer des résultats cohérents en utilisant DISTINCT et ORDER BY ensemble : [2]
SELECT DISTINCT ville FROM temps ORDER BY ville;
[1] | Alors que SELECT * est utile pour des requêtes rapides, il est généralement considéré comme un mauvais style dans un code en production car l'ajout d'une colonne dans la table changerait les résultats. |
[2] | Dans certains systèmes de bases de données, ceci incluant les anciennes versions de PostgreSQL, l'implémentation de DISTINCT ordonne automatiquement les lignes. Du coup, ORDER BY est redondant. Mais, ceci n'est pas requis par le standard SQL et PostgreSQL ne vous garantit pas actuellement que DISTINCT ordonne les lignes. |
Précédent | Sommaire | Suivant |
Remplir une table avec des lignes | Niveau supérieur | Jointures entre les tables |