逻辑运算符

逻辑运算符返回针对一个或两个输入表达式的特定布尔运算的结果。逻辑运算符也称为布尔运算符。

逻辑运算符只能用作谓词(例如,在 WHERE 子句中)。输入表达式必须是谓词。

另请参阅:

BOOLANDBOOLNOTBOOLORBOOLXOR

逻辑运算符列表

运算符

语法示例

描述

AND

a AND b

同时匹配两个表达式(ab)。

NOT

NOT a

与表达式不匹配。

OR

a OR b

匹配任一表达式。

这些运算符的优先顺序如下所示(从高到低):

  • NOT

  • AND

  • OR

示例

以下示例使用逻辑运算符:

在对表数据的查询中使用逻辑运算符

创建表并插入数据:

CREATE OR REPLACE TABLE logical_test1 (id INT, a INT, b VARCHAR);

INSERT INTO logical_test1 (id, a, b) VALUES (1, 8, 'Up');
INSERT INTO logical_test1 (id, a, b) VALUES (2, 25, 'Down');
INSERT INTO logical_test1 (id, a, b) VALUES (3, 15, 'Down');
INSERT INTO logical_test1 (id, a, b) VALUES (4, 47, 'Up');

SELECT * FROM logical_test1;
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  1 |  8 | Up   |
|  2 | 25 | Down |
|  3 | 15 | Down |
|  4 | 47 | Up   |
+----+----+------+

执行使用单个逻辑运算符的查询

在各种查询的 WHERE 子句中使用单个逻辑运算符:

SELECT *
  FROM logical_test1
  WHERE a > 20 AND
        b = 'Down';
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  2 | 25 | Down |
+----+----+------+
SELECT *
  FROM logical_test1
  WHERE a > 20 OR
        b = 'Down';
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  2 | 25 | Down |
|  3 | 15 | Down |
|  4 | 47 | Up   |
+----+----+------+
SELECT *
  FROM logical_test1
  WHERE a > 20 OR
        b = 'Up';
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  1 |  8 | Up   |
|  2 | 25 | Down |
|  4 | 47 | Up   |
+----+----+------+
SELECT *
  FROM logical_test1
  WHERE NOT a > 20;
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  1 |  8 | Up   |
|  3 | 15 | Down |
+----+----+------+

显示逻辑运算符的优先级

以下示例显示了逻辑运算符的优先级。

第一个示例表明 AND 的优先级高于 OR 的优先级。查询返回匹配这些条件的行:

  • b 等于 Down

OR

  • a 等于 8 AND b 等于 Up

SELECT *
  FROM logical_test1
  WHERE b = 'Down' OR
        a = 8 AND b = 'Up';
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  1 |  8 | Up   |
|  2 | 25 | Down |
|  3 | 15 | Down |
+----+----+------+

您可以使用 WHERE 子句中的括号来更改优先级。例如,以下查询返回匹配这些条件的行:

  • b 等于 Down OR a 等于 8

AND

  • b 等于 Up

SELECT *
  FROM logical_test1
  WHERE (b = 'Down' OR a = 8) AND b = 'Up';
Copy
+----+---+----+
| ID | A | B  |
|----+---+----|
|  1 | 8 | Up |
+----+---+----+

下一个示例表明 NOT 的优先级高于 AND 的优先级。例如,以下查询返回匹配这些条件的行:

  • a NOT 等于 15

AND

  • b 等于 Down

SELECT *
  FROM logical_test1
  WHERE NOT a = 15 AND b = 'Down';
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  2 | 25 | Down |
+----+----+------+

您可以使用 WHERE 子句中的括号来更改优先级。例如,以下查询返回的行 NOT 匹配这两个条件:

  • a 等于 15

AND

  • b 等于 Down

SELECT *
  FROM logical_test1
  WHERE NOT (a = 15 AND b = 'Down');
Copy
+----+----+------+
| ID |  A | B    |
|----+----+------|
|  1 |  8 | Up   |
|  2 | 25 | Down |
|  4 | 47 | Up   |
+----+----+------+

在对布尔值的查询中使用逻辑运算符

创建表并插入数据:

CREATE OR REPLACE TABLE logical_test2 (a BOOLEAN, b BOOLEAN);

INSERT INTO logical_test2 VALUES (0, 1);

SELECT * FROM logical_test2;
Copy
+-------+------+
| A     | B    |
|-------+------|
| False | True |
+-------+------+

以下查询使用 OR 运算符返回 ab 为 TRUE 的行:

SELECT a, b FROM logical_test2 WHERE a OR b;
Copy
+-------+------+
| A     | B    |
|-------+------|
| False | True |
+-------+------+

以下查询使用 AND 运算符返回 ab 都是 TRUE 的行:

SELECT a, b FROM logical_test2 WHERE a AND b;
Copy
+---+---+
| A | B |
|---+---|
+---+---+

以下查询使用 AND 运算符和 NOT 运算符返回 b 为 TRUE、a 为 FALSE 的行:

SELECT a, b FROM logical_test2 WHERE b AND NOT a;
Copy
+-------+------+
| A     | B    |
|-------+------|
| False | True |
+-------+------+

以下查询使用 AND 运算符和 NOT 运算符返回 a 为 TRUE、b 为 FALSE 的行:

SELECT a, b FROM logical_test2 WHERE a AND NOT b;
Copy
+---+---+
| A | B |
|---+---|
+---+---+

显示逻辑运算符的“真值表”

接下来的几个示例显示了布尔列中逻辑运算符的“真值表”。有关 Snowflake 中布尔值行为的详细信息,请参阅 三元逻辑

创建新表和数据:

CREATE OR REPLACE TABLE logical_test3 (x BOOLEAN);

INSERT INTO logical_test3 (x) VALUES
  (False),
  (True),
  (NULL);
Copy

此示例显示了 OR 运算符的真值表:

SELECT x AS "OR",
       x OR False AS "FALSE",
       x OR True AS "TRUE",
       x OR NULL AS "NULL"
  FROM logical_test3;
Copy
+-------+-------+------+------+
| OR    | FALSE | TRUE | NULL |
|-------+-------+------+------|
| False | False | True | NULL |
| True  | True  | True | True |
| NULL  | NULL  | True | NULL |
+-------+-------+------+------+

此示例显示了 AND 运算符的真值表:

SELECT x AS "AND",
       x AND False AS "FALSE",
       x AND True AS "TRUE",
       x AND NULL AS "NULL"
  FROM logical_test3;
Copy
+-------+-------+-------+-------+
| AND   | FALSE | TRUE  | NULL  |
|-------+-------+-------+-------|
| False | False | False | False |
| True  | False | True  | NULL  |
| NULL  | False | NULL  | NULL  |
+-------+-------+-------+-------+
语言: 中文