SQL AND 和 OR 运算符
在本教程中,你将学习如何使用 AND
& OR
操作符,它们跟 WHERE
子句一起来根据多个条件过滤记录。
根据条件选择记录
在上一章中,我们学习了如何使用带有 WHERE
子句的单个条件从表中获取记录。但有时你需要根据多种条件过滤记录,例如选择年龄大于 30 且国家为美国的用户,选择价格低于 100 美元且评级大于 4 的产品等。
AND
运算符
AND
操作是结合两个条件,并返回一个逻辑运算符 TRUE
只有在两个条件评估为 TRUE
。该 AND
运算符往往跟 SELECT
, UPDATE
或 DELETE
语句中的 WHERE
一起使用,来形成条件来筛选结果集。
SELECT column1_name, column2_name, columnN_nameFROM table_nameWHERE condition1 AND condition2;
让我们看一些示例来说明它是如何工作的。
假设我们在数据库中有一个名为 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
子句和 AND
操作符
以下 SQL 语句将仅返回 employee 表中工资大于 7000 且 dept_id 等于 5 的那些雇员。
SELECT * FROM employees
WHERE salary > 7000 AND dept_id = 5;
执行后,你将获得如下输出:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
+--------+--------------+------------+--------+---------+
OR
运算符
类似地, OR
运算符也是一个逻辑运算符,它结合了两个条件,但它 TRUE
在任何一个条件时返回 TRUE
。
以下 SQL 语句将返回 employees 表中的所有雇员,其雇员表的薪水大于 7000 或 dept_id 等于 5。
SELECT * FROM employees
WHERE salary > 7000 OR dept_id = 5;
这次你会得到这样的输出:
+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+
结合 AND
与 OR
运算符
你还可以组合 AND
并 OR
创建复杂的条件表达式。
以下 SQL 语句将返回薪水大于 5000 且 dept_id 等于 1 或 5 的所有员工。
SELECT * FROM employees
WHERE salary > 5000 AND (dept_id = 1 OR dept_id = 5);
执行上述查询后,你将获得如下输出:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
| 2 | Tony Montana | 2002-07-15 | 6500 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
+--------+--------------+------------+--------+---------+