MySQL 使用 WHERE 子句过滤数据
MySQL 使用 WHERE 子句过滤数据
本文将详细介绍MySQL数据库中WHERE子句的使用方法。通过理论结合实例的方式,帮助读者理解如何使用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子句查找姓为ALLEN的所有演员:
SELECT
*
FROM
actor
WHERE
last_name = 'ALLEN'
在这个语句中查询条件last_name = 'ALLEN'的含义是表中记录行的last_name字段的值为ALLEN。
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 118 | CUBA | ALLEN | 2006-02-15 04:34:33 |
| 145 | KIM | ALLEN | 2006-02-15 04:34:33 |
| 194 | MERYL | ALLEN | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
17 rows in set (0.00 sec)
查询结果显示了actor表中姓为ALLEN的所有演员的信息,共有3条符合条件的记录。
使用AND组合多个条件查询
以下查询使用WHERE子句查找姓为DAVIS名为SUSAN的所有演员:
SELECT
*
FROM
actor
WHERE
last_name = 'DAVIS' AND first_name = 'SUSAN';
在这个语句中,查询条件last_name = 'DAVIS' AND first_name = 'SUSAN'的意思是过滤表中last_name字段的值为DAVIS,并且first_name字段的值为SUSAN的所有记录行。
last_name = 'DAVIS'是一个条件,first_name = 'SUSAN'也是一个条件,AND将两者组合在一起,意思是查询的记录行要同时满足这两个条件。
AND两边的条件表达式,必须两个表达式都返回了TRUE,整个表达式的结果才是TRUE。
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 101 | SUSAN | DAVIS | 2006-02-15 04:34:33 |
| 110 | SUSAN | DAVIS | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
从返回的结果集来看,只有2条记录满足查询条件。
使用OR组合多个查询条件
以下查询使用WHERE子句查找姓为ALLEN或DAVIS的所有演员:
SELECT
*
FROM
actor
WHERE
last_name = 'ALLEN' OR last_name = 'DAVIS';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 118 | CUBA | ALLEN | 2006-02-15 04:34:33 |
| 145 | KIM | ALLEN | 2006-02-15 04:34:33 |
| 194 | MERYL | ALLEN | 2006-02-15 04:34:33 |
| 4 | JENNIFER | DAVIS | 2006-02-15 04:34:33 |
| 101 | SUSAN | DAVIS | 2006-02-15 04:34:33 |
| 110 | SUSAN | DAVIS | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
在这个语句中,查询条件last_name = 'ALLEN' OR last_name = 'DAVIS'代表了表中记录行的last_name字段的记录值等于ALLEN或者DAVIS。
OR两边的条件表达式,只要一个表达式返回了TRUE,整个表达式的结果就是TRUE。
比较运算符
在上面的几个例子中,我们只使用了一种比较运算符=。比较运算符=的作用是比较运算符两边的操作数(字段或表达式或值)是否相等。
MySQL提供了很多比较运算符以满足各种不同比较需求。下表列出了可用于WHERE子句中的比较运算符。
比较运算符 | 说明 | 举例 |
---|---|---|
= | 等于 | age = 18 |
<> | 不等于 | age <> 18 |
!= | 不等于 | age != 18 |
> | 大于,通常用于比较数字或者日期 | age > 18 |
>= | 大于等于,通常用于比较数字或者日期 | age >= 18 |
< | 小于,通常用于比较数字或者日期 | age < 18 |
<= | 小于等于,通常用于比较数字或者日期 | age <= 18 |
IN | 判断值是否在一个集合中 | age IN (18, 19) |
NOT IN | 判断值是否不在一个集合中 | age NOT IN (18, 19) |
BETWEEN | 判断值是否介于两个数中间 | age BETWEEN 16 AND 18 |
LIKE | 模糊匹配 | name LIKE 'A%' |
IS NULL | 是否为NULL | name IS NULL |
IS NOT NULL | 是否不为NULL | name IS NOT NULL |
注意:在SQL中,比较两个值是否相等的运算符是=,而不是==。这与一些常见的编程语言并不相同。
结论
- SELECT语句中使用WHERE子句进行条件查询。
- WHERE子句可以使用多种比较运算符。
- WHERE子句可以使用AND,OR,NOT组合多种条件。
- WHERE子句还可以用在UPDATE和DELETE语句中。