根据给定条件或一组条件从表中过滤行,是数据分析中非常常见的做法。在 SQL 中,您可以使用 where 子句来实现。本教程将带您在多种场景下使用它。
您将使用 PostgreSQL 作为 RDBMS(关系型数据库管理系统),但在使用其他数据库系统时,语法差异并不大。您将首先搭建一个 PostgreSQL 数据库,并手动创建一个包含国家数据的表。完成设置后,您将执行多条包含 WHERE 子句的筛选查询。
注意:要跟上本教程的节奏,您需要熟悉 SQL 和 PostgreSQL 的基础知识。如果不熟悉,以下资源可能会有所帮助。
在 PostgreSQL 中创建表
要跟随本教程操作,您需要在 PostgreSQL 中创建一个包含全球各国信息的表。该表将用于演示 WHERE 子句在不同场景下的用法。
步骤 1:创建新数据库
打开 pgAdmin(或您偏好的 SQL 界面)并创建一个新的 PostgreSQL 数据库。您可以将其命名为 world_data,或使用您喜欢的其他名称。
步骤 2:创建并填充我们的表
数据库就绪后,打开一个新的 SQL 查询编辑器窗口并运行以下 SQL 代码。它将创建一个名为 countries 的表,并插入一组记录,涵盖广泛的大洲、独立年份和地区:
技术支持
该表包含全球约 16 个国家的不同信息。表包含以下列:
code:表的主键,表示某个国家的通用国家代码
name:国家名称
continent:国家所属的大洲
region:国家所在的地理区域
surface_area:国家的面积
indep_year:国家获得独立的年份
local_name:国家的本地名称
gov_form:国家现行的政体类型
capital:国家首都
cap_long:国家首都的经度
cap_lat:国家首都的纬度
现在让我们使用 WHERE 子句开始筛选一些记录。
使用 SQL WHERE 子句
在 SQL 中,WHERE 子句可让您基于文本和数值来筛选记录。您可以比较这些值,支持以下基于比较的运算:
= 等于
<> 和 != 不等于
< 小于
> 大于
<= 小于或等于
>= 大于或等于
按照 SQL 标准,建议使用 <> 而不是 !=。
现在让我们获取 code 为 AUS 的国家记录。此处应比较的列是 code,待比较的值是 AUS。查询为:
SELECT * FROM countries WHERE code = 'AUS';技术支持
您将得到:

请注意以下几点:
WHERE 子句总是位于 FROM 之后。
在 SQL 中,字符串使用单引号括起。
接下来看看数值比较。获取独立年份(indep_year)晚于 1901 的国家记录:
SELECT * FROM countries WHERE indep_year > 1901;技术支持
您将获得共 3 个在 1901 年之后独立的国家的记录。请注意此处使用的比较符。indep_year 列的数据类型是整数,因此比较时不需要引号。
您可以在一个 WHERE 子句中使用 AND 和 OR 连接多个条件。以下查询获取这些国家的记录:where continent = 'Asia' and indep_year > 1900 ——
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901;技术支持

您将获得位于 Asia 大洲且在 1901 年之后独立的共三个国家的信息。请注意,在上述查询中,您同时比较了文本值和数值。作为练习,您可以在 WHERE 子句中尝试不同的 AND 与 OR 组合。
注意:当您将 AND 与 OR 组合使用时,请不要忘记用括号将每个条件括起来。否则,SQL 在确定条件求值的优先级时会产生歧义。
使用以下查询,您将获得总共六个国家。
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;技术支持

在这里,您将获得共 15 个国家:它们要么位于 Asia,要么在 1901 年之后独立,或者国土面积大于 652090。
现在将该查询改为更具限制性的 AND 版本:
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901 AND surface_area > 652090;技术支持

在这种情况下,您将获得两个国家。
您还可以在 WHERE 子句中配合使用子查询。假设您想获取国土面积最大的国家记录,但并不知道国家的最大国土面积是多少。遇到这种情况,以下查询可以帮您解决:
SELECT * FROM countries WHERE surface_area in (SELECT MAX(surface_area) FROM countries);技术支持
您应该会得到 Russia 的记录。

