PostgreSQL | PostgreSQL 기본 구성 | 논리 연산자 사용(AND, OR, NOT)

PostgreSQL에서는 논리 연산자로 AND, OR, NOT의 세 가지가 준비되어 있다. 여기에서는 논리 연산자의 사용법에 대해 설명한다.

※ PostgreSQL에서 참이거나 거짓을 나타내는 값이 무엇인가에 대해서는 “논리 값 데이터 형식(boolean)“을 참조하도록 한다.

논리곱 (AND)

AND는 논리곱이다. 좌변과 우변이 TRUE, FALSE, NULL이었을 때, 어떻게 판단되는지는 다음 목록을 보도록 하자.

TRUE   AND  TRUE   -> TRUE
TRUE   AND  FALSE  -> FALSE
TRUE   AND  NULL   -> NULL
FALSE  AND  FALSE  -> FALSE
FALSE  AND  NULL   -> FALSE
NULL   AND  NULL   -> NULL

전체 표현식이 TRUE가 되는 것은 좌변과 우변이 모두 TRUE 인 경우 뿐이다. 또한 TRUE AND NULLNULL인데 비해 FALSE AND NULLFALSE가 되는 점에 주의한다.

그럼 실제로 해보도록 하자. 다음과 같은 테스트 테이블을 만든다.

mydb=# create table test(flag1 boolean,  flag2 boolean);
CREATE TABLE
mydb=#

다음과 같은 데이터를 테이블에 추가한다.

mydb=# insert into test values (TRUE, TRUE), (TRUE, FALSE), (TRUE, NULL), (FALSE, FALSE), (FALSE, NULL), (NULL, NULL);
INSERT 0 6
mydb=# select * from test;
 flag1 | flag2
-------+-------
 t     | t
 t     | f
 t     |
 f     | f
 f     |
       |
(6개 행)

그러고 SELECT 명령을 사용하여 논리곱으로 좌변과 우변의 값에 의해 전체가 어떻게 판단되는지를 해보자.

mydb=# select flag1, flag2, flag1 and flag2 as "flag1 and flag2" from test;
 flag1 | flag2 | flag1 and flag2
-------+-------+-----------------
 t     | t     | t
 t     | f     | f
 t     |       |
 f     | f     | f
 f     |       | f
       |       |
(6개 행)

이것으로 좌변과 우변의 값에 의해 논리곱 결과가 어떻게 되지는 알 수 있다.

논리합(OR)

OR은 논리합입니다. 좌변과 우변이 TRUE, FALSE, NULL이었을 때, 어떻게 판단되는지는 다음 목록을 보도록 하자.

TRUE   OR  TRUE   -> TRUE
TRUE   OR  FALSE  -> TRUE
TRUE   OR  NULL   -> TRUE
FALSE  OR  FALSE  -> FALSE
FALSE  OR  NULL   -> NULL
NULL   OR  NULL   -> NULL

좌변과 우변의 적어도 어느 하나가 TRUE 인 경우 전체 표현식이 TRUE이다. 또한 TRUE OR NULLTRUE 인 반면 FALSE AND NULLNULL이 되는 점에주의한다.

그럼 실제로 해보도록 하자. 다음의 같이 논리곱으로 사용한 테이블을 그대로 사용하여 SELECT 명령을 사용하여 논리합의 좌변과 우변에 의해 어떻게 판단되는지 해보자.

mydb=# select flag1, flag2, flag1 or flag2 as "flag1 or flag2" from test;
 flag1 | flag2 | flag1 or flag2
-------+-------+----------------
 t     | t     | t
 t     | f     | t
 t     |       | t
 f     | f     | f
 f     |       |
       |       |
(6개 행)

이것으로 좌변과 우변의 값에 의해 논리합 결과가 어떻게 되지는 알 수 있다.

부정 (NOT)

NOT 연산자는 부정이다. 우변이 TRUE, FALSE, NULL이었을 때, 어떻게 판단되는지는 다음 목록을 보도록 하자.

NOT  TRUE   -> FALSE
NOT  FALSE  -> TRUE
NOT  NULL   -> NULL

우변이 TRUE이면 FALSE가 되고, 우변이 FALSE이면 TRUE가 된다. 또한 NOT NULL은 NULL이 된다.

그럼 실제로 해보도록 하자. 다음과 같은 테스트 테이블을 만든다.

mydb=# create table test2( flag boolean);
CREATE TABLE
mydb=#

다음과 같은 데이터를 테이블에 추가한다.

mydb=# insert into test2 values (TRUE),(FALSE),(NULL);
INSERT 0 3
mydb=#

그러면 SELECT 명령을 사용하여 부정의 우변의 값에 의해 결과가 어떻게 판단되는지를 해보자.

mydb=# select flag, not flag as "not flag" from test2;
 flag | not flag
------+----------
 t    | f
 f    | t
      |
(3개 행)

이것으로 우변의 값에 의해 부정의 결과가 어떻게 되지는 알 수 있다.

여기까지 PostgreSQL에서 제공되는 논리 연산자의 사용법에 대해 설명하였다.