数据库教程-SQL逻辑运算符

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

在本教程中,您将了解SQL逻辑运算符以及如何使用它们来测试条件是否为:true

逻辑运算符用于测试条件是否为:true。 与比较运算符类似,逻辑运算符返回值为三个:truefalseunknown的其中一个。

下表说明了SQL逻辑运算符:

编号 运算符 描述
1 ALL 如果所有比较都为真,则返回true
2 AND 如果两个表达式都为真,则返回true
3 ANY 如果任何一个比较为真,则返回true
4 BETWEEN 如果操作数在一个指定范围内,则返回true
5 EXISTS 如果子查询有结果集,则返回true
6 IN 如果操作数等于列表中的值之一,则返回true
7 LIKE 如果操作数与模式匹配,则返回true
8 NOT 反转其他布尔运算符的结果。
9 OR 如果任一表达式为真,则返回true
10 SOME 如果某些表达式为真,则返回true

1. AND运算符

AND运算符用于在SQL语句的WHERE子句中构造多个条件,例如:SELECTUPDATEDELETE语句中:

expression1 AND expression2 

如果两个表达式的计算结果为true,则AND运算符返回true。以下示例中,将查询薪水大于5000且小于7000的所有员工信息:

SELECT      first_name, last_name, salary FROM     employees WHERE     salary > 5000 AND salary < 7000 ORDER BY salary; 

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+ | first_name | last_name | salary | +------------+-----------+--------+ | Bruce      | Wong      | 6000   | | Pat        | Zhou      | 6000   | | Charles    | Yang      | 6200   | | Shanta     | Liu       | 6500   | | Susan      | Zhou      | 6500   | | Min        | Su        | 6900   | +------------+-----------+--------+ 6 rows in set 

2. OR运算符

AND运算符类似,OR运算符用于在SQL语句的WHERE子句中组合多个条件:

expression1 OR expression2 

只要有一个表达式的计算结果为true,则OR运算符返回true
例如,以下语句查找薪水为80009000的员工信息:

SELECT      first_name, last_name, salary FROM     employees WHERE     salary = 8000 OR salary = 9000 ORDER BY salary; 

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+ | first_name | last_name | salary | +------------+-----------+--------+ | Matthew    | Han       | 8000   | | Alexander  | Lee       | 9000   | | Daniel     | Chen      | 9000   | +------------+-----------+--------+ 3 rows in set 

3. IS NULL运算符

IS NULL运算符将列的值与null值进行比较,如果比较的值为null,则返回true; 否则,它返回false。 例如,以下语句查找没有电话号码的所有员工信息:

SELECT      first_name, last_name, phone_number FROM     employees WHERE     phone_number IS NULL ORDER BY first_name , last_name; 

执行上面查询语句,得到以下结果 –

+------------+-----------+--------------+ | first_name | last_name | phone_number | +------------+-----------+--------------+ | Charles    | Yang      | NULL         | | Jack       | Yang      | NULL         | | John       | Liu       | NULL         | | Jonathon   | Yang      | NULL         | | Karen      | Liu       | NULL         | | Kimberely  | Yang      | NULL         | +------------+-----------+--------------+ 6 rows in set 

4. BETWEEN运算符

BETWEEN运算符用于搜索在给定最小值和最大值范围内的值。 请注意,最小值和最大值包含在条件集合中。

例如,以下语句查找薪水在800010000之间的所有员工信息。

SELECT      first_name, last_name, salary FROM     employees WHERE     salary BETWEEN 8000 AND 10000 ORDER BY salary; 

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+ | first_name | last_name | salary | +------------+-----------+--------+ | Matthew    | Han       | 8000   | | John       | Chen      | 8200   | | Max        | Han       | 8200   | | William    | Wu        | 8300   | | Jack       | Yang      | 8400   | | Jonathon   | Yang      | 8600   | | Alexander  | Lee       | 9000   | | Daniel     | Chen      | 9000   | | Hermann    | Wu        | 10000  | +------------+-----------+--------+ 9 rows in set 

5. IN运算符

IN运算符将值与指定值列表进行比较。 如果比较值与列表中的其中一个值匹配,则IN运算符返回true; 否则返回false

以下语句查找在部门ID为19的所有员工信息。

SELECT      first_name, last_name, department_id FROM     employees WHERE     department_id IN (1 , 9) ORDER BY department_id; 

执行上面查询语句,得到以下结果 –

