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.
Liste der logischen Operatoren¶
Operator |
Syntaxbeispiel |
Beschreibung |
---|---|---|
|
|
Stimmt mit beiden Ausdrücken überein ( |
|
|
Stimmt nicht mit dem Ausdruck überein. |
|
|
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
Logische Operatoren in Abfragen auf Boolesche Werte verwenden
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;
+----+----+------+
| 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';
+----+----+------+
| ID | A | B |
|----+----+------|
| 2 | 25 | Down |
+----+----+------+
SELECT *
FROM logical_test1
WHERE a > 20 OR
b = 'Down';
+----+----+------+
| ID | A | B |
|----+----+------|
| 2 | 25 | Down |
| 3 | 15 | Down |
| 4 | 47 | Up |
+----+----+------+
SELECT *
FROM logical_test1
WHERE a > 20 OR
b = 'Up';
+----+----+------+
| ID | A | B |
|----+----+------|
| 1 | 8 | Up |
| 2 | 25 | Down |
| 4 | 47 | Up |
+----+----+------+
SELECT *
FROM logical_test1
WHERE NOT a > 20;
+----+----+------+
| 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 gleichDown
.
OR
a
ist gleich8
ANDb
ist gleichUp
.
SELECT *
FROM logical_test1
WHERE b = 'Down' OR
a = 8 AND b = 'Up';
+----+----+------+
| 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 gleichDown
ORa
ist gleich8
.
AND
b
ist gleichUp
.
SELECT *
FROM logical_test1
WHERE (b = 'Down' OR a = 8) AND b = 'Up';
+----+---+----+
| 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 gleich15
.
AND
b
ist gleichDown
.
SELECT *
FROM logical_test1
WHERE NOT a = 15 AND b = 'Down';
+----+----+------+
| 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 gleich15
.
AND
b
ist gleichDown
.
SELECT *
FROM logical_test1
WHERE NOT (a = 15 AND b = 'Down');
+----+----+------+
| 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;
+-------+------+
| 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;
+-------+------+
| 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;
+---+---+
| 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;
+-------+------+
| 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;
+---+---+
| 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);
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;
+-------+-------+------+------+
| 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;
+-------+-------+-------+-------+
| AND | FALSE | TRUE | NULL |
|-------+-------+-------+-------|
| False | False | False | False |
| True | False | True | NULL |
| NULL | False | NULL | NULL |
+-------+-------+-------+-------+