mysql where[猿教程]

MYSQL WHERE|猿教程|

在本教程中,您将学习如何在 SELECT 语句中使用 MySQL WHERE 子句从结果集中过滤行。

MySQL WHERE 子句介绍

WHERE 子句允许您为查询返回的行指定搜索条件。下面显示了 WHERE 子句的语法:

SELECT 
    select_list
FROM
    table_name
WHERE
    search_condition;

search_condition 是使用逻辑运算符 ANDOR 和 NOT 的一个或多个表达式的组合。

在 MySQL 中,谓词是一个布尔表达式,其计算结果为 TRUEFALSE 或 UNKNOWN

SELECT 语句将包括结果集中满足 search_condition 的任何行。

除了 SELECT 语句之外,您还可以在 UPDATE 或 DELETE 语句中使用 WHERE 子句来指定要更新或删除哪些行。

当执行带有 WHERE 子句的 SELECT 语句时,MySQL 在 FROM 子句之后和 SELECT 和 ORDER BY 子句之前评估 WHERE 子句:

MySQL WHERE 子句示例

我们将使用示例数据库中的 employees 表进行演示。

使用带有相等运算符示例的 MySQL WHERE 子句

以下查询使用 WHERE 子句查找职位为'Sales Rep'的所有员工:

SELECT 
    lastname, 
    firstname, 
    jobtitle
FROM
    employees
WHERE
    jobtitle = 'Sales Rep';
+-----------+-----------+-----------+
| lastname  | firstname | jobtitle  |
+-----------+-----------+-----------+
| Jennings  | Leslie    | Sales Rep |
| Thompson  | Leslie    | Sales Rep |
| Firrelli  | Julie     | Sales Rep |
| Patterson | Steve     | Sales Rep |
| Tseng     | Foon Yue  | Sales Rep |
| Vanauf    | George    | Sales Rep |
| Bondur    | Loui      | Sales Rep |
| Hernandez | Gerard    | Sales Rep |
| Castillo  | Pamela    | Sales Rep |
| Bott      | Larry     | Sales Rep |
| Jones     | Barry     | Sales Rep |
| Fixter    | Andy      | Sales Rep |
| Marsh     | Peter     | Sales Rep |
| King      | Tom       | Sales Rep |
| Nishi     | Mami      | Sales Rep |
| Kato      | Yoshimi   | Sales Rep |
| Gerard    | Martin    | Sales Rep |
+-----------+-----------+-----------+
17 rows in set (0.00 sec)

在此示例中,SELECT 语句检查 employees 表的所有行并仅选择 jobTitle 列中值为 Sales Rep 的行。

使用带有 AND 运算符的 MySQL WHERE 子句

以下示例使用 WHERE 子句查找职务为Sales Rep且office codes为 1 的员工:


SELECT 
    lastname, 
    firstname, 
    jobtitle,
    officeCode
FROM
    employees
WHERE
    jobtitle = 'Sales Rep' AND 
    officeCode = 1;
+----------+-----------+-----------+------------+
| lastname | firstname | jobtitle  | officeCode |
+----------+-----------+-----------+------------+
| Jennings | Leslie    | Sales Rep | 1          |
| Thompson | Leslie    | Sales Rep | 1          |
+----------+-----------+-----------+------------+
2 rows in set (0.00 sec)

在此示例中,WHERE 子句中的表达式使用 AND 运算符组合两个条件:

jobtitle = 'Sales Rep' AND officeCode = 1;

仅当两个表达式的计算结果都为 TRUE 时,AND 运算符才计算为 TRUE。因此,查询返回 jobTitle 列中值为 Sales Rep 且 officeCode 为 1 的行。

将 MySQL WHERE 子句与 OR 运算符一起使用

此查询查找职位为Sales Rep的员工或office code为 1 的员工:

SELECT 
    lastName, 
    firstName, 
    jobTitle, 
    officeCode
FROM
    employees
WHERE
    jobtitle = 'Sales Rep' OR 
    officeCode = 1
ORDER BY 
    officeCode , 
    jobTitle;
