MySQL AND 运算符的用法
本文介绍了 MySQL 中如何在 WHERE 子句中使用 AND 运算符组合多个查询条件过滤查询数据。
当使用 SELECT
查询数据时,如果 WHERE
子句中有多个条件,可以根据需要使用 AND
, OR
, 或者 NOT
运算符将他们组合起来。本文主要介绍 AND
运算符。
AND 运算规则
AND
运算符是一个双目逻辑运算符,用来组合两个操作数。只有当两个操作数都为真时,结果才返回真,否则返回假或者 NULL
。
AND
运算符语法:
a AND b
其中,a
和 b
是 AND
的两个操作数,可以是表达式,也可以是值。
不像一些编程语言,MySQL 中没有布尔类型,AND
的运算结果是 1
, 0
, 或着 NULL
。
AND
运算符的运算规则如下:
-
如果两个操作数都不为
0
(FALSE
) 并且不为NULL
时,则AND
运算的结果为1
。SELECT 1 AND 1, 1 AND 2;
+---------+---------+ | 1 AND 1 | 1 AND 2 | +---------+---------+ | 1 | 1 | +---------+---------+
-
如果有一个操作数为
0
(FALSE
),则AND
运算的结果为0
。SELECT 0 AND 0, 0 AND 1, 0 AND 2, 0 AND NULL;
+---------+---------+---------+------------+ | 0 AND 0 | 0 AND 1 | 0 AND 2 | 0 AND NULL | +---------+---------+---------+------------+ | 0 | 0 | 0 | 0 | +---------+---------+---------+------------+
-
如果两个操作数中有一个为
NULL
,且另一个不为0
(FALSE
),则返回NULL
。SELECT 1 AND NULL, 2 AND NULL, NULL AND NULL;
+------------+------------+---------------+ | 1 AND NULL | 2 AND NULL | NULL AND NULL | +------------+------------+---------------+ | NULL | NULL | NULL | +------------+------------+---------------+
-
两个操作数的前后顺序不影响
AND
操作符的运算结果。SELECT 1 AND 0, 0 AND 1, 1 AND NULL, NULL AND 1;
+---------+---------+------------+------------+ | 1 AND 0 | 0 AND 1 | 1 AND NULL | NULL AND 1 | +---------+---------+------------+------------+ | 0 | 0 | NULL | NULL | +---------+---------+------------+------------+
下表总结了 AND
运算符对不同操作数的运算结果:
1 |
0 |
NULL |
|
---|---|---|---|
1 |
0 |
0 |
NULL |
0 |
0 |
0 |
0 |
NULL |
NULL |
0 |
NULL |
WHERE 子句中的 AND
在 WHERE
子句中, AND
连接两个比较条件。一般的形式如下:
column_name1 = value1 AND column_name2 = value2
WHERE
子句中的 AND
过滤那些同时满足两个比较条件的记录行。
也就是说,如果数据表中的记录行,必须同时满足字段 column_name1
的值为 value1
和 column_name2
的值为 value2
两个条件,才是符合条件的记录行。
AND 运算符实例
在以下实例中,我们使用 Sakila 示例数据库中的 actor
表作为演示。
以下 SQL 语句在 actor
表中查找姓为 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
将两者组合在一起,意思是查询的记录行要同时满足这两个条件。
+----------+------------+-----------+---------------------+
| 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 |
+----------+------------+-----------+---------------------+
我们还可以查询 actor
表中姓氏为 DAVIS
且 actor_id
小于 100 的演员信息:
SELECT
*
FROM
actor
WHERE
last_name = 'DAVIS' AND actor_id < 100;
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 4 | JENNIFER | DAVIS | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
结论
本文通过实例介绍了 MySQL 中 AND
运算符的语法和用法。 AND
运算符的用法要点如下:
AND
是双目运算符,需要两个布尔操作数。- 如果两个操作数都不为
0
(FALSE
) 并且不为NULL
时,则AND
运算的结果为1
。 - 如果有一个操作数为
0
(FALSE
),则AND
运算的结果为0
。 - 如果两个操作数中有一个为
NULL
,且另一个不为0
(FALSE
),则返回NULL
。 - 两个操作数的前后顺序不影响
AND
操作符的运算结果。 WHERE
子句中的AND
连接两个比较条件,过滤那些同时满足两个比较条件的记录行。