MySQL中的逻辑运算符用于连接多个条件,通常用于 WHERE
、HAVING
子句,返回布尔值(TRUE
、FALSE
或 NULL
)。常见的逻辑运算符如下:
1. AND(逻辑与)
- 格式:
condition1 AND condition2
- 作用:当 所有 条件都为
TRUE
时,返回TRUE
,否则返回FALSE
。
示例
SELECT * FROM users WHERE age > 18 AND city = 'Beijing';
查找年龄大于 18 且所在城市为 “Beijing” 的用户。
逻辑表
condition1 | condition2 | condition1 AND condition2 |
---|---|---|
TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE |
FALSE | TRUE | FALSE |
FALSE | FALSE | FALSE |
NULL | TRUE | NULL |
TRUE | NULL | NULL |
NULL | NULL | NULL |
2. OR(逻辑或)
- 格式:
condition1 OR condition2
- 作用:当 至少一个 条件为
TRUE
时,返回TRUE
,否则返回FALSE
。
示例
SELECT * FROM users WHERE age < 18 OR city = 'Beijing';
查找年龄小于 18 或者所在城市为 “Beijing” 的用户。
逻辑表
condition1 | condition2 | condition1 OR condition2 |
---|---|---|
TRUE | TRUE | TRUE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
NULL | TRUE | TRUE |
TRUE | NULL | TRUE |
NULL | NULL | NULL |
3. NOT(逻辑非)
- 格式:
NOT condition
- 作用:对条件取反,
TRUE
变FALSE
,FALSE
变TRUE
。
示例
SELECT * FROM users WHERE NOT age >= 18;
查找年龄小于 18 的用户(等价于
age < 18
)。
逻辑表
condition | NOT condition |
---|---|
TRUE | FALSE |
FALSE | TRUE |
NULL | NULL |
4. XOR(逻辑异或)
- 格式:
condition1 XOR condition2
- 作用:当 两个条件不相同 时返回
TRUE
,否则返回FALSE
。
示例
SELECT * FROM users WHERE age > 18 XOR city = 'Beijing';
查找年龄大于 18 或 所在城市为 “Beijing”,但不能同时满足两个条件的用户。
逻辑表
condition1 | condition2 | condition1 XOR condition2 |
---|---|---|
TRUE | TRUE | FALSE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
NULL | TRUE | NULL |
TRUE | NULL | NULL |
NULL | NULL | NULL |
5. IS TRUE / IS FALSE / IS NULL
IS TRUE
:条件值为TRUE
时返回TRUE
,否则返回FALSE
。IS FALSE
:条件值为FALSE
时返回TRUE
,否则返回FALSE
。IS NULL
:条件值为NULL
时返回TRUE
,否则返回FALSE
。
示例
SELECT * FROM users WHERE active IS TRUE;
查找
active
字段为TRUE
的用户。
SELECT * FROM users WHERE active IS FALSE;
查找
active
字段为FALSE
的用户。
SELECT * FROM users WHERE email IS NULL;
查找
6. 组合使用
可以使用括号 ()
组合多个逻辑运算符来控制优先级。
示例
SELECT * FROM users WHERE (age > 18 AND city = 'Beijing') OR (age < 18 AND city = 'Shanghai');
查找年龄大于 18 且所在城市为 “Beijing”,或 年龄小于 18 且所在城市为 “Shanghai” 的用户。
运算符优先级
MySQL 逻辑运算符的优先级如下(从高到低):
NOT
AND
XOR
OR
示例
SELECT * FROM users WHERE NOT age > 18 AND city = 'Beijing';
等价于:
SELECT * FROM users WHERE (NOT age > 18) AND city = 'Beijing';
如果不使用括号,NOT
优先级高于 AND
,因此 NOT age > 18
先计算。
总结
运算符 | 说明 | 示例 |
---|---|---|
AND | 逻辑与,所有条件为 TRUE 才返回 TRUE | age > 18 AND city = 'Beijing' |
OR | 逻辑或,至少一个条件为 TRUE 就返回 TRUE | age < 18 OR city = 'Beijing' |
NOT | 逻辑非,取反 | NOT age > 18 |
XOR | 逻辑异或,两个条件不同返回 TRUE | age > 18 XOR city = 'Beijing' |
IS TRUE | 判断值是否 TRUE | active IS TRUE |
IS FALSE | 判断值是否 FALSE | active IS FALSE |
IS NULL | 判断值是否 NULL | email IS NULL |
这些逻辑运算符可以用于 SQL 查询、数据筛选、权限控制等各种场景,提高查询的灵活性和准确性。