MySQL 使用 WHERE 子句过滤数据
本文介绍了在 MySQL 数据库中如何使用 WHERE
语句过滤数据。
默认情况下,SELECT
查询数据表中的所有行数。但我们只想查询满足一定条件的数据,就要用到 WHERE
子句。
MySQL WHERE 子句介绍
WHERE 子句允许您为 SELECT 查询指定搜索条件。以下是 WHERE 子句的语法:
SELECT
columns_list
FROM
table_name
WHERE
query_condition;
其中 query_condition
就是查询条件,它的结果是一个布尔值,其值可能为 TRUE
, FALSE
或 UNKNOWN
。最终, SELECT
语句返回的结果集就是满足查询条件结果为 TRUE
的记录。
查询条件一般用来比较某个字段是否匹配某个值,一般形式如下:
column_name = value
查询条件也可以是使用 AND , OR 和 NOT
逻辑运算符一个或多个表达式的组合。
除了用在 SELECT 语句之外, WHERE 子句还可以用在 UPDATE 和 DELETE 语句中,用来指定要更新或删除的行。
WHERE子句实例
在以下实例中,我们使用 Sakila 示例数据库中的演员表actor
作为演示。
以下是 actor 表的定义:
+-------------+-------------------+------+-----+-------------------+-----------------------------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------+------+-----+-------------------+-----------------------------------------------+
| actor_id | smallint unsigned | NO | PRI | NULL | auto_increment |
| first_name | varchar(45) | NO | | NULL | |
| last_name | varchar(45) | NO | MUL | NULL | |
| last_update | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+-------------+-------------------+------+-----+-------------------+-----------------------------------------------+
使用相等比较运算
以下查询使用 WHERE
子句查找姓为刘
的所有演员:
SELECT
*
FROM
actor
WHERE
last_name = '刘'
在这个语句中查询条件 last_name = '刘'
的含义是表中记录行的 last_name
字段的值为 刘
。
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 2 | 德华 | 刘 | 2024-05-23 10:38:39 |
| 5 | 青云 | 刘 | 2024-05-23 10:54:57 |
| 18 | 亦菲 | 刘 | 2024-05-23 11:13:27 |
+----------+------------+-----------+---------------------+
3 rows in set (0.03 sec)
使用 AND 组合多个条件查询
以下查询使用 WHERE
子句查找姓为 周
名为星驰
的所有演员:
SELECT
*
FROM
actor
WHERE
last_name = '周' AND first_name = '星驰';
在这个语句中,查询条件 last_name = '周' AND first_name = '星驰'
的意思是过滤表中 last_name
字段的值为 周
,并且 first_name
字段的值为 星驰
的所有记录行。
last_name = '周'
是一个条件,first_name = '星驰'
也是一个条件,AND 将两者组合在一起,意思是查询的记录行要同时满足这两个条件。
AND 两边的条件表达式,必须两个表达式都返回了 TRUE,整个表达式的结果才是 TRUE
。
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 1 | 星驰 | 周 | 2024-05-23 10:38:29 |
+----------+------------+-----------+---------------------+
使用 OR 组合多个查询条件
以下查询使用 WHERE 子句查找姓为 周
或 刘
的所有演员:
SELECT
*
FROM
actor
WHERE
last_name = '周' OR last_name = '刘';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 2 | 德华 | 刘 | 2024-05-23 10:38:39 |
| 5 | 青云 | 刘 | 2024-05-23 10:54:57 |
| 18 | 亦菲 | 刘 | 2024-05-23 11:13:27 |
| 1 | 星驰 | 周 | 2024-05-23 10:38:29 |
| 16 | 润发 | 周 | 2024-05-23 10:58:35 |
+----------+------------+-----------+---------------------+
在这个语句中,查询条件 last_name = '周' OR last_name = '刘'
代表了表中记录行的last_name
字段的记录值等于 周
或者 刘
。
OR 两边的条件表达式,只要一个表达式返回了 TRUE,整个表达式的结果就是 TRUE。
比较运算符
在上面的几个例子中,我们只使用了一种比较运算符 = 。 比较运算符 = 的作用是比较运算符两边的操作数(字段或表达式或值)是否相等。
MySQL 提供了很多比较运算符以满足各种不同比较需求。下表列出了可用于 WHERE 子句中的比较运算符。
注意: 在 SQL 中,比较两个值是否相等的运算符是 =
,而不是 ==
。这与一些常见的编程语言并不相同。
结论
- SELECT 语句中使用
WHERE
子句进行条件查询。 - WHERE 子句可以使用多种比较运算符。
- WHERE 子句可以使用
AND, OR, NOT
组合多种条件。 - WHERE 子句还可以用在
UPDATE 和 DELETE
语句中。