MySQL WHERE 子句(附带实例)
在 MySQL 中,WHERE 子句用于过滤查询结果,只返回满足特定条件的记录。它通常与 SELECT、UPDATE、DELETE 等语句一起使用。
1. 基本的 WHERE 子句
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE condition;
condition:过滤记录的条件。
实例:查询特定条件的记录
假设有一个 users 表,包含 user_id, username, email, 和 age 列。以下是一个查询满足条件的记录的例子:
SELECT username, email
FROM users
WHERE user_id = 1;
- 这个查询将返回
user_id为 1 的用户的username和email。
2. 使用 AND 连接多个条件
AND 允许你在 WHERE 子句中使用多个条件,只有当所有条件都满足时,记录才会被返回。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2;
实例:查询符合多个条件的记录
SELECT username, email
FROM users
WHERE user_id = 1 AND age > 25;
- 这个查询返回
user_id为 1 且age大于 25 的用户的username和email。
3. 使用 OR 连接多个条件
OR 允许你在 WHERE 子句中使用多个条件,只要其中一个条件满足,记录就会被返回。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2;
实例:查询满足任一条件的记录
SELECT username, email
FROM users
WHERE user_id = 1 OR email = 'john@example.com';
- 这个查询将返回
user_id为 1 或email为'john@example.com'的用户的username和email。
4. 使用 BETWEEN 进行范围查询
BETWEEN 用于检查某个字段的值是否在指定的范围内(包括边界值)。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
实例:查询 age 在一定范围内的记录
SELECT username, age
FROM users
WHERE age BETWEEN 18 AND 30;
- 这个查询返回
age在 18 和 30 之间(包括 18 和 30)的所有用户的username和age。
5. 使用 IN 进行多值匹配
IN 用于检查某个字段的值是否在一组指定的值中。它等价于多个 OR 条件。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, value3, ...);
实例:查询 user_id 在指定值范围内的记录
SELECT username, email
FROM users
WHERE user_id IN (1, 2, 3);
- 这个查询返回
user_id为 1、2 或 3 的用户的username和email。
6. 使用 LIKE 进行模糊匹配
LIKE 用于进行模糊查询,可以匹配部分字符。常用的通配符有:
%:匹配零个或多个字符。_:匹配一个字符。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
实例:查询 username 中包含特定字符串的记录
SELECT username, email
FROM users
WHERE username LIKE '%john%';
- 这个查询返回
username中包含john的所有用户。%表示零个或多个字符。
实例:查询以特定字符开头的记录
SELECT username, email
FROM users
WHERE username LIKE 'john%';
- 这个查询返回所有以
john开头的username。
实例:查询 email 中包含某个字符的记录
SELECT username, email
FROM users
WHERE email LIKE '%@example.com';
- 这个查询返回
email中包含@example.com的所有用户。
7. 使用 IS NULL 或 IS NOT NULL 检查空值
IS NULL 用于检查某个字段是否为 NULL,IS NOT NULL 用于检查字段是否不是 NULL。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE column_name IS NULL;
实例:查询 email 为 NULL 的记录
SELECT username
FROM users
WHERE email IS NULL;
- 这个查询返回
email为NULL的所有用户的username。
实例:查询 email 不为 NULL 的记录
SELECT username
FROM users
WHERE email IS NOT NULL;
- 这个查询返回
email不为NULL的所有用户的username。
8. 使用 EXISTS 检查子查询是否返回记录
EXISTS 用于检查子查询是否返回至少一条记录。如果子查询返回至少一行,EXISTS 条件为 TRUE,否则为 FALSE。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE EXISTS (subquery);
实例:检查是否存在特定条件的订单
假设你有一个 users 表和一个 orders 表,orders 表中有一个 user_id 字段。你可以查询所有有订单的用户:
SELECT username
FROM users
WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.user_id);
- 这个查询返回所有至少有一条订单的用户的
username。
9. 使用 NOT 否定条件
NOT 用于否定条件,可以和其他条件操作符(如 BETWEEN, IN, LIKE 等)一起使用。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
实例:查询 age 不在某个范围内的记录
SELECT username, age
FROM users
WHERE NOT age BETWEEN 18 AND 30;
- 这个查询返回
age不在 18 和 30 之间的所有用户。
实例:查询 email 不包含特定字符串的记录
SELECT username, email
FROM users
WHERE email NOT LIKE '%@example.com';
- 这个查询返回
email不包含@example.com的所有用户。
总结
在 MySQL 中,WHERE 子句是用来过滤查询结果的强大工具。常用的条件操作符和关键字包括:
=:等于。AND、OR:连接多个条件。BETWEEN:范围查询。IN:多值匹配。LIKE:模糊匹配。IS NULL、IS NOT NULL:检查空值。EXISTS:子查询是否返回记录。NOT:否定条件。
通过这些条件,你可以灵活地从数据库中筛选出满足特定需求的数据。