结论
恭喜您完成本教程。根据条件筛选查询结果是一项至关重要的技能,而本教程正是对其的入门介绍。若您希望进一步提升 SQL 技能,可以查看我们的课程(链接见下)。
根据给定条件或一组条件从表中过滤行,是数据分析中非常常见的做法。在 SQL 中,您可以使用
where子句来实现。本教程将带您在多种场景下使用它。您将使用 PostgreSQL 作为 RDBMS(关系型数据库管理系统),但在使用其他数据库系统时,语法差异并不大。您将首先搭建一个 PostgreSQL 数据库,并手动创建一个包含国家数据的表。完成设置后,您将执行多条包含
WHERE子句的筛选查询。注意:要跟上本教程的节奏,您需要熟悉 SQL 和 PostgreSQL 的基础知识。如果不熟悉,以下资源可能会有所帮助。
在 PostgreSQL 中创建表
要跟随本教程操作,您需要在 PostgreSQL 中创建一个包含全球各国信息的表。该表将用于演示
WHERE子句在不同场景下的用法。步骤 1:创建新数据库
打开 pgAdmin(或您偏好的 SQL 界面)并创建一个新的 PostgreSQL 数据库。您可以将其命名为
world_data,或使用您喜欢的其他名称。步骤 2:创建并填充我们的表
数据库就绪后,打开一个新的 SQL 查询编辑器窗口并运行以下 SQL 代码。它将创建一个名为
countries的表,并插入一组记录,涵盖广泛的大洲、独立年份和地区:该表包含全球约 16 个国家的不同信息。表包含以下列:
code:表的主键,表示某个国家的通用国家代码name:国家名称continent:国家所属的大洲region:国家所在的地理区域surface_area:国家的面积indep_year:国家获得独立的年份local_name:国家的本地名称gov_form:国家现行的政体类型capital:国家首都cap_long:国家首都的经度cap_lat:国家首都的纬度现在让我们使用
WHERE子句开始筛选一些记录。使用 SQL WHERE 子句
在 SQL 中,
WHERE子句可让您基于文本和数值来筛选记录。您可以比较这些值,支持以下基于比较的运算:=等于<>和!=不等于<小于>大于<=小于或等于>=大于或等于按照 SQL 标准,建议使用
<>而不是!=。现在让我们获取
code为AUS的国家记录。此处应比较的列是code,待比较的值是AUS。查询为:您将得到:
请注意以下几点:
WHERE子句总是位于FROM之后。在 SQL 中,字符串使用单引号括起。
接下来看看数值比较。获取独立年份(
indep_year)晚于1901的国家记录:您将获得共 3 个在
1901年之后独立的国家的记录。请注意此处使用的比较符。indep_year列的数据类型是整数,因此比较时不需要引号。您可以在一个
WHERE子句中使用AND和OR连接多个条件。以下查询获取这些国家的记录:where continent = 'Asia' and indep_year > 1900——您将获得位于
Asia大洲且在1901年之后独立的共三个国家的信息。请注意,在上述查询中,您同时比较了文本值和数值。作为练习,您可以在WHERE子句中尝试不同的AND与OR组合。注意:当您将
AND与OR组合使用时,请不要忘记用括号将每个条件括起来。否则,SQL 在确定条件求值的优先级时会产生歧义。使用以下查询,您将获得总共六个国家。
您甚至可以在一个
WHERE子句中连接两个以上的条件:在这里,您将获得共 15 个国家:它们要么位于
Asia,要么在1901年之后独立,或者国土面积大于652090。现在将该查询改为更具限制性的
AND版本:在这种情况下,您将获得两个国家。
您还可以在
WHERE子句中配合使用子查询。假设您想获取国土面积最大的国家记录,但并不知道国家的最大国土面积是多少。遇到这种情况,以下查询可以帮您解决:您应该会得到
Russia的记录。结论
恭喜您完成本教程。根据条件筛选查询结果是一项至关重要的技能,而本教程正是对其的入门介绍。若您希望进一步提升 SQL 技能,可以查看我们的课程(链接见下)。