+------------+-----------+---------------+ | first_name | last_name | department_id | +------------+-----------+---------------+ | Jennifer   | Zhao      |             1 | | Steven     | Lee       |             9 | | Neena      | Wong      |             9 | | Lex        | Liang     |             9 | +------------+-----------+---------------+ 4 rows in set 

6. LIKE运算符

LIKE运算符使用通配符运算符将值与类似值进行比较。 SQL提供了两个与LIKE运算符一起使用的通配符:

  • 百分号(%)表示零个,一个或多个字符。
  • 下划线符号(_)表示单个字符。

以下语句查找名字以字符串Ma开头的员工信息:

SELECT      employee_id, first_name, last_name FROM     employees WHERE     first_name LIKE 'Ma%' ORDER BY first_name; 

执行上面查询语句,得到以下结果 –

+-------------+------------+-----------+ | employee_id | first_name | last_name | +-------------+------------+-----------+ |         120 | Matthew    | Han       | |         112 | Max        | Su        | |         121 | Max        | Han       | +-------------+------------+-----------+ 3 rows in set 

以下示例查找那些名字的第二个字符为i的所有员工信息:

SELECT      employee_id, first_name, last_name FROM     employees WHERE     first_name LIKE '_i%' ORDER BY first_name; 

执行上面查询语句,得到以下结果 –

+-------------+------------+-----------+ | employee_id | first_name | last_name | +-------------+------------+-----------+ |         107 | Diana      | Chen      | |         178 | Kimberely  | Yang      | |         201 | Michael    | Zhou      | |         113 | Min        | Su        | |         122 | Min        | Liu       | |         117 | Sigal      | Zhang     | |         206 | William    | Wu        | +-------------+------------+-----------+ 7 rows in set 

7. ALL运算符

ALL运算符将值与另一个值集中的所有值进行比较。 ALL运算符必须以比较运算符开头,后跟子查询。

以下是ALL运算符的语法:

comparison_operator ALL (subquery) 

以下示例查找薪水大于部门ID为8中所有员工工资的员工信息:

SELECT      first_name, last_name, salary FROM     employees WHERE     salary >= ALL (SELECT              salary         FROM             employees         WHERE             department_id = 8) ORDER BY salary DESC; 

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+ | first_name | last_name | salary | +------------+-----------+--------+ | Steven     | Lee       | 24000  | | Neena      | Wong      | 17000  | | Lex        | Liang     | 17000  | | John       | Liu       | 14000  | +------------+-----------+--------+ 4 rows in set 

8. ANY运算符

ANY运算符根据条件将值与集合中的任何值进行比较,如下所示:

comparison_operator ANY(subquery) 

ALL运算符类似,ANY运算符必须以比较运算符开头,后跟子查询。

例如,以下语句查找薪水大于每个部门平均薪水的所有员工:

SELECT      first_name, last_name, salary FROM     employees WHERE     salary > ANY(SELECT              AVG(salary)         FROM             employees         GROUP BY department_id) ORDER BY first_name , last_name; 

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+ | first_name | last_name | salary | +------------+-----------+--------+ | Alexander  | Lee       | 9000   | | Avg        | Su        | 11000  | | Bruce      | Wong      | 6000   | | Charles    | Yang      | 6200   | | Daniel     | Chen      | 9000   | ... ... | Shelley    | Wu        | 12000  | | Steven     | Lee       | 24000  | | Susan      | Zhou      | 6500   | | Valli      | Chen      | 4800   | | William    | Wu        | 8300   | +------------+-----------+--------+ 32 rows in set 

请注意,SOMEANY的别名,因此,可以互换使用它们。

9. EXISTS运算符

EXISTS运算符测试子查询是否包含任何行:

EXISTS (subquery) 

如果子查询返回一行或多行,则EXISTS的结果为true; 否则结果是false

例如,以下语句查找所有具有受抚养人的员工信息:

SELECT      first_name, last_name FROM     employees e WHERE     EXISTS( SELECT              1         FROM             dependents d         WHERE             d.employee_id = e.employee_id); 

执行上面查询语句,得到以下结果 –

+------------+-----------+ | first_name | last_name | +------------+-----------+ | Steven     | Lee       | | Neena      | Wong      | | Lex        | Liang     | | Alexander  | Lee       | | Bruce      | Wong      | | David      | Liang     | | Valli      | Chen      | | Diana      | Chen      | ... ... | Shelley    | Wu        | | William    | Wu        | +------------+-----------+ 30 rows in set 

通过上面的学习,现在,您应该了解所有SQL逻辑运算符以及如何使用它们来测试条件。

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 sql教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/24/数据库教程-sql逻辑运算符/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注