SQL逻辑运算符

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

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

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

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

注:800010000也出现在结果集中。

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逻辑运算符以及如何使用它们来测试条件。

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-logical-operators.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