要从一个表格中检索数据,对该表格进行查询。一个SQL SELECT
语句用于执行此操作。此语句被分为一个选择列表(列出要返回的列的部分)、一个表格列表(列出要从中检索数据表的的部分)和一个可选条件(指定任何限制的部分)。例如,要检索表格 weather
的所有行,请键入
SELECT * FROM weather;
此处 *
是 “所有列” 的简写。 [2] 因此以下内容将获得相同的结果
SELECT city, temp_lo, temp_hi, prcp, date 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
子句如何用于重新标记输出列。(AS
子句是可选的。)
可以通过添加一个指定所需行的 WHERE
子句来““限定””查询。 WHERE
子句包含一个布尔值(真值)表达式,并且仅返回布尔表达式为真的行。限定中允许使用常见的布尔运算符(AND
、OR
和 NOT
)。例如,以下内容检索下雨天的旧金山的 weather
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 * FROM weather ORDER BY city;
city | temp_lo | temp_hi | 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
在此示例中,排序顺序未完全指定,因此您可能会按任意顺序获取旧金山行。但如果您执行以下操作,您将始终获得上面显示的结果
SELECT * FROM weather ORDER BY city, temp_lo;
SELECT DISTINCT city FROM weather;
city --------------- Hayward San Francisco (2 rows)
在此示例中,结果行的顺序也可能有所不同。您可以通过共同使用 DISTINCT
和 ORDER BY
来确保结果一致: [3]
SELECT DISTINCT city FROM weather ORDER BY city;