논리 연산자

논리 연산자는 한 개 또는 두 개의 입력 식에 대한 특정 부울 연산의 결과를 반환합니다. 논리 연산자는 부울 연산자라고도 합니다.

논리 연산자는 조건자(예: WHERE 절에서)로만 사용할 수 있습니다. 입력 식은 조건자여야 합니다.

참고 항목:

BOOLAND , BOOLNOT , BOOLOR , BOOLXOR

논리 연산자 목록

연산자

구문 예

설명

AND

a AND b

두 식(ab)과 모두 일치합니다.

NOT

NOT a

식과 일치하지 않습니다.

OR

a OR b

두 식 중 하나와 일치합니다.

이러한 연산자의 우선 순위(가장 높은 순위에서 가장 낮은 순위로)가 아래에 표시되어 있습니다.

  • 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;
Copy
+----+----+------+
| 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';
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 |
+----+----+------+

논리 연산자의 우선 순위 표시

다음 예제는 논리 연산자의 우선순위를 보여줍니다.

첫 번째 예에서는 AND의 우선 순위가 OR의 우선 순위보다 높음을 보여줍니다. 쿼리는 이러한 조건과 일치하는 행을 반환합니다.

  • bDown 과 같습니다.

OR

  • a8 과 같음 AND bUp 과 같음.

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

WHERE 절에 괄호를 사용하여 우선 순위를 변경할 수 있습니다. 예를 들어, 다음 쿼리는 이러한 조건과 일치하는 행을 반환합니다.

  • bDown 과 같음 OR a8 과 같음.

AND

  • bUp 과 같습니다.

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

다음 예에서는 NOT의 우선 순위가 AND의 우선 순위보다 높음을 보여줍니다. 예를 들어, 다음 쿼리는 이러한 조건과 일치하는 행을 반환합니다.

  • a15 와 같지 않습니다.

AND

  • bDown 과 같습니다.

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

WHERE 절에 괄호를 사용하여 우선 순위를 변경할 수 있습니다. 예를 들어, 다음 쿼리는 이 두 조건에 모두 일치하지 않는 행을 반환합니다.

  • a15 와 같습니다.

AND

  • bDown 과 같습니다.

SELECT *
  FROM logical_test1
  WHERE NOT (a = 15 AND b = 'Down');
Copy
+----+----+------+
| 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;
Copy
+-------+------+
| A     | B    |
|-------+------|
| False | True |
+-------+------+

다음 쿼리는 OR 연산자를 사용하여 a 또는 b 가 TRUE 인 행을 반환합니다.

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

다음 쿼리는 AND 연산자를 사용하여 ab 가 모두 TRUE 인 행을 반환합니다.

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

다음 쿼리는 AND 연산자와 NOT 연산자를 사용하여 b 가 TRUE 이고 a 가 FALSE 인 행을 반환합니다.

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

다음 쿼리는 AND 연산자와 NOT 연산자를 사용하여 a 가 TRUE 이고 b 가 FALSE 인 행을 반환합니다.

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

논리 연산자에 대한 “진리 테이블” 표시

다음 몇 가지 예제는 부울 열의 논리 연산자에 대한 ‘진리 테이블’을 보여줍니다. Snowflake에서 부울 값의 동작에 대한 자세한 내용은 3진 논리 섹션을 참조하십시오.

새 테이블과 데이터를 만듭니다.

CREATE OR REPLACE TABLE logical_test3 (x BOOLEAN);

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

다음은 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 |
+-------+-------+------+------+

다음은 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  |
+-------+-------+-------+-------+