논리 연산자

논리 연산자 (Logical operators)

이 문서는 Snowflake의 논리 연산자(AND, NOT, OR)에 대해 설명해요. 논리 연산자는 하나 또는 두 개의 입력 표현식에 특정 불리언 연산을 수행한 결과를 반환하며, 우선순위(precedence)와 예시를 함께 다루어요.

출처: Snowflake SQL Reference

본문

논리 연산자는 하나 또는 두 개의 입력 표현식에 특정 불리언(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보다 높다는 것을 보여줘요. 이 쿼리는 다음 조건을 일치시키는 행을 반환해요:

  • bDown과 같음. OR
  • a8과 같고 bUp과 같음.
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 절에서 괄호를 사용하면 우선순위를 바꿀 수 있어요. 예를 들어 다음 쿼리는 다음 조건을 일치시키는 행을 반환해요:

  • bDown과 같거나 a8과 같음. AND
  • bUp과 같음.
SELECT *
  FROM logical_test1
  WHERE (b = 'Down' OR a = 8) AND b = 'Up';

+----+---+----+
| ID | A | B  |
|----+---+----|
|  1 | 8 | Up |
+----+---+----+

다음 예시는 NOT의 우선순위가 AND보다 높다는 것을 보여줘요. 예를 들어 다음 쿼리는 다음 조건을 일치시키는 행을 반환해요:

  • a가 15와 같지 않음. AND
  • bDown과 같음.
SELECT *
  FROM logical_test1
  WHERE NOT a = 15 AND b = 'Down';

+----+----+------+
| ID |  A | B    |
|----+----+------|
|  2 | 25 | Down |
+----+----+------+

WHERE 절에서 괄호를 사용하면 우선순위를 바꿀 수 있어요. 예를 들어 다음 쿼리는 다음 두 조건을 모두 일치시키지 않는 행을 반환해요:

  • a가 15와 같음. AND
  • bDown과 같음.
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 연산자를 사용해서 ab가 모두 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  |
+-------+-------+-------+-------+

더 알아보기 (Learn more)