本教程将引导你学习如何使用 SQL 中的 WHERE 子句来过滤数据,只选择满足特定条件的行。 我们将学习比较运算符、逻辑运算符(ANDORNOT),以及如何使用 WHERE 子句构建复杂的过滤条件。

WHERE 子句简介

WHERE 子句是 SQL 中一个强大的工具,它允许你根据指定的条件从表中检索特定的行。 想象一下,你有一张包含所有客户信息的表格,但你只想查找居住在某个特定城市的客户。 这就是 WHERE 子句发挥作用的地方。

基本语法

WHERE 子句的基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • SELECT column1, column2, ...: 指定要检索的列。 你可以使用 * 选择所有列。

  • FROM table_name: 指定要从中检索数据的表。

  • WHERE condition: 指定过滤数据的条件。 只有满足此条件的行才会被返回。

🪧 Beginner Tips: 记住,WHERE 子句始终跟在 FROM 子句之后。

比较运算符

WHERE 子句使用比较运算符来比较值。 以下是一些常用的比较运算符:

运算符

描述

=

等于

>

大于

<

小于

>=

大于或等于

<=

小于或等于

<>

!=

不等于

示例:

假设我们有一个名为 employees 的表,其中包含员工的信息,包括 employee_idnamedepartmentsalary

  1. 查找薪水等于 60000 的员工:

SELECT *
FROM employees
WHERE salary = 60000;
  1. 查找薪水大于 75000 的员工:

SELECT name, salary
FROM employees
WHERE salary > 75000;
  1. 查找部门不是 'Sales' 的员工:

SELECT name, department
FROM employees
WHERE department <> 'Sales';

🪧 Beginner Tips: 字符串值(例如部门名称)在 WHERE 子句中需要用单引号括起来。

逻辑运算符

逻辑运算符允许你组合多个条件,以创建更复杂的过滤器。 以下是常用的逻辑运算符:

运算符

描述

AND

如果所有条件都为真,则返回真

OR

如果任何一个条件为真,则返回真

NOT

反转条件的真/假值

示例:

  1. 查找部门为 'Marketing' 且薪水大于 50000 的员工:

SELECT name, department, salary
FROM employees
WHERE department = 'Marketing' AND salary > 50000;
  1. 查找部门为 'Sales' 或 'Marketing' 的员工:

SELECT name, department
FROM employees
WHERE department = 'Sales' OR department = 'Marketing';
  1. 查找部门不是 'Sales' 且薪水小于等于 60000 的员工:

SELECT name, department, salary
FROM employees
WHERE NOT department = 'Sales' AND salary <= 60000;

🪧 Beginner Tips: 使用括号可以明确逻辑运算符的优先级。 例如,WHERE (department = 'Sales' OR department = 'Marketing') AND salary > 50000 确保首先评估部门条件。

数据类型过滤

WHERE 子句可以用于各种数据类型,包括数字、字符串、日期等。

数字:

我们已经在上面的示例中看到了数字的过滤。

字符串:

除了使用 =<> 之外,你还可以使用 LIKE 运算符进行模式匹配。

  • %:代表零个或多个字符

  • _:代表一个字符

示例:

  1. 查找名字以 'A' 开头的员工:

SELECT name
FROM employees
WHERE name LIKE 'A%';
  1. 查找名字中包含 'son' 的员工:

SELECT name
FROM employees
WHERE name LIKE '%son%';

日期:

你可以使用比较运算符来过滤特定日期范围的数据。

示例:

假设 employees 表格包含一个 hire_date 列。

  1. 查找 2023 年之后入职的员工:

SELECT name, hire_date
FROM employees
WHERE hire_date > '2023-12-31';

🪧 Beginner Tips: 日期格式可能因数据库系统而异。 请查阅你的数据库文档以了解正确的日期格式。

其他有用的运算符

除了比较运算符和逻辑运算符之外,还有一些其他有用的运算符可以在 WHERE 子句中使用:

  • BETWEEN: 用于指定一个范围。

  • IN: 用于指定一组值。

  • IS NULL: 用于检查空值。

  • IS NOT NULL: 用于检查非空值。

示例:

  1. 查找薪水在 50000 到 70000 之间的员工:

SELECT name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 70000;
  1. 查找部门是 'Sales'、'Marketing' 或 'HR' 的员工:

SELECT name, department
FROM employees
WHERE department IN ('Sales', 'Marketing', 'HR');
  1. 查找 phone_number 为空的员工:

SELECT name, phone_number
FROM employees
WHERE phone_number IS NULL;

🪧 Beginner Tips: NULL 代表缺失值或未知值。 你不能使用 = 运算符来检查 NULL 值。 必须使用 IS NULLIS NOT NULL

最佳实践和性能优化

  • 索引: 在经常用于 WHERE 子句中的列上创建索引可以显著提高查询性能。 索引允许数据库更快地找到匹配的行,而无需扫描整个表。

  • 避免在 WHERE 子句中使用函数:WHERE 子句中使用函数(例如 UPPER()LOWER())可能会导致数据库无法使用索引,从而降低查询性能。

  • 编写清晰简洁的 WHERE 子句: 复杂的 WHERE 子句可能会难以理解和维护。 尽量保持 WHERE 子句简洁明了。

  • 数据类型匹配: 确保在 WHERE 子句中比较的值的数据类型与列的数据类型匹配。 例如,将数字与字符串进行比较可能会导致意外的结果或错误。

总结

WHERE 子句是 SQL 中一个必不可少的工具,它允许你根据指定的条件过滤数据。 通过理解比较运算符、逻辑运算符和其他有用的运算符,你可以构建复杂的 WHERE 子句来检索你需要的数据。 记住,最佳实践和性能优化对于编写高效的 SQL 查询至关重要。 希望本教程能帮助你掌握 WHERE 子句的使用!