2.5. 查询一个表

要从一个表中检索数据就是查询这个表。 SQLSELECT 就是做这个用途的。 该语句分为选择列表(列出要返回的字段部分),表列表(列出从中检索数据的表的部分), 以及可选的条件(声明任意限制的部分)。比如,要检索表 weather 的所有行,键入:

SELECT * FROM weather;

(这里 * 意思是"所有字段") 而输出应该是:

     city      | temp_lo | temp_hi | 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)

你可以在选择列表中声明任意表达式。比如,你可以:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

这样应该得出:

     city      | temp_avg |    date
---------------+----------+------------
 San Francisco |       48 | 1994-11-27
 San Francisco |       50 | 1994-11-29
 Hayward       |       45 | 1994-11-29
(3 rows)

请注意这里的 AS 子句是如何给输出字段重新命名的。(它是可选的。)

允许你使用任意布尔操作符(ANDOR, 和 NOT)给查询施加条件。比如,下面的查询检索旧金山的下雨天的天气:

SELECT * FROM weather
    WHERE city = 'San Francisco'
    AND prcp > 0.0;

结果:

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)

最后再提醒一下,你可以要求查询的结果按照某种顺序排序, 并且消除重复的行输出:

SELECT DISTINCT city
    FROM weather
    ORDER BY city;

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

当然, DISTINCTORDER BY 可以独立使用。