问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MySQL 使用 WHERE 子句过滤数据

创作时间:
作者:
@小白创作中心

MySQL 使用 WHERE 子句过滤数据

引用
CSDN
1.
https://blog.csdn.net/Darling912/article/details/145536016

本文将详细介绍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语句中。

部分运行结果

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号