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/