MySQL AND 运算符的用法

本文介绍了 MySQL 中如何在 WHERE 子句中使用 AND 运算符组合多个查询条件过滤查询数据。

当使用 SELECT 查询数据时,如果 WHERE 子句中有多个条件,可以根据需要使用 AND, OR, 或者 NOT 运算符将他们组合起来。本文主要介绍 AND 运算符。

AND 运算规则

AND 运算符是一个双目逻辑运算符,用来组合两个操作数。只有当两个操作数都为真时,结果才返回真,否则返回假或者 NULL

AND 运算符语法:

a AND b

其中,abAND 的两个操作数,可以是表达式,也可以是值。

不像一些编程语言,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 的值为 value1column_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 表中姓氏为 DAVISactor_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 连接两个比较条件,过滤那些同时满足两个比较条件的记录行。