📅  最后修改于: 2020-11-30 08:42:38             🧑  作者: Mango
在本节中,我们将了解PostgreSQL where子句的工作原理,该子句用于过滤Select命令返回的行。
WHERE条件用于描述当我们从表或联接各种表中获取数据时的条件。它通常与SELECT,UPDATE和DELETE命令一起使用以过滤输出。仅在满足条件时才返回精确结果。
注意:要选择满足详细条件的行,我们使用WHERE子句。 SELECT命令返回表中一个或多个列的所有行。
PostgreSQL WHERE条件的语法如下:
SELECT column1, column2, ..... columnN
FROM table_name
WHERE [search_condition]
ORDER BY sort_expression
在Select命令中, WHERE条件位于FROM子句之后。该条件用于过滤从SELECT命令返回的行。
如果我们使用AND&OR运算符,则where子句可以是布尔表达式或一组布尔表达式。该子句必须评估为真,假或未知。
WHERE条件适用于以下格式:
它从From子句开始→然后执行Where条件→之后将选择特定的列→然后由Order by子句执行。
WHERE条件不支持SELECT命令下的列别名。 Where子句支持DELETE和UPDATE命令,该命令用于定义已删除和已更新的行。
WHERE条件可以用逻辑和运算符被使用,如示于下表:
Different Operators | Description |
---|---|
AND | Logical operator AND |
OR | Logical operator OR |
= | Equal |
> | Greater than |
< | Less than |
<> or != | Not equal |
>= | Greater than or equal |
<= | Less than or equal |
IN | The IN operator will return true if a value matches any value in a list |
LIKE | The LIKE operator is used to return true if a value matches a pattern |
BETWEEN | The BETWEEN operator is used to return true if a value is between a range of values |
NOT | Negate the result of other operators |
IS NULL | It is used to return true if a value is NULL. |
让我们看一些示例,在其中学习WHERE子句在PostgreSQL中的工作方式。
为此,我们将使用在PostgreSQL教程的前面部分中创建的Employee表。
下面的屏幕快照定义了Employee表中存在的不同列:
在上表中,我们将使用where子句执行不同类型的运算符。
在下面的示例中,我们将使用And逻辑运算符组合employee表中的两个布尔表达式,以查找first_name为Mia和last_name为Smith 。
SELECT first_name, last_name
FROM
employee
WHERE
first_name = 'Mia' AND last_name = 'Smith';
输出量
执行完以上命令后,我们将得到以下输出:
在下面的命令中,我们在员工表中使用Equal(=)运算符,并使用where条件标识last_name等于smith的记录。
SELECT first_name,last_name
FROM employee
WHERE last_name = 'smith';
输出量
执行完上述命令后,我们将获得以下输出,该输出将提取最后一个_name等于smith的两个记录。
在下面的示例中,我们将在employee表中使用OR逻辑运算符将first_name标识为Megan ,将last_name标识为Will 。
SELECT first_name, last_name
FROM
employee
WHERE
first_name = 'megan' OR last_name = 'will';
输出量
执行上述命令后,我们将获得以下输出:
在这里,我们将使用LIKE运算符来标识与定义的设计匹配的字符串。
以下命令在employee表中显示其last_name以字符串smi开头的那些记录。
SELECT first_name,last_name
FROM employee
WHERE last_name LIKE 'smi%';
输出量
执行完上述命令后,我们将获得以下输出,上面的查询将提取四个last_name以smi 字符串开头的记录:
注意:在上面的命令中,%被称为通配符,它有助于匹配任何字符串。并且'smi%'模式与以'smi'开头的字符串匹配。
在这里,我们将使用IN运算符将字符串与列表中的任何字符串进行匹配。
以下命令在employee表中显示last_name为smi,smith的那些记录。
SELECT first_name,last_name
FROM employee
WHERE last_name IN ('smi','smith');
输出量
一旦执行了以上命令,我们将获得以下输出:
在下面的命令中,我们将使用Between运算符显示last_name ,该名称以字符串ith结束,并在employee表中具有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;
输出量
一旦执行了上面的命令,我们将获得以下输出,上面的查询将获取与ith字符串匹配的两条记录,并且名称长度在2到6之间。
在下面的示例中,我们将使用不等于<>运算符来标识地址以New字符串开头且first_name不等于Olivia的那些雇员。
SELECT first_name, last_name, address
FROM employee
WHERE address LIKE 'New%' AND first_name <> 'Olivia';
输出量
一旦执行了上面的命令,我们将获得以下输出,查询将获取地址与New字符串匹配的两个记录,并且first_name不等于Olivia 。
注:我们可以同时使用<>运算符和=运算符,因为它们是类似的,因为我们可以在下面的命令来查看!
SELECT first_name, last_name, address
FROM employee
WHERE address LIKE 'New%' AND first_name <> 'John';
输出量
执行完上述命令后,我们将获得以下输出,查询将获取地址以新字符串开头且first_name不等于John的一条记录。