論理演算子¶
論理演算子は、1つまたは2つの入力式で特定のブール演算の結果を返します。論理演算子はブール演算子とも呼ばれます。
論理演算子は述語としてのみ使用できます(例: WHERE 句内)。入力式は述語でなければなりません。
論理演算子のリスト¶
演算子 |
構文例 |
説明 |
---|---|---|
|
|
両方の表現( |
|
|
式と一致しません。 |
|
|
いずれかの式に一致します。 |
これらの演算子の優先順位を以下に示します(最高から最低まで)。
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;
+----+----+------+
| 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';
+----+----+------+
| 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 |
+----+----+------+
論理演算子の優先順位を表示する¶
次の例は、論理演算子の優先順位を示しています。
最初の例は、 AND の優先順位が OR の優先順位よりも高いことを示しています。クエリは、これらの条件に一致する行を返します。
b
はDown
と等しい。
OR
a
は8
と等しく、かつ(AND)b
はUp
と等しい。
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 |
+----+----+------+
WHERE 句で括弧を使用すると、優先順位を変更できます。たとえば、以下のクエリはこれらの条件に一致する行を返します。
b
はDown
と等しい、または(OR)a
は8
と等しい。
AND
b
はUp
と等しい。
SELECT *
FROM logical_test1
WHERE (b = 'Down' OR a = 8) AND b = 'Up';
+----+---+----+
| ID | A | B |
|----+---+----|
| 1 | 8 | Up |
+----+---+----+
次の例は、 NOT の優先順位が AND の優先順位よりも高いことを示しています。たとえば、以下のクエリはこれらの条件に一致する行を返します。
a
は15
と等しくない(NOT)。
AND
b
はDown
と等しい。
SELECT *
FROM logical_test1
WHERE NOT a = 15 AND b = 'Down';
+----+----+------+
| ID | A | B |
|----+----+------|
| 2 | 25 | Down |
+----+----+------+
WHERE 句で括弧を使用すると、優先順位を変更できます。たとえば、以下のクエリは、これらの条件の両方に一致しない(NOT)行を返します。
a
は15
と等しい。
AND
b
はDown
と等しい。
SELECT *
FROM logical_test1
WHERE NOT (a = 15 AND b = 'Down');
+----+----+------+
| 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;
+-------+------+
| A | B |
|-------+------|
| False | True |
+-------+------+
以下のクエリは、 OR 演算子を使用して、 a
または b
のいずれかが TRUE である行を返します。
SELECT a, b FROM logical_test2 WHERE a OR b;
+-------+------+
| A | B |
|-------+------|
| False | True |
+-------+------+
以下のクエリは、 AND 演算子を使用して、 a
と b
の両方が TRUE である行を返します。
SELECT a, b FROM logical_test2 WHERE a AND b;
+---+---+
| A | B |
|---+---|
+---+---+
以下のクエリは、 AND 演算子と NOT 演算子を使用して、 b
が TRUE であり、 a
が FALSE である行を返します。
SELECT a, b FROM logical_test2 WHERE b AND NOT a;
+-------+------+
| A | B |
|-------+------|
| False | True |
+-------+------+
以下のクエリは、 AND 演算子と NOT 演算子を使用して、 a
が TRUE であり、 b
が FALSE である行を返します。
SELECT a, b FROM logical_test2 WHERE a AND NOT b;
+---+---+
| A | B |
|---+---|
+---+---+
論理演算子の「真理値テーブル」を表示する¶
次のいくつかの例は、ブール列の論理演算子の「真理値テーブル」を示しています。Snowflakeにおけるブール値の動作については、 三項論理 をご参照ください。
新しいテーブルとデータを作成します。
CREATE OR REPLACE TABLE logical_test3 (x BOOLEAN);
INSERT INTO logical_test3 (x) VALUES
(False),
(True),
(NULL);
これは、 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 |
+-------+-------+------+------+
これは、 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 |
+-------+-------+-------+-------+