+-----------+-----------+--------------------+------------+
| lastName  | firstName | jobTitle           | officeCode |
+-----------+-----------+--------------------+------------+
| Murphy    | Diane     | President          | 1          |
| Bow       | Anthony   | Sales Manager (NA) | 1          |
| Jennings  | Leslie    | Sales Rep          | 1          |
| Thompson  | Leslie    | Sales Rep          | 1          |
| Firrelli  | Jeff      | VP Marketing       | 1          |
| Patterson | Mary      | VP Sales           | 1          |
| Firrelli  | Julie     | Sales Rep          | 2          |
| Patterson | Steve     | Sales Rep          | 2          |
| Tseng     | Foon Yue  | Sales Rep          | 3          |
| Vanauf    | George    | Sales Rep          | 3          |
| Bondur    | Loui      | Sales Rep          | 4          |
| Hernandez | Gerard    | Sales Rep          | 4          |
| Castillo  | Pamela    | Sales Rep          | 4          |
| Gerard    | Martin    | Sales Rep          | 4          |
| Nishi     | Mami      | Sales Rep          | 5          |
| Kato      | Yoshimi   | Sales Rep          | 5          |
| Fixter    | Andy      | Sales Rep          | 6          |
| Marsh     | Peter     | Sales Rep          | 6          |
| King      | Tom       | Sales Rep          | 6          |
| Bott      | Larry     | Sales Rep          | 7          |
| Jones     | Barry     | Sales Rep          | 7          |
+-----------+-----------+--------------------+------------+
21 rows in set (0.00 sec)

仅当表达式之一的计算结果为 TRUE 时,OR 运算符才计算结果为 TRUE

jobtitle = 'Sales Rep' OR officeCode = 1

因此,查询返回任何职位为Sales Rep或officeCode 1 的员工。

将 MySQL WHERE 子句与 BETWEEN 运算符示例一起使用

如果值在值范围内,则 BETWEEN 运算符返回 TRUE

expression BETWEEN low AND high

以下查询查找位于officeCode为 1 到 3 的办公室的员工:

SELECT 
    firstName, 
    lastName, 
    officeCode
FROM
    employees
WHERE
    officeCode BETWEEN 1 AND 3
ORDER BY officeCode;
+-----------+-----------+------------+
| firstName | lastName  | officeCode |
+-----------+-----------+------------+
| Diane     | Murphy    | 1          |
| Mary      | Patterson | 1          |
| Jeff      | Firrelli  | 1          |
| Anthony   | Bow       | 1          |
| Leslie    | Jennings  | 1          |
| Leslie    | Thompson  | 1          |
| Julie     | Firrelli  | 2          |
| Steve     | Patterson | 2          |
| Foon Yue  | Tseng     | 3          |
| George    | Vanauf    | 3          |
+-----------+-----------+------------+
10 rows in set (0.00 sec)

将 MySQL WHERE 子句与 LIKE 运算符示例一起使用

如果值与指定的模式匹配,LIKE 运算符的计算结果为 TRUE

要形成模式,请使用 % 和 _ 通配符。 % 通配符匹配任何零个或多个字符的字符串,而 _ 通配符匹配任何单个字符。

以下查询查找姓氏以字符串 'son' 结尾的员工:

SELECT 
    firstName, 
    lastName
FROM
    employees
WHERE
    lastName LIKE '%son'
ORDER BY firstName;
+-----------+-----------+
| firstName | lastName  |
+-----------+-----------+
| Leslie    | Thompson  |
| Mary      | Patterson |
| Steve     | Patterson |
| William   | Patterson |
+-----------+-----------+
4 rows in set (0.00 sec)

使用带有 IN 运算符示例的 MySQL WHERE 子句

如果值与列表中的任何值匹配,则 IN 运算符返回 TRUE

value IN (value1, value2,...)

以下示例使用带有 IN 运算符的 WHERE 子句来查找位于office code 为 1 的办公室的员工。

SELECT 
    firstName, 
    lastName, 
    officeCode
FROM
    employees
WHERE
    officeCode IN (1 , 2, 3)
ORDER BY 
    officeCode;
