SQL WHERE 子句
在本教程中,你将学习如何使用 SQL 从表中选择特定记录。
根据条件选择记录
在上一章中,我们学习了如何从表或表列中获取所有记录。但是,在现实世界中,我们通常只需要选择,更新或删除那些满足特定条件的记录,例如属于某个年龄组或国家/地区的用户等。
WHERE
子句用于 SELECT
, UPDATE
和 DELETE
。但是,你将在后续章节中看到此子句与其他语句的使用。
语法
WHERE
子句与 SELECT
语句一起使用,仅提取满足指定条件的记录。基本语法如下:
SELECT column_list FROM table_name WHERE condition ;
这里,column_list 是要获取其值的数据库表的列/字段的名称,如名称, 年龄, 国家 / 地区等。但是,如果要获取表中可用的所有列的值,可以使用以下语法:
SELECT * FROM table_name WHERE condition ;
现在,让我们看看一些示例,说明它实际上是如何工作的。
假设我们在数据库中有一个名为 employees 的表,其中包含以下记录:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 |
| 2 | Tony Montana | 2002-07-15 | 6500 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 7200 | 3 |
| 5 | Martin Blank | 2008-06-24 | 5600 | NULL |
+--------+--------------+------------+--------+---------+
使用 WHERE 子句过滤记录
以下 SQL 语句将返回 employees 表中的所有员工,其薪水大于 7000.该 WHERE
子句只是过滤掉了不需要的数据。
SELECT * FROM employees
WHERE salary > 7000;
执行后,输出将如下所示:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 7200 | 3 |
+--------+--------------+------------+--------+---------+
如你所见,输出仅包含薪水大于 7000 的员工。同样,你可以从特定列中获取记录,如下所示:
SELECT emp_id, emp_name, hire_date, salary
FROM employees
WHERE salary > 7000;
执行上面的语句后,你将获得如下输出:
+--------+--------------+------------+--------+
| emp_id | emp_name | hire_date | salary |
+--------+--------------+------------+--------+
| 3 | Sarah Connor | 2005-10-18 | 8000 |
| 4 | Rick Deckard | 2007-01-03 | 7200 |
+--------+--------------+------------+--------+
以下语句将获取员工 ID 为 2 的员工的记录。
SELECT * FROM employees
WHERE emp_id = 2;
该语句将产生以下输出:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
| 2 | Tony Montana | 2002-07-15 | 6500 | 1 |
+--------+--------------+------------+--------+---------+
这次我们在输出中只有一行,因为 emp_id 对每个员工都是唯一的。
注意: 要填充基于文本的表字段,你需要将字符串括在单引号中。但是,如果你的字符串本身包含引号,你应该用反斜杠转义它 'Let\'s go'
。数值不需要任何引号。
WHERE
条款允许的运算符
SQL 支持许多可以在 WHERE
子句中使用的不同运算符,最重要的运算符在下表中进行了总结。
操作者 | 描述 | 例 |
---|---|---|
= |
等于 | WHERE id = 2 |
> |
大于 | WHERE age > 30 |
< |
少于 | WHERE age < 18 |
>= |
大于或等于 | WHERE rating >= 4 |
<= |
小于等于 | WHERE price <= 100 |
LIKE |
简单的模式匹配 | WHERE name LIKE 'Dav' |
IN |
检查指定的值是否与列表或子查询中的任何值匹配 | WHERE country IN ('USA', 'UK') |
BETWEEN |
检查指定的值是否在值范围内 | WHERE rating BETWEEN 3 AND 5 |