지난 포스트에 이어서 작성하는 내용입니다.
2022.01.24 - [공부/mysql] - Mysql 기본 명령어3 (WHERE 구문, 연산자)
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를 반환할 수 있는 것입니다.
'공부 > mysql' 카테고리의 다른 글
Mysql 기본명령어 6 (ORDER BY) (0) | 2022.01.25 |
---|---|
Mysql 기본명령어 5 (LIKE) (0) | 2022.01.25 |
Mysql 기본 명령어3 (WHERE 구문, 연산자) (0) | 2022.01.24 |
mysql 기본 명령어 2 (DESC 구문) (0) | 2022.01.21 |
Mysql 기본 명령어 1 (SELECT구문) (0) | 2022.01.21 |
댓글