07. 조건 조합하기
학습 내용
논리연산자 AND, OR, NOT에 대해 알아보자
단순한 조건식을 넣으면 결괏값이 너무 많기 때문에 통상적으로 2개 이상의 조건식을 조합해 검색하는 경우가 많음
조건식을 통합해 사용할 경우 복수의 조건을 WHERE 구로 지정
조합 시에는 AND, OR, NOT 3가지 방법 사용
1. AND로 조합하기
조건식1 AND 조건식2
- 좌우에 항목이 필요한 이항 연산자, 논리곱을 계산하는 논리 연산자(교집합)
- 좌우의 식 모두 참일 경우 참을 반환
-> 모든 조건을 만족하는 경우 조건식이 참이 될 때 AND 연산자 사용
= '및'에 해당
예시
- a 열과 b 열이 모두 0이 아닌 행 검색
mysql> SELECT * FROM sample24;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 |
| 4 | 2 | 2 | 0 |
| 5 | 0 | 2 | 2 |
+------+------+------+------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM sample24 WHERE a <> 0 AND b <> 0;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 4 | 2 | 2 | 0 |
+------+------+------+------+
1 row in set (0.00 sec)
2. OR로 조합하기
조건식1 OR 조건식2
- 어느 쪽이든 하나만 참이 되면 조건식은 참이 되는 경우
- AND처럼 이항 연산자이자 논리 연산자(합집합)
- AND와 달리 조건 중 하나만 참이면 결괏값도 참
-> 모든 조건이 거짓인 경우 결괏값도 거짓
= '또는'에 해당
예시
- a 열이 0이 아니거나 b 열이 0이 아닌 행 검색
mysql> SELECT * FROM sample24 WHERE a <> 0 OR b <> 0;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 4 | 2 | 2 | 0 |
| 5 | 0 | 2 | 2 |
+------+------+------+------+
4 rows in set (0.00 sec)
3. AND와 OR를 사용할 경우 주의할 점
- 조건식 지정 시 열이나 상수만을 지정해도 에러가 발생하진 않지만 기대한 결괏값을 얻을 수 없음
틀린 예
mysql> SELECT * FROM sample24 WHERE no = 1 OR 2;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 |
| 4 | 2 | 2 | 0 |
| 5 | 0 | 2 | 2 |
+------+------+------+------+
5 rows in set (0.00 sec)
바른 예
mysql> SELECT * FROM sample24 WHERE no = 1 OR no = 2;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
+------+------+------+------+
2 rows in set (0.00 sec)
AND와 OR를 조합해 사용하기
- a 열이 1 또는 2이고, b 열이 1 또는 2인 행을 검색
mysql> SELECT * FROM sample24 WHERE a=1 OR a=2 AND b=1 OR b=2;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 4 | 2 | 2 | 0 |
| 5 | 0 | 2 | 2 |
+------+------+------+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM sample24 WHERE a <> 0 AND b <> 0;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 4 | 2 | 2 | 0 |
+------+------+------+------+
1 row in set (0.00 sec)
- 'a <> 0 AND b <> 0'와 'a = 1 OR a = 2 AND b = 1 OR b = 2'의 경우 둘의 결과가 다름 -> 우선 순위 때문
연산자의 우선 순위
- OR 보다 AND가 우선 순위가 더 높기 때문에 a = 2 AND b = 1이 먼저 계산됨
- 해당 조건식은 아래와 같음
WHERE a=1 OR (a=2 AND b=1) OR b=2
a=2 AND b=1
OR
b=2
- 만약 다음과 같은 조건을 검색하고 싶다면 괄호를 이용하여 우선순위를 변경하면 됨 : a 열이 1 또는 2이며 b 열이 1 또는 2이다
mysql> SELECT * FROM sample24 WHERE (a=1 OR a=2) AND (b=1 OR b=2);
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 4 | 2 | 2 | 0 |
+------+------+------+------+
1 row in set (0.00 sec)
4. NOT으로 조합
NOT 조건식
- 단항 연산자 : 오른쪽에만 항목을 지정함
- 오른쪽에 지정한 조건식의 반대 값을 반환
- 주로 복수의 조건식에 대해 '~아닌', '~외에', '~를 제외한 나머지' 등의 조건을 지정할 경우 사용
예시
- a 열이 0이 아니거나 b 열이 0이 아닌 행을 제외한 나머지 행을 검
mysql> SELECT * FROM sample24 WHERE NOT (a<>0 OR b<>0);
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 3 | 0 | 0 | 1 |
+------+------+------+------+
1 row in set (0.00 sec)
'공부 > TIL' 카테고리의 다른 글
[SQL 첫걸음] 14강 - 16강 (1) | 2024.01.05 |
---|---|
[SQL 첫걸음] 3장 11강 ~ 13강 (1) | 2024.01.04 |
[SQL 첫걸음] 2장 06강 검색 조건 지정하기 (0) | 2023.11.13 |
[SQL 첫걸음] 2장 05강 테이블 구조 참조하기 (0) | 2023.11.11 |
[SQL 첫걸음] MySQL 설치 및 세팅 오류 해결(윈도우) (2) | 2023.11.06 |