MYSQL过滤数据(四)AND | OR

MySQL AND运算符简介

AND运算符是组合两个或多个布尔表达式的逻辑运算符,并且只有在两个表达式都为true时才返回true。如果两个表达式中的任何一个值为false,AND运算符将返回false。

WHERE boolean_expression_1 AND boolean_expression_2

下面表格介绍AND运算符的结果。

  TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL

AND运算符通常用于SELECT,UPDATE,DELETE语句的WHERE子句中,以形成过滤结果集的条件。AND运算符也用于inner join或left join子句的连接条件。


MySQL AND运算符示例

我们使用示例数据库中的customers表进行测试。

MySQL AND运算符示例

以下语句查询位于USA和CA的客户。我们在WHERE子句中使用AND运算符。

SELECT customername,
         country,
         state
FROM customers
WHERE country = 'USA'
        AND state = 'CA';

使用AND运算符可以组合多个布尔表达式。例如,以下查询获取位于美国CA州且信用额度(creditlimit)大于100K的客户。

SELECT   customername,
         country,
         state,
         creditlimit
FROM customers
WHERE country = 'USA'
        AND state = 'CA'
        AND creditlimit > 100000;


MySQL OR运算符简介

MySQL OR运算符连接两个或多个布尔表达式。当其中任何一个表达式为true时,它将返回true。

下面是OR运算符的语法:

boolean_expression_1 OR boolean_expression_2

boolean_expression_1 or boolean_expression_2 这个表达式有可能返回true或false。

下表显示了OR运算符的结果。

  TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL

 

运算符优先级

当您在语句中使用多个逻辑运算符时,如and 和or运算符,MySQL是先计算 AND 运算符,再计算OR运算符。这就是所谓的运算符优先级。

运算符优先级确定运算符的求值顺序。MySQL首先计算具有较高优先级的运算符。

请参阅以下示例。

SELECT true OR false AND false;

 结果如下:

true OR false AND false
-----------------------
1

执行顺序如下:

  1. 首先,MySQL计算AND运算符,这是,false AND false返回false。
  2. 第二,MySQL计算OR运算符,这是,true OR false返回true。

要更改计算的顺序,请使用括号,例如:

SELECT (true OR false) AND false;

 结果如下:

(true OR false) AND false
-------------------------
0

执行顺序如下:

  1. 首先,MySQL计算圆括号中的表达式(true OR false)返回true
  2. 第二,MySQL计算剩余语句部分,true AND false返回false。

MySQL OR运算符示例

我们使用示例数据库中的customers表进行测试。

MySQL OR运算符使用实例优先级介绍

例如,要获取位于美国和法国的客户,请在WHERE子句中使用OR运算符,如下所示:

SELECT 
    customername, country
FROM
    customers
WHERE
    country = 'USA' OR country = 'France';

结果如图所示:


以下语句获取位于美国或法国并且信用额度(creditlimit)大于10000的客户。

SELECT 
    customername, country, creditLimit
FROM
    customers
WHERE
    (country = 'USA' OR country = 'France')
        AND creditlimit > 100000;

结果如图所示:


请注意,如果不使用括号,查询将返回美国的客户或信用额度(creditlimit)大于10000的法国的客户。

SELECT
    customername, country, creditLimit
FROM
    customers
WHERE
    country = 'USA' OR country = 'France' AND creditlimit > 100000;

结果如图所示:



猜你喜欢

转载自blog.csdn.net/q343509740/article/details/80600043