MySQL WHERE 子句(附带实例)
                           
天天向上
发布: 2025-02-18 00:20:14

原创
178 人浏览过

在 MySQL 中,WHERE 子句用于过滤查询结果,只返回满足特定条件的记录。它通常与 SELECTUPDATEDELETE 等语句一起使用。

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 的用户的 usernameemail

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 的用户的 usernameemail

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' 的用户的 usernameemail

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)的所有用户的 usernameage

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 的用户的 usernameemail

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 NULLIS NOT NULL 检查空值

IS NULL 用于检查某个字段是否为 NULLIS NOT NULL 用于检查字段是否不是 NULL

基本语法

SELECT column1, column2, ...
FROM table_name
WHERE column_name IS NULL;

实例:查询 emailNULL 的记录

SELECT username
FROM users
WHERE email IS NULL;
  • 这个查询返回 emailNULL 的所有用户的 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 子句是用来过滤查询结果的强大工具。常用的条件操作符和关键字包括:

  1. =:等于。
  2. ANDOR:连接多个条件。
  3. BETWEEN:范围查询。
  4. IN:多值匹配。
  5. LIKE:模糊匹配。
  6. IS NULLIS NOT NULL:检查空值。
  7. EXISTS:子查询是否返回记录。
  8. NOT:否定条件。

通过这些条件,你可以灵活地从数据库中筛选出满足特定需求的数据。

发表回复 0

Your email address will not be published. Required fields are marked *