暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

查询表

原创 pg 2022-07-28
391

要从表中检索数据,需要对表进行查询。SQL SELECT语句用于执行此操作。该语句分为选择列表(列出要返回的列的部分)、表列表(列出从中检索数据的表的部分)和可选限定(指定任何限制的部分) . 例如,要检索 table 的所有行weather,请键入:

从天气中选择*;
这*是“所有列”的简写。[2]所以同样的结果会是:

从天气中选择城市、temp_lo、temp_hi、prcp、日期;
输出应该是:

 城市| temp_lo | temp_hi | prcp | 日期

---------------±--------±--------±-----±-----------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 43 | 57 | 0 | 1994-11-29
海沃德 | 37 | 54 | | 1994-11-29
(3 行)
您可以在选择列表中编写表达式,而不仅仅是简单的列引用。例如,您可以这样做:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
这应该给出:

 城市| temp_avg | 日期

---------------±---------±-----------
San Francisco | 48 | 1994-11-27
San Francisco | 50 | 1994-11-29
海沃德 | 45 | 1994-11-29
(3 行)
请注意该AS子句如何用于重新标记输出列。(该AS子句是可选的。)

可以通过添加一个指定需要哪些行的子句来“限定”查询。WHERE该WHERE子句包含一个布尔(真值)表达式,并且仅返回布尔表达式为真的行。限定条件中允许使用通常的布尔运算符(AND、OR和)。NOT例如,以下检索旧金山下雨天的天气:

选择 * 从天气
WHERE city = ‘旧金山’ AND prcp > 0.0;
结果:

 城市| temp_lo | temp_hi | prcp | 日期

---------------±--------±--------±-----±-----------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
(1 行)
您可以请求按排序顺序返回查询结果:

选择 * 从天气
按城市订购;
城市| temp_lo | temp_hi | prcp | 日期
---------------±--------±--------±-----±-----------
海沃德 | 37 | 54 | | 1994-11-29
San Francisco | 43 | 57 | 0 | 1994-11-29
San Francisco | 46 | 50 | 0.25 | 1994-11-27
在此示例中,未完全指定排序顺序,因此您可能会以任一顺序获取 San Francisco 行。但是如果你这样做,你总是会得到上面显示的结果:

选择 * 从天气
按城市排序,temp_lo;
您可以请求从查询结果中删除重复行:

选择不同的城市
从天气;
城市

海沃德
San Francisco
(2 行)
同样,结果行排序可能会有所不同。您可以通过使用DISTINCT和ORDER BY一起确保一致的结果:[3]

选择不同的城市
从天气
按城市订购;

[2]虽然SELECT *对于即兴查询很有用,但它在生产代码中被广泛认为是不好的样式,因为向表中添加列会改变结果。

[3]在一些数据库系统中,包括旧版本的PostgreSQL,DISTINCT自动对行ORDER BY是不必要的。但这不是 SQL 标准所要求的,并且当前的PostgreSQL不保证DISTINCT会导致行被排序。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论