논리 연산자
논리 연산자 (Logical operators)
이 문서는 Snowflake의 논리 연산자(AND, NOT, OR)에 대해 설명해요. 논리 연산자는 하나 또는 두 개의 입력 표현식에 특정 불리언 연산을 수행한 결과를 반환하며, 우선순위(precedence)와 예시를 함께 다루어요.
본문
논리 연산자는 하나 또는 두 개의 입력 표현식에 특정 불리언(Boolean) 연산을 수행한 결과를 반환해요. 논리 연산자는 불리언 연산자라고도 불러요.
논리 연산자는 술어(predicate)로만 사용할 수 있어요 (예: WHERE 절). 입력 표현식도 술어여야 해요.
더 보기: BOOLAND, BOOLNOT, BOOLOR, BOOLXOR
논리 연산자 목록
| Operator | Syntax example | Description |
| AND | a AND b | 두 표현식(a, b) 모두 일치해요. |
| NOT | NOT a | 표현식이 일치하지 않아요. |
| OR | a OR b | 두 표현식 중 하나와 일치해요. |
이 연산자들의 우선순위는 다음과 같아요 (높은 순서에서 낮은 순서로):
- NOT
- AND
- OR
예시 (Examples)
다음 예시들은 논리 연산자를 사용해요.
테이블 데이터 쿼리에서 논리 연산자 사용하기
테이블을 만들고 데이터를 삽입해 봐요:
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과 같음. ORa가8과 같고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과 같거나a가8과 같음. ANDb가Up과 같음.
SELECT *
FROM logical_test1
WHERE (b = 'Down' OR a = 8) AND b = 'Up';
+----+---+----+
| ID | A | B |
|----+---+----|
| 1 | 8 | Up |
+----+---+----+
다음 예시는 NOT의 우선순위가 AND보다 높다는 것을 보여줘요. 예를 들어 다음 쿼리는 다음 조건을 일치시키는 행을 반환해요:
a가 15와 같지 않음. ANDb가Down과 같음.
SELECT *
FROM logical_test1
WHERE NOT a = 15 AND b = 'Down';
+----+----+------+
| ID | A | B |
|----+----+------|
| 2 | 25 | Down |
+----+----+------+
WHERE 절에서 괄호를 사용하면 우선순위를 바꿀 수 있어요. 예를 들어 다음 쿼리는 다음 두 조건을 모두 일치시키지 않는 행을 반환해요:
a가 15와 같음. ANDb가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에서 불리언 값의 동작에 대한 자세한 내용은 삼진 논리(Ternary logic)를 참고하세요.
새 테이블과 데이터를 만들어 봐요:
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 |
+-------+-------+-------+-------+