Logische Operatoren

Logische Operatoren geben das Ergebnis einer bestimmten booleschen Operation bei einem oder zwei Eingabeausdrücken zurück. Logische Operatoren werden auch als Boolesche Operatoren bezeichnet.

Logische Operatoren können nur als Prädikat verwendet werden (zum Beispiel in der WHERE-Klausel). Eingabeausdrücke müssen Prädikate sein.

Siehe auch:

BOOLAND, BOOLNOT, BOOLOR, BOOLXOR

Liste der logischen Operatoren

Operator

Syntaxbeispiel

Beschreibung

AND

a AND b

Stimmt mit beiden Ausdrücken überein (a und b).

NOT

NOT a

Stimmt nicht mit dem Ausdruck überein.

OR

a OR b

Entspricht einem der beiden Ausdrücke.

Die Rangfolge dieser Operatoren ist unten dargestellt (vom höchsten zum niedrigsten):

  • NOT

  • AND

  • OR

Beispiele

Die folgenden Beispiele verwenden logische Operatoren:

Verwenden logischer Operatoren in Abfragen auf Tabellendaten

Erstellen Sie eine Tabelle, und fügen Sie Daten ein:

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   |
+----+----+------+

Ausführen von Abfragen, die einen einzigen logischen Operator verwenden

Verwenden eines einzigen logischen Operators in der WHERE-Klausel verschiedener Abfragen:

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 |
+----+----+------+

Rangfolge von logischen Operatoren zeigen

Die folgenden Beispiele zeigen die Rangfolge der logischen Operatoren.

Das erste Beispiel zeigt, dass AND Vorrang vor OR hat. Die Abfrage gibt die Zeilen zurück, die folgenden Bedingungen entsprechen:

  • b ist gleich Down.

OR

  • a ist gleich 8 AND b ist gleich 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 |
+----+----+------+

Sie können Klammern in der WHERE-Klausel verwenden, um die Rangfolge zu ändern. Die folgende Abfrage gibt zum Beispiel die Zeilen zurück, die folgende Bedingungen erfüllen:

  • b ist gleich Down OR a ist gleich 8.

AND

  • b ist gleich Up.

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

Das nächste Beispiel zeigt, dass NOT Vorrang vor AND hat. Die folgende Abfrage gibt zum Beispiel die Zeilen zurück, die folgende Bedingungen erfüllen:

  • a ist NOT gleich 15.

AND

  • b ist gleich Down.

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

Sie können Klammern in der WHERE-Klausel verwenden, um die Rangfolge zu ändern. Die folgende Abfrage gibt zum Beispiel die Zeilen zurück, die NOT beiden Bedingungen entsprechen:

  • a ist gleich 15.

AND

  • b ist gleich 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   |
+----+----+------+

Logische Operatoren in Abfragen auf Boolesche Werte verwenden

Erstellen Sie eine Tabelle, und fügen Sie Daten ein:

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 |
+-------+------+

Die folgende Abfrage verwendet den Operator OR, um Zeilen zurückzugeben, in denen entweder a oder b TRUE ist:

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

Die folgende Abfrage verwendet den Operator AND, um Zeilen zurückzugeben, in denen sowohl a als auch b TRUE sind:

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

Die folgende Abfrage verwendet den Operator AND und den Operator NOT, um Zeilen zurückzugeben, in denen b TRUE ist und a FALSE ist:

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

Die folgende Abfrage verwendet den Operator AND und den Operator NOT, um Zeilen zurückzugeben, in denen a TRUE ist und b FALSE ist:

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

„Wahrheitstabellen“ für die logischen Operatoren zeigen

Die nächsten Beispiele zeigen Wahrheitstabellen für die logischen Operatoren auf einer Booleschen Spalte. Weitere Informationen über das Verhalten von Booleschen Werten in Snowflake finden Sie unter Ternäre Logik.

Erstellen Sie eine neue Tabelle und Daten:

CREATE OR REPLACE TABLE logical_test3 (x BOOLEAN);

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

Dies zeigt die Wahrheitstabelle für den Operator 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 |
+-------+-------+------+------+

Dies zeigt die Wahrheitstabelle für den Operator 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  |
+-------+-------+-------+-------+