MySQL-具有AND,OR和NOT运算符的WHERE子句

时间:2020-02-23 14:41:04  来源:igfitidea点击:

在本教程中,我们将学习在MySQL中使用带AND,OR和NOT运算符的where子句从表中选择数据。

使用WHERE和AND运算符进行选择

仅当所有条件为TRUE时,我们才将AND运算符与WHERE子句一起使用以获取结果。

语法:

SELECT * FROM table_name
WHERE condition1
AND condition2;

对于上面的查询,我们将仅获取" condition1"和" condition2"均为TRUE的那些行。

在下面的示例中,我们将提取满足以下所有条件的所有员工。

  • 得分> 5的员工
  • 以及在" 1900-05-01"或者之后出生的员工
mysql> SELECT * FROM employee
WHERE score > 5
AND birthday >= '1900-05-01';
+------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email               | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+
| e03        | Jane      | Doe      | [email protected] |     9 | 1900-05-20 | 2016-01-01 01:01:04 | 2016-01-01 01:01:04 |
| e04        | Tin       | Tin      | [email protected]  |     7 | 1900-10-20 | 2016-01-01 01:02:03 | 2016-01-01 01:02:03 |
+------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+
2 rows in set (0.00 sec)

使用WHERE和OR运算符进行选择

如果任何条件为TRUE,我们将OR运算符与WHERE子句一起使用以获取结果。

语法:

SELECT * FROM table_name
WHERE condition1
OR condition2;

对于上述查询,我们将获取" condition1"或者" condition2"为TRUE的所有行。

在以下示例中,我们将提取所有满足给定条件中的任何一个的员工。

  • 得分> 5的员工
  • 或者在" 1900-05-01"之后出生的员工
mysql> SELECT * FROM employee
WHERE score > 5
OR birthday >= '1900-05-01';
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e01        |      |   | @example.com    |     6 | 1900-01-01 | 2016-01-01 01:01:01 | 2016-01-01 01:01:01 |
| e02        | John      | Doe      | [email protected]  |     8 | 1900-02-03 | 2016-01-01 01:01:04 | 2016-01-01 01:01:04 |
| e03        | Jane      | Doe      | [email protected]  |     9 | 1900-05-20 | 2016-01-01 01:01:04 | 2016-01-01 01:01:04 |
| e04        | Tin       | Tin      | [email protected]   |     7 | 1900-10-20 | 2016-01-01 01:02:03 | 2016-01-01 01:02:03 |
| e05        | Bob       | Coder    | [email protected] |     5 | 1900-08-20 | 2016-01-01 01:02:10 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
5 rows in set (0.00 sec)

使用带NOT运算符的WHERE选择

仅当条件为FALSE时,才将NOT运算符与WHERE子句一起使用以获取结果。

语法:

SELECT * FROM table_name
WHERE NOT condition;

对于上述查询,我们将仅获取条件为FALSE的那些行。

在以下示例中,我们将提取所有没有姓氏为'Doe'的员工。

mysql> SELECT * FROM employee
WHERE NOT lastname = 'Doe';
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e01        |      |   | @example.com    |     6 | 1900-01-01 | 2016-01-01 01:01:01 | 2016-01-01 01:01:01 |
| e04        | Tin       | Tin      | [email protected]   |     7 | 1900-10-20 | 2016-01-01 01:02:03 | 2016-01-01 01:02:03 |
| e05        | Bob       | Coder    | [email protected] |     5 | 1900-08-20 | 2016-01-01 01:02:10 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
3 rows in set (0.00 sec)