본문 바로가기

공부 자료/SQL

[8일차] And / Or / Not 원하는 행 선택하기

오늘은 지난 7일차에 이어 WHERE절의 연장선상으로 복합 조건을 사용할 수 있는 논리 연산자에 배우는 날입니다! 바로 어떤 내용을 배울지 학습해 보겠습니다!

 

 

오늘 배울 '복합 조건을 사용할 수 있는 논리 연산자'. 즉, 복합 논리 연산자인 And와 Or에 대해 배울 시간입니다. 

7일차에 배운 WHERE절의 연장선상이라고 했는데, 지난번에 배운 비교 연산자들을 기억하면서 학습을 진행하면 좋을 것 같습니다!

 

 

지난번 WHERE절을 이용하여 조건을 만족하는 행만을 출력하고자 했었는데, 이번에는 내가 원하는 모든 조건을 걸어 원하는 행을 출력하는 방법이라고 생각하면 될 것 같습니다!

예를들어, 급여가 10000보다 크고, 부서 번호가 90 혹은 110에 해당하는 사람들을 보고 싶은 경우가 존재한다면?

당연히 2가지를 모두 연결하는 조건이 필요하게 되며, 90 혹은 110을 필터링 할 연산자 또한 필요하게 되겠죠? 이때 사용하는 것이 바로 복합 논리 연산자입니다.

salary와 departmentNumber를 모두 선택하기 위해 AND 연산자. 90 혹은 110을 선택하기 위해 OR 연산자를 사용하게 되는 것입니다.

급여가 1만보다 큰 사람이면서 부서가 90번이거나 110인 사람
SELETE *
FROM employees
WHERE salary >= 10000
 AND (department_id = '90' OR department_id = '110');

WHERE 절에서는 콤마(,)를 사용해서 연결하지 않기 때문에 반드시 복합 논리 연산자를 사용해야 합니다.

하지만 아래 IN 연산자의 경우 함수 연산자이기 때문에 콤마를 사용할 수 있습니다. (헷갈리지 않도록 잘 알아두면 좋을 것 같네요)

 

 

만약, OR로 이어야 하는 조건이 많이지게 된다면 너무 지저분해질 수 있겠죠? 그 때에는 바로 IN 연산자를 사용하면 됩니다.

급여가 1만보다 큰 사람이면서 부서가 90번 혹은 110번 혹은 130번 혹은 150번인 사람
SELETE *
FROM employees
WHERE salary >= 10000
 AND (department_id IN ('90', '110', '130', '150'));

 

 

그렇다면 남은 NOT은 무엇일까요? 바로 부정을 의미하겠죠?

급여가 1만보다 큰 사람이면서 부서가 90번 혹은 110번 혹은 130번 혹은 150번이 아닌 사람
SELETE *
FROM employees
WHERE salary >= 10000
 AND (department_id  NOT IN ('90', '110', '130', '150'));

 

위의 AND, OR, NOT을 이전 시간에 배웠던 숫자 비교 연산자, 문자 비교 연산자까지 이용한다면 더 많은 조건들을 이용할 수 있겠죠? 이렇게 오늘 학습을 마쳐보도록 하겠습니다!

 

8일차 - 출석 인증