SQL AND & OR 运算符

在本教程中,您将学习如何在子句中使用AND&OR运算符,WHERE以根据多个条件过滤记录。

根据条件选择记录

在上一章中,我们学习了如何使用带有该WHERE子句的单个条件从表中获取记录。但是有时您需要根据多种条件来过滤记录,例如选择年龄大于30岁且国家/地区为美国的用户,选择价格低于100美元且评分大于4的产品,等等。

AND运算符

AND运算符是一个逻辑运算符,它将两个条件组合在一起,并且仅当两个条件的结果都为TRUE时才返回TRUE。 通常在SELECTUPDATEDELETE语句的WHERE子句中使用AND运算符来形成条件以过滤结果集。

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语句将仅从employees表中返回薪水(salary)大于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表中返回薪水(salary)大于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 |
+--------+--------------+------------+--------+---------+