+-----------+-----------+------------+
| firstName | lastName  | officeCode |
+-----------+-----------+------------+
| Diane     | Murphy    | 1          |
| Mary      | Patterson | 1          |
| Jeff      | Firrelli  | 1          |
| Anthony   | Bow       | 1          |
| Leslie    | Jennings  | 1          |
| Leslie    | Thompson  | 1          |
| Julie     | Firrelli  | 2          |
| Steve     | Patterson | 2          |
| Foon Yue  | Tseng     | 3          |
| George    | Vanauf    | 3          |
+-----------+-----------+------------+
10 rows in set (0.00 sec)

将 MySQL WHERE 子句与 IS NULL 运算符一起使用

要检查一个值是否为 NULL,请使用 IS NULL 运算符,而不是等于运算符 (=)。如果值为 NULL,则 IS NULL 运算符返回 TRUE

value IS NULL

在数据库世界中,NULL 是一个标记,表示某个值丢失或未知。而且 NULL 不等于数字 0 或空字符串。

以下语句使用带有 IS NULL 运算符的 WHERE 子句来获取 reportsTo 列中的值为 NULL 的行:

SELECT 
    lastName, 
    firstName, 
    reportsTo
FROM
    employees
WHERE
    reportsTo IS NULL;
+----------+-----------+-----------+
| lastName | firstName | reportsTo |
+----------+-----------+-----------+
| Murphy   | Diane     |      NULL |
+----------+-----------+-----------+
1 row in set (0.01 sec)

将 MySQL WHERE 子句与比较运算符一起使用

下表显示了可用于形成 WHERE 子句中的表达式的比较运算符。

OperatorDescription
=等于。您可以将它与几乎任何数据类型一起使用。
<> 或 !=不等于
<小于。您通常将它与数字和日期/时间数据类型一起使用。
>大于
<=小于或等于
>=大于或等于

以下查询使用不等于 (<>) 运算符来查找不是Sales Rep的所有员工:

SELECT 
    lastname, 
    firstname, 
    jobtitle
FROM
    employees
WHERE
    jobtitle <> 'Sales Rep';
+-----------+-----------+----------------------+
| lastname  | firstname | jobtitle             |
+-----------+-----------+----------------------+
| Murphy    | Diane     | President            |
| Patterson | Mary      | VP Sales             |
| Firrelli  | Jeff      | VP Marketing         |
| Patterson | William   | Sales Manager (APAC) |
| Bondur    | Gerard    | Sale Manager (EMEA)  |
| Bow       | Anthony   | Sales Manager (NA)   |
+-----------+-----------+----------------------+
6 rows in set (0.00 sec)

以下查询查找office code大于 5 的员工:

SELECT 
    lastname, 
    firstname, 
    officeCode
FROM
    employees
WHERE 
    officecode > 5;
+-----------+-----------+------------+
| lastname  | firstname | officeCode |
+-----------+-----------+------------+
| Patterson | William   | 6          |
| Bott      | Larry     | 7          |
| Jones     | Barry     | 7          |
| Fixter    | Andy      | 6          |
| Marsh     | Peter     | 6          |
| King      | Tom       | 6          |
+-----------+-----------+------------+
6 rows in set (0.00 sec)

以下查询返回office code小于或等于 4 (<=4) 的员工:

SELECT 
    lastname, 
    firstname, 
    officeCode
FROM
    employees
WHERE 
    officecode <= 4;
+-----------+-----------+------------+
| lastname  | firstname | officeCode |
+-----------+-----------+------------+
| Murphy    | Diane     | 1          |
| Patterson | Mary      | 1          |
| Firrelli  | Jeff      | 1          |
| Bondur    | Gerard    | 4          |
| Bow       | Anthony   | 1          |
| Jennings  | Leslie    | 1          |
| Thompson  | Leslie    | 1          |
| Firrelli  | Julie     | 2          |
| Patterson | Steve     | 2          |
| Tseng     | Foon Yue  | 3          |
| Vanauf    | George    | 3          |
| Bondur    | Loui      | 4          |
| Hernandez | Gerard    | 4          |
| Castillo  | Pamela    | 4          |
| Gerard    | Martin    | 4          |
+-----------+-----------+------------+
15 rows in set (0.00 sec)

总结

  • 使用 WHERE 子句按条件过滤行
  • MySQL 在 FROM 子句之后和 SELECT 和 ORDER BY 子句之前评估 WHERE 子句。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值