PostgreSQL WHERE 子句


PostgreSQL WHERE 子句

在本节中,我们将了解 PostgreSQL where 子句的工作原理,它用于过滤Select命令返回的行。

WHERE 条件用于描述我们从表中获取数据或连接各种表时的条件。它通常与SELECT、UPDATE 和 DELETE命令一起用于过滤输出。只有在满足条件时才返回准确的结果。

注意:要选择满足详细条件的行,我们使用 WHERE 子句。SELECT 命令返回表中一列或多列的所有行。

PostgreSQL WHERE 子句的语法

PostgreSQL WHERE 条件的语法如下:

SELECT column1, column2, ..... columnN    
FROM table_name    
WHERE [search_condition]    
ORDER BY sort_expression

Select命令中,WHERE条件位于FROM子句之后。条件用于过滤从SELECT 命令返回的行。

如果我们使用AND & OR运算符,where 子句可以是布尔表达式或一组布尔表达式。并且该子句必须评估为true、false 或 unknown

WHERE 条件适用于以下格式:

它从From 子句开始然后执行Where 条件 →之后它将选择特定的列然后通过Order by子句执行。

PostgreSQL WHERE 子句

WHERE条件不支持列别名下的SELECT命令。Where 子句支持DELETE和UPDATE命令,用于定义删除和更新的行。

WHERE条件可以与所使用的逻辑和比较运算符,如示于下表:

不同的运营商 描述
AND 逻辑运算符 AND
OR 逻辑运算符 OR
= 平等的
> 比...更棒
< 少于
<> or != 不相等
>= 大于或等于
<= 小于或等于
IN 如果值与列表中的任何值匹配,则 IN 运算符将返回 true
LIKE 如果值与模式匹配,则 LIKE 运算符用于返回 true
BETWEEN BETWEEN 运算符用于在值介于一系列值之间时返回 true
NOT 否定其他运算符的结果
IS NULL 如果值为 NULL,则用于返回 true。

PostgreSQL WHERE 条件示例

让我们看一些示例,了解WHERE 子句在 PostgreSQL 中的工作原理。

为此,我们将采用我们在PostgreSQL 教程的前面部分中创建的Employee\表。

下面的屏幕截图定义了Employee\表中存在的不同列:

PostgreSQL WHERE 子句

在上表中,我们将使用where 子句执行不同类型的运算符

  • 使用 WHERE 子句的 AND 运算符示例

在下面的示例中,我们将使用And 逻辑运算符组合员工\表中的两个布尔表达式,以找到first_name 是 Mia 和 last_nameSmith

SELECT first_name, last_name  
FROM   
employee  
WHERE   
first_name = 'Mia' AND last_name = 'Smith';

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL WHERE 子句

  • 使用 WHERE 子句的 (=) 等号运算符示例

在下面的命令中,我们在员工\表中使用等于 (=) 运算符,使用where 条件来标识last_name 等于 smith的记录。

SELECT first_name,last_name  
FROM employee  
WHERE last_name = 'smith';

输出

执行上述命令后,我们将获得以下输出,该输出获取最后一个 _name等于smith的两条记录。

PostgreSQL WHERE 子句

  • 使用 WHERE 子句的 OR 运算符示例

在下面的例子中,我们将使用OR逻辑运算符职员\表来识别FIRST_NAME梅根姓氏意志

SELECT first_name, last_name  
FROM   
employee  
WHERE   
first_name = 'megan' OR last_name = 'will';

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL WHERE 子句

  • 使用 WHERE 子句的 LIKE 运算符示例

在这里,我们将使用LIKE 运算符来识别与定义的设计相匹配的字符串。

下面的命令显示那些记录姓氏打头的字符串SMI员工\表。

SELECT first_name,last_name  
FROM employee  
WHERE last_name LIKE 'smi%';

输出

执行上面的命令后,我们会得到下面的输出,其中上面的查询获取的的四个记录姓氏开始与SMI字符串

PostgreSQL WHERE 子句

注意:在上面的命令中,% 被称为通配符,它有助于匹配任何字符串。'smi%' 模式匹配那些以 'smi' 开头的字符串。

  • 使用 WHERE 子句的 IN 运算符示例

在这里,我们将使用IN 运算符将字符串与列表中的任何字符串进行匹配。

下面的命令显示那些记录 last_name is smi, smith, in the employee\ table。

SELECT first_name,last_name  
FROM employee  
WHERE last_name IN ('smi','smith');

输出

一旦我们执行了上面的命令,我们将得到以下输出:

PostgreSQL WHERE 子句

  • 使用 WHERE 子句的 BETWEEN 运算符示例

在下面的命令中,我们将使用between 运算符来显示last_name,它以字符串ith结尾并且在员工\表中具有2 到 6 个字符。

注意:在这里,我们使用了 LENGTH() 函数来获取输入字符串的字符数。

SELECT last_name, LENGTH(last_name) name_length  
FROM employee  
WHERE last_name LIKE '%ith' AND LENGTH(last_name) BETWEEN 2 AND 6  
ORDER BY name_length;

输出

一旦我们执行上述命令,我们会得到以下输出,其中上述查询获取两个记录匹配,其第i个字符串,并且名称长度介于2和6

PostgreSQL WHERE 子句

  • 使用 WHERE 子句的不等运算符 (<>) 示例

在下面的例子中,我们将使用不等于<>运营商,以确定这些员工,其地址开始新的字符串,而FIRST_NAME不等于奥利维亚

SELECT first_name, last_name, address  
FROM employee  
WHERE address LIKE 'New%' AND first_name <> 'Olivia';

输出

一旦我们执行上面的命令,我们会得到下面的输出,其中查询获取的两个记录地址的匹配新的字符串,而FIRST_NAME不等于奥利维亚

PostgreSQL WHERE 子句

注意:我们可以同时使用 <> 运算符和 != 运算符,因为它们与我们在以下命令中看到的相似:

SELECT first_name, last_name, address  
FROM employee  
WHERE address LIKE 'New%' AND first_name <> 'John';

输出

执行上述命令后,我们将得到以下输出,其中查询获取地址以新字符串开头的记录,且first_name不等于John

PostgreSQL WHERE 子句