본문 바로가기
공부/mysql

Mysql 기본 명령어 4 (AND, OR, NOT 논리연산자)

by signature95 2022. 1. 24.
728x90
반응형

지난 포스트에 이어서 작성하는 내용입니다.

2022.01.24 - [공부/mysql] - Mysql 기본 명령어3 (WHERE 구문, 연산자)

 

Mysql 기본 명령어3 (WHERE 구문, 연산자)

지난 포스트에 이어서 작성하는 내용입니다. 2022.01.21 - [공부/mysql] - mysql 기본 명령어 2 mysql 기본 명령어 2 지난 포스트에 이어서 작성하는 내용입니다. 2022.01.21 - [공부/mysql] - Mysql 기본 명령어..

signature95.tistory.com

AND, OR, NOT 연산자를 먼저 살펴봅시다.

 

 

이를 벤 다이어그램으로 표현하면 다음과 같습니다.

 

그렇다면 논리연산자를 적용시켜 보겠습니다.

 

SELECT * FROM sample.sample24;

이번에는 앞선 포스트와 다르게 다른 테이블을 불러왔습니다.

그렇다면 a = 0인 값과 c < 2를 뽑아 봅시다.

 

SELECT * FROM sample.sample24 WHERE a = 0 AND c < 2;

a = 0인 행은 no가 2,3,5입니다.

c < 2인 행은 no가  1,2,3,4입니다.

위 둘의 교집합(AND)는 no=2,3이 되는 것입니다. 만약 여기서 a, c값만 추출하고 싶다면 명령어는 다음과 같습니다.

 

SELECT a, c FROM sample.sample24 WHERE a = 0 AND c < 2;

이번에는 a = 1 혹은 2 이고 b=1 혹은 2인 경우를 출력해봅시다.

SELECT * FROM sample.sample24 WHERE a=1 or a=2 AND b=1 or b=2;

그런데 출력 결과를 살펴보면, 뭔가 다릅니다. 이유는 괄호로 묶지 않았기 때문인데요, 위의 식을 말로 풀이하자면 다음과 같습니다.

a = 1 이거나 a = 1 이면서 b = 1 이거나, b=2인 데이터를 출력하라. 즉 조건식이 묶이지 않고 3개의 조건식이 or으로 연결된 결과와 동일한 것입니다.

또한, AND 연산자는 OR보다 더 우선순위가 높습니다. 이를 단순 사칙연산으로 하자면 a + b * c 가 ac + bc가 아니라 a + bc인 경우와 같다고 생각하시면 될 것입니다.

 

따라서 해당 출력을 다시 제대로 수행하려면 명령문은 다음과 같습니다.

 

SELECT * FROM sample.sample24 WHERE (a=1 OR a=2) AND (b=1 OR b=2);

이런 형태로 괄호 내의 조건문을 우선적으로 처리할 수 있게 만든다면 원하는 결과를 출력할 수 있을 것입니다.

 

이번에는 NOT 연산자를 해보겠습니다.

(a가 0이 아니거나 b가 0이 아닌 데이터)가 아닌 것을 출력해볼 것입니다.

 

SELECT * FROM sample.sample24 WHERE NOT (a<>0 OR b<>0);

NOT 연산자는 조건식 앞에서 즉, 오른쪽에만 항목을 지정할 수 있는 단항 연산자라고도 합니다. 괄호 내의 값이 TRUE를 반환했다면, NOT을 적용하여 TRUE가 아닌 FALSE를 반환할 수 있는 것입니다. 

728x90

댓글