2.5. Interroger une table

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;

(où * correspond à << toutes les colonnes >>) et 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 spécifier toutes les expressions arbitraires 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. (Ceci est optionel.)

Les opérateurs booléens arbitraires (AND, OR et NOT) sont autorisés dans la qualification d'une requête. 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)

Pour conclure, vous pouvez demander que les résultats d'une requête puissent être retournés triés ou avec les lignes en double enlevées :

SELECT DISTINCT ville
    FROM temps
    ORDER BY ville;

     ville
---------------
 Hayward
 San Francisco
(2 rows)

DISTINCT et ORDER BY peuvent être utilisés séparément bien sûr.