• 如何使用SQL OR运算符组合两个布尔表达式


    在本教程中,您将学习如何使用SQL OR运算符组合两个布尔表达式。

    1. SQL OR运算符简介

    SQL OR是一个逻辑运算符,它组合两个布尔表达式。 SQL OR运算符计算结果返回truefalse,具体取决于表达式的结果。

    OR运算符通常用于在SELECTUPDATEDELETE语句的WHERE子句中,以形成灵活的条件。

    以下说明了SQL OR运算符的语法:

    SELECT
        column1,
        column2,
            ...
    FROM
        table1
    WHERE
        expression1
    OR expression2;
    

    下表显示了比较truefalseNULL值时OR运算符的结果。

     TRUEFALSENULL
    TRUE TRUE TRUE TRUE
    FALSE TRUE FALSE NULL
    NULL TRUE NULL NULL

    请注意,如果任一表达式为true,则OR运算符始终返回true

    如果数据库系统支持短路功能,则只要一个表达式为真,OR运算符就会停止评估条件的其余部分。更多教程请访问http://www.manongzj.com

    注意,短路功能可以帮助数据库系统通过在确定结果后立即中止处理逻辑表达式的剩余部分来节省CPU计算。 有关短路功能的更多信息,请查看SQL AND运算符教程。

    OR运算符与AND运算符一起使用时,数据库系统会在AND运算符之后计算OR运算符。 它叫作优先规则。 但是,可以使用括号更改评估顺序。

    2. SQL OR运算符示例

    我们将使用示例数据库中的employees表来演示OR运算符。

    mysql> DESC employees;
    +---------------+--------------+------+-----+---------+----------------+
    | Field         | Type         | Null | Key | Default | Extra          |
    +---------------+--------------+------+-----+---------+----------------+
    | employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
    | first_name    | varchar(20)  | YES  |     | NULL    |                |
    | last_name     | varchar(25)  | NO   |     | NULL    |                |
    | email         | varchar(100) | NO   |     | NULL    |                |
    | phone_number  | varchar(20)  | YES  |     | NULL    |                |
    | hire_date     | date         | NO   |     | NULL    |                |
    | job_id        | int(11)      | NO   | MUL | NULL    |                |
    | salary        | decimal(8,2) | NO   |     | NULL    |                |
    | manager_id    | int(11)      | YES  | MUL | NULL    |                |
    | department_id | int(11)      | YES  | MUL | NULL    |                |
    +---------------+--------------+------+-----+---------+----------------+
    10 rows in set
    

    以下声明查找了1997年或1998年加入公司的所有员工。

    SELECT
        first_name, last_name, hire_date
    FROM
        employees
    WHERE
        YEAR (hire_date) = 1997 OR YEAR (hire_date) = 1998
    ORDER BY
        first_name, last_name;
    

    执行上面示例代码,得到以下结果 -

    要查找1997年或1998年加入公司并在部门ID为3中工作的所有员工,可以使用ANDOR运算符,如下所示:

    SELECT
        first_name, last_name, hire_date, department_id
    FROM
        employees
    WHERE
        department_id = 3
    AND (
        YEAR (hire_date) = 1997
        OR YEAR (hire_date) = 1998
    )
    ORDER BY
        first_name, last_name;
    

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

    如果不使用括号,查询将检索1997年加入公司并在部门ID为3工作的员工或1998年加入公司的员工(不限部门是哪个)。

    这是因为数据库系统在AND运算符之后计算OR运算符。

    SELECT
        first_name, last_name, hire_date, department_id
    FROM
        employees
    WHERE
        department_id = 3
    AND YEAR (hire_date) = 1997
    OR YEAR (hire_date) = 1998
    ORDER BY
        first_name, last_name;
    

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

    如果查询使用许多OR运算符,则将难以阅读。 要使查询更具可读性,可以使用IN运算符

    例如,以下查询查找在1990年或1999年或2000年加入公司的所有员工。

    SELECT
        first_name,
        last_name,
        hire_date
    FROM
        employees
    WHERE
        YEAR (hire_date) = 2000
    OR YEAR (hire_date) = 1999
    OR YEAR (hire_date) = 1990;
    

    可以通过IN运算符替换OR运算符,如下所示:

    SELECT
        first_name,
        last_name,
        hire_date
    FROM
        employees
    WHERE
        YEAR (hire_date) IN (1990, 1999, 2000)
    ORDER BY
        hire_date;
    

    执行上面示例代码,得到以下结果 -

    +------------+-----------+------------+
    | first_name | last_name | hire_date  |
    +------------+-----------+------------+
    | Alexander  | Lee       | 1990-01-03 |
    | Diana      | Chen      | 1999-02-07 |
    | Kimberely  | Yang      | 1999-05-24 |
    | Karen      | Zhang     | 1999-08-10 |
    | Min        | Su        | 1999-12-07 |
    | Charles    | Yang      | 2000-01-04 |
    +------------+-----------+------------+
    6 rows in set
    

    在本教程中,您已经学习了如何使用SQL OR运算符组合两个布尔表达式以形成灵活的条件。

  • 相关阅读:
    批量修改文件的编码格式至UTF-8
    springboot搭建
    Redit集群搭建-Sentinel模式搭建
    Java并发编程:深入剖析ThreadLocal
    Hibernate常见问题 No row with the given identifier exists问题的解决办法及解决
    vector删除元素与清除内存空洞
    BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP
    Mybatis+Oracle批处理
    【日常学习】【线性DP】codevs1044 拦截导弹题解
    hdu5353 Average
  • 原文地址:https://www.cnblogs.com/myhomepages/p/15826233.html
Copyright © 2020-2023  润新知