SQL WHERE子句详解:基于条件筛选数据
SQL WHERE子句详解:基于条件筛选数据
SQL的WHERE子句是数据查询中非常重要的一个部分,它允许我们根据特定条件筛选数据。本文将详细介绍WHERE子句的语法、常用运算符以及在实际查询中的应用,帮助读者掌握这一核心技能。
SQL WHERE子句介绍
要从表中选出特定行,可在SELECT语句中使用WHERE子句。以下说明了SELECT语句中WHERE子句的语法:
SELECT
column1, column2, ...
FROM
table_name
WHERE
condition;
WHERE子句紧跟在FROM子句后面。WHERE子句包含一个或多个逻辑表达式,这些表达式评估表中的每一行。如果由于条件导致该行评估为真,该行将包含在结果集中;否则,该行将被排除在外。
请注意,SQL具有真值、假值和未知值的三值逻辑。这意味着,如果由于条件导致该行评估为假或空,该行将不会被返回。
请注意,WHERE子句后面的逻辑表达式也称为谓词。您可以在WHERE子句中使用各种运算符来形成行选择标准。
下表显示了SQL比较运算符:
运算符 | 含义 |
---|---|
= | 等于 |
<> (!=) | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
若要形成简单表达式,可使用上述运算符之一以及两个操作数,操作数可以为一侧的列名称,另一侧的文本值,例如:
salary > 1000
该语句提出一个问题:“薪酬是否大于1000?”。或者,您可以在运算符的两侧使用列名称,例如:
min_salary < max_salary
此表达式提出另一个问题:“最小薪酬是否小于最大薪酬?”。
您在表达式中使用的文本值可以是数字、字符、日期和时间,具体取决于所使用的格式:
- 数字:使用可以为整数或小数的数字,无需任何格式,如100、200.5
- 字符:使用用单引号或双引号引起来的字符,如“100”、“John Doe”。
- 日期:使用数据库存储的格式。该格式取决于数据库系统,如MySQL使用'yyyy-mm-dd'格式来存储日期数据。
- 时间:使用数据库系统用于存储时间时间的格式。例如,MySQL使用'HH:MM:SS'来存储时间数据。
除了SELECT语句以外,您还可以在UPDATE或DELETE语句中使用WHERE子句来指定要更新或删除的行。
SQL WHERE示例
我们将使用employees表来演示如何使用WHERE子句从表中选择数据。
具有数字比较示例的SQL WHERE子句
以下查询查找薪酬高于14,000的员工,并且根据薪酬按降序对结果集进行排序:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary > 14000
ORDER BY
salary DESC;
以下查询查找在部门ID为5中工作的员工:
SELECT
employee_id,
first_name,
last_name,
department_id
FROM
employees
WHERE
department_id = 5
ORDER BY
first_name;
具有字符示例的SQL WHERE子句
SQL不区分大小写。但是,当比较值时,它区分大小写。例如,下面的查询查找姓氏为“Chen”的员工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name = 'Chen';
但是,如果您使用“CHEN”或“chen”,则不会返回任何行。
具有日期示例的SQL WHERE子句
若要获取在“1999年1月1日”后加入公司的所有员工,请使用以下查询:
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date >= '1999-01-01'
ORDER BY
hire_date DESC;
如果您想找到1999年加入公司的员工,您可以通过多种方式:
- 使用“YEAR”函数从“hire_date”列中获取年份数据,并使用等于(=)运算符形成表达式。
- 使用“AND”运算符使用两个表达式。
- 使用“BETWEEN”运算符。
以下语句说明了第一种方法:
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) = 1999
ORDER BY
hire_date DESC;
在本教程中,我们向您展示了如何使用SQL WHERE
子句基于指定条件筛选数据。