本文概述
相对于给定条件或一组条件从表中筛选行是数据分析中非常普遍的做法。在SQL中, 可以使用where子句执行此操作。在本教程中, 你将在许多不同的场景中使用它。
你将使用PostgreSQL作为RDBMS(关系数据库管理系统), 但是使用其他数据库系统时, 语法没有太大变化。首先将还原具有相关表的PostgreSQL数据库, 然后执行包含where子句的几个过滤器查询。
注意:要继续学习本教程, 你必须熟悉SQL和PostgreSQL的基础知识。如果你不熟悉以下资源, 它们可能会有所帮助。
- PostgreSQL入门
- 在Windows和Mac OS X上安装PostgreSQL
恢复PostgreSQL数据库
几乎每个RDBMS都允许我们获取特定数据库的备份副本并进行还原。对于本教程, 你将使用此备份文件到PostgreSQL数据库中。在PostgreSQL中, 数据库备份导出为.backup文件。给定的数据库备份内部有一个表, 该表将在本教程中使用。要还原备份, 你需要首先在PostgreSQL中创建一个数据库。因此, 打开pgAdmin工具并创建一个新的PostgreSQL数据库。给它一个你选择的名称。
创建数据库后, 右键单击它, 然后选择”还原”。应打开以下对话框-
保持上图所示的设置。你将必须导航到数据库备份文件所在的路径。之后, 单击还原选项。备份将还原到你选择的数据库中。在表格部分下, 你应该看到表格国家/地区的条目-
随时在表上执行选择查询以查看其内容。
检查国家数据表
以下是你刚刚还原的国家/地区表的快照-
表格包含有关全球206个国家/地区的不同信息。该表包括以下列-
- 代码是表的主键, 表示给定国家/地区的通用国家/地区代码
- 名称, 即国家名称
- 一个国家所属的大陆
- 区域一个国家/地区的地理位置
- 国家的surface_area
- 独立年份, 即一个国家获得独立的年份
- 国家的本地名称
- gov_form, 即在一个国家/地区活跃的政府
- 一个国家的首都
- cap_long, 即一国首都的经度
- cap_lat, 即一国首都的纬度
现在开始使用where子句过滤一些记录。
Where子句示例
在SQL中, where子句可让你根据文本值和数字值过滤记录。你可以比较这些值, 并且支持以下基于比较的操作-
- =相等
- <>和!=不等于
- <小于
- >大于
- <=小于或等于
- > =大于或等于
建议按照SQL标准使用<>而不是!=。
现在, 让我们获取代码为AUS的国家/地区的记录。你应在此处比较的列是代码列, 要比较的值是AUS。查询将是-
select * from countries where code = 'AUS';
然后你得到-
注意这里的几件事-
- where子句始终来自。
- 在SQL中, 使用单引号引起来的字符串。
现在让我们看一下数值比较。让我们获取该国在1900年之后获得独立(indep_year)的记录-
select * from countries where indep_year > 1901;
你会获得总共145个国家的记录, 这些国家在1900年之后获得了独立。请注意此处使用的比较器。 indep_yearcolumn是整数。因此, 比较中没有引号。
你可以使用AND和OR连接词在where子句中连接多个条件。通过以下查询, 你可以获取大洲=”亚洲”且indep_year> 1900的国家/地区的记录-
select * from countries where continent = 'Asia' and indep_year > 1900;
你获得有关位于亚洲大陆并在1900年后获得独立的总共42个国家的信息。请注意, 在上述查询中, 你比较了文本值和数字值。作为练习, 你在where子句中使用AND和OR的不同组合进行游戏。
注意:合并AND和OR时, 请不要忘记将每个条件括在括号中。否则, SQL会混淆确定条件评估的优先级。
通过以下查询, 你总共可以得到66个国家/地区, 条件为(大陆=’欧洲’并且indep_year> 1900)或(大陆=’亚洲’并且indep_year> 1900)。
select * from countries where
(continent = 'Europe' and indep_year > 1900)
or
(continent = 'Asia' and indep_year > 1900);
你甚至可以在where子句中连接两个以上的条件-
select * from countries where continent = 'Asia' or indep_year > 1900 or surface_area > 652090;
你总共获得了165个位于亚洲大陆或在1900年后获得独立或表面积大于652090的国家的国家。现在将查询转换为其AND变体, 在其中将使用AND连接每个条件。
select * from countries where continent = 'Asia' and indep_year > 1900 and surface_area > 652090;
在这种情况下, 你将总共获得9个国家/地区。
如果你多次比较同一列值, 则每次都必须指定列名。请参考以下查询-
select * from countries where indep_year = 1947 or indep_year = 1912;
但是查询从* indep_year = 1947或1912的国家中选择*;是错的。
你也可以在where子句中配对子查询。假设你要获取表面积最大的国家/地区的记录, 但是你不知道某个国家/地区获得的最大表面积是多少。在这种情况下, 可以使用以下查询进行救援-
select * from countries where surface_area in (select max(surface_area) from countries);
你应该获得俄罗斯的记录。
总结
恭喜, 你已完成本教程。根据条件过滤查询结果绝对是一项至关重要的技能, 本教程向你介绍了它。如果你想进一步提高SQL技能, 可以查看以下srcmini课程-
- 在SQL中联接数据
- 用于探索性数据分析的SQL
评论前必须登录!
注册