SQL语句中WHERE子句的运算符使用情况
以下是完整汇总表,包含所有SQL语句中WHERE子句的运算符使用情况:
WHERE子句比较运算符分类表
类别 | 运算符 | 说明 | 示例 | 注意事项 |
|---|
基础比较 | =
| 等于 | WHERE id = 100
| NULL需用IS NULL |
| <>/!=
| 不等于 | WHERE status <> 0
|
|
| >
| 大于 | WHERE age > 18
|
|
| <
| 小于 | WHERE score < 60
|
|
| >=
| 大于等于 | WHERE price >= 100
|
|
| <=
| 小于等于 | WHERE date <= '2025-08-10'
|
|
特殊比较 | <=>
| NULL安全等于 | WHERE col <=> NULL
| 可比较NULL值 |
| IS NULL
| 是NULL值 | WHERE phone IS NULL
|
|
| IS NOT NULL
| 非NULL值 | WHERE email IS NOT NULL
|
|
| IS TRUE
| 布尔真值 | WHERE flag IS TRUE
|
|
| IS FALSE
| 布尔假值 | WHERE active IS FALSE
|
|
范围比较 | BETWEEN
| 区间包含 | WHERE age BETWEEN 20 AND 30
| 闭区间 |
| NOT BETWEEN
| 区间排除 | WHERE id NOT BETWEEN 100 AND 200
|
|
| IN
| 值列表匹配 | WHERE dept IN (1,3,5)
|
|
| NOT IN
| 值列表排除 | WHERE status NOT IN (0,9)
|
|
字符串处理 | LIKE
| 模式匹配 | WHERE name LIKE '张%'
| %匹配任意字符
|
| NOT LIKE
| 反向匹配 | WHERE email NOT LIKE '%@test.com'
|
|
| REGEXP
| 正则匹配 | WHERE title REGEXP '^[A-Z]'
|
|
| SOUNDS LIKE
| 发音相似 | WHERE name SOUNDS LIKE 'John'
| 仅英文 |
JSON处理 | ->
| JSON路径提取 | WHERE json_col->'$.name'
| 返回带引号值 |
| ->>
| JSON裸值提取 | WHERE json_col->>'$.age' > 20
|
|
空间数据 | MBRContains()
| 几何包含 | WHERE MBRContains(polygon, point)
|
|
| ST_Within()
| 精确空间包含 | WHERE ST_Within(point, polygon)
|
|
子查询 | EXISTS
| 存在性判断 | WHERE EXISTS (subquery)
|
|
| ANY/SOME
| 任意满足 | WHERE salary > ANY (subquery)
|
|
| ALL
| 全部满足 | WHERE score >= ALL (subquery)
|
|
位运算 | &
| 按位与 | WHERE flags & 1 = 1
|
|
| ` | ` | 按位或 | `WHERE permissions |
全文检索 | MATCH() AGAINST()
| 全文搜索 | WHERE MATCH(content) AGAINST('keyword')
| 需建全文索引 |
MySQL的增删改查四种语句的WHERE子句运算符适用性对照表
| 语句类型 | WHERE子句位置 | 运算符可用性说明 | 典型应用场景示例 |
|---|
| SELECT | 直接使用 | ⭐️ 所有运算符均可使用 | SELECT * FROM users WHERE age > 18 AND name LIKE '张%' |
| DELETE | 直接使用 | ⭐️ 所有运算符均可使用 | DELETE FROM logs WHERE create_time < '2025-01-01' |
| UPDATE | 直接使用 | ⭐️ 所有运算符均可使用 | UPDATE products SET stock=0 WHERE status='discontinued' |
| 标准INSERT | ❌ 无WHERE子句 | ➖ 不适用 | INSERT INTO users VALUES (1, '张三') |
| INSERT...SELECT | 嵌套SELECT语句中使用 | ⭐️ 所有运算符可在嵌套SELECT的WHERE中使用 | INSERT INTO vip_users SELECT * FROM users WHERE score >= 90 |
跨语句通用运算符示例
-- 1. 比较运算符通用示例
UPDATE employees SET salary=8000 WHERE dept_id = 10;
DELETE FROM temp_data WHERE timestamp <= NOW() - INTERVAL 7 DAY;
-- 2. 范围运算符通用示例
SELECT * FROM orders WHERE amount BETWEEN 100 AND 500;
DELETE FROM sessions WHERE last_activity NOT BETWEEN '2025-08-01' AND '2025-08-10';
-- 3. 空值判断通用示例
UPDATE contacts SET flag=1 WHERE mobile IS NOT NULL;
SELECT * FROM applications WHERE attachment_url IS NULL;
-- 4. 模式匹配通用示例
DELETE FROM spam_messages WHERE content LIKE '%广告%';
UPDATE products SET category='other' WHERE name NOT LIKE 'A-%';
-- 5. 子查询通用示例
UPDATE inventory
SET restock_flag=1
WHERE item_id IN (SELECT item_id FROM sales WHERE qty > 100);
DELETE FROM user_devices
WHERE user_id = ANY (SELECT id FROM users WHERE banned=1);
注意事项
性能影响:DELETE/UPDATE中的WHERE条件应特别关注索引使用情况
安全风险:生产环境执行DELETE/UPDATE前建议先用SELECT验证条件
事务控制:修改语句建议在事务中执行(BEGIN...COMMIT)
语法差异:部分高级运算符(如JSON操作符)需MySQL 5.7+版本支持
所有WHERE子句运算符在SELECT/DELETE/UPDATE和INSERT...SELECT中的行为完全一致,这是SQL标准的核心特性之一。
以下是完整汇总表,包含所有SQL语句中WHERE子句的运算符使用情况:
MySQL WHERE子句运算符适用性对照表
语句类型 WHERE子句位置 运算符可用性说明 典型应用场景示例
SELECT 直接使用 ⭐️ 所有运算符均可使用 SELECT * FROM users WHERE age > 18 AND name LIKE '张%'
DELETE 直接使用 ⭐️ 所有运算符均可使用 DELETE FROM logs WHERE create_time < '2025-01-01'
UPDATE 直接使用 ⭐️ 所有运算符均可使用 UPDATE products SET stock=0 WHERE status='discontinued'
标准INSERT ❌ 无WHERE子句 ➖ 不适用 INSERT INTO users VALUES (1, '张三')
INSERT...SELECT 嵌套SELECT语句中使用 ⭐️ 所有运算符可在嵌套SELECT的WHERE中使用 INSERT INTO vip_users SELECT * FROM users WHERE score >= 90
跨语句通用运算符示例
sql
Copy Code
-- 1. 比较运算符通用示例
UPDATE employees SET salary=8000 WHERE dept_id = 10;
DELETE FROM temp_data WHERE timestamp <= NOW() - INTERVAL 7 DAY;
-- 2. 范围运算符通用示例
SELECT * FROM orders WHERE amount BETWEEN 100 AND 500;
DELETE FROM sessions WHERE last_activity NOT BETWEEN '2025-08-01' AND '2025-08-10';
-- 3. 空值判断通用示例
UPDATE contacts SET flag=1 WHERE mobile IS NOT NULL;
SELECT * FROM applications WHERE attachment_url IS NULL;
-- 4. 模式匹配通用示例
DELETE FROM spam_messages WHERE content LIKE '%广告%';
UPDATE products SET category='other' WHERE name NOT LIKE 'A-%';
-- 5. 子查询通用示例
UPDATE inventory
SET restock_flag=1
WHERE item_id IN (SELECT item_id FROM sales WHERE qty > 100);
DELETE FROM user_devices
WHERE user_id = ANY (SELECT id FROM users WHERE banned=1);
注意事项
性能影响:DELETE/UPDATE中的WHERE条件应特别关注索引使用情况
安全风险:生产环境执行DELETE/UPDATE前建议先用SELECT验证条件
事务控制:修改语句建议在事务中执行(BEGIN...COMMIT)
语法差异:部分高级运算符(如JSON操作符)需MySQL 5.7+版本支持
所有WHERE子句运算符在SELECT/DELETE/UPDATE和INSERT...SELECT中的行为完全一致,这是SQL标准的核心特性之一。