SQL 첫걸음 - 2장 조건합치기(3/4)
2020-11-01
1. AND로 조합하기 (모든 조건을 만족하는 행 검색)
a열과 b열이 모두 0이 아닌 행 검색.
SELECT *
FROM sample24
wHERE a<>0 AND b<>0;
- 조건을 만족하는 행을 집합으로 표현했을 때, 이들 집합이 겹치는 부분, 즉 ‘교집합’에 해당
2. OR로 조합하기 (어느 쪽이든 조건을 만족하는 행 모두 검색)
a열이 0이 아니거나 b열이 0이 아닌 행을 검색.
SELECT *
FROM sample24
WHERE a<>0 OR b<>0;
조건을 만족하는 행을 집합으로 표현했을 때, 이들 집합들을 합한 부분, 즉 ‘합집합’에 해당
3. AND와 OR를 사용할 경우 주의할 점
SELECT *
FROM sample24
WHERE no = 1 OR 2; (X)
상수 ‘2’는 논리 연산으로 항상 참이 되어 결과적으로 모든 행을 반환.
SELECT *
FROM sample24
WHERE no = 1
OR no = 2; (O)
AND와 OR를 조합해 사용할 경우.. AND가 OR에 비해 우선순위가 높다는 것을 주의할 것!
SELECT *
FROM sample24
WHERE a=1
OR a=2
AND b=1
OR b=2;
=> 의도한것은 a열이 1또는 2이고, b열이 1또는 2인 행을 검색 그러나..
OR보다 AND쪽이 우선 순위가 높기 때문에 a =2 AND b = 1이 먼저 계산된다
SELECT *
FROM sample24
WHERE a=1
OR (a=2 AND b=1)
OR b=2; (3개의 조건식이 OR로 연결된 것과 같아짐)
의도한대로 조건을 지정하기 위해선 다음과 같이 괄호로 우선 순위를 변경하면 됨.
SELECT *
FROM sample24
WHERE (a=1 OR a=2)
AND (b=1 OR b=2);
4. NOT으로 조합
오른쪽에만 항목을 지정하는 ‘단항 연산자’. 오른쪽에 지정한 조건식의 반대 값 반환.
주로 복수의 조건식에 대해 ~아닌,~외의,~를 제외한 나머지 등의 조건을 지정할 경우 사용.
SELECT *
FROM sample24
WHERE NOT(a<>0 OR b<>0);
(a열이 0이 아니거나 b열이 0이 아닌 행)을 제외한 나머지 행 검색.
출처 : https://smilejh.tistory.com/