[DBMS_06] 논리 연산자 (and, or, in, between, like,not)
1. 연산자 and or
&& 대신 and 사용하기
|| 대신 or 사용하기
- 사원테이블에서 급여가 5000을 초과하면서 1000이하인 사원들의 정보를
사번, 이름, 급여 순으로 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 5000 and salary<=10000;

-- 사원테이블에서 급여가 5000 미만이거나 20000이상인 사원들의 사번, 이름, 급여를 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary < 5000 or salary >=20000;

-- 사원테이블에서 2005 ~ 2006 사이에 입사한 사원들의 사번,이름, 입사일을 출력
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date >= '01/01/2005' and hire_date < '01/01/2007' ;

2. 연산자 in
in 연산자 : or 연산자를 대체하는 키워드
1) in 연산자를 사용하지 않은 경우 or사용
SELECT employee_id, first_name, job_id
FROM employees
WHERE job_id = 'SA_MAN' or job_id = 'IT_PROG' or job_id = 'HR_REP';
2) in 연산자를 사용하여 위의 쿼리문을 수정해보자!
SELECT employee_id, first_name, job_id
FROM employees
WHERE job_id in( 'SA_MAN', 'IT_PROG','HR_REP');
-- 사번이 100, 102, 104, 106 번인 사원들의 정보를 사번, 이름 순으로 출력
SELECT employee_id, first_name
FROM employees
WHERE employee_id in(100, 102, 104, 106);

-- 급여가 2200, 3200, 5000, 6800 인 사원들의 정보를 사번, 이름, 급여 순으로 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary in(2400, 3000, 5000, 6800);

3. 연산자 between
between 연산자 : A와 B사이의 값을 검색할 때 사용
1) between 연산자를 사용하지 않은 경우 and 사용
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date >= '01/01/2005' and hire_date <= '12/31/2005';
2) between 연산자를 사용하여 위의 쿼리문 수정!
( 단, >= , <= 만 검색 가능 . > , < 불가능)
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date between '01/01/2005' and '12/31/2005';

-- 급여가 5000이상이고 6000이하인 사원들의 사번, 이름, 급여를 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary between 5000 and 6000;

4. 연산자 like
like 연산자(유사검색) : 지정한 문장과 일치하거나, 문장을 포함하고 있는 자원을 검색
1) % : 모든 값
2) _ : 하나의 값
ex1) 'A%' : A로 시작하는 모든 데이터 (Apple, Actor..)
ex2) '%a' : a로 끝나는 모든 데이터 ( korea, italia..)
ex3) '%a%' : 값 내부의 어디든 a가 포함 된 모든 데이터 ( apple, operate, korea...)d
ex4) 'A____' : A로 시작하되, A뒤의 글자수가 _개수인 데이터(Apple)
-- 이름이 D로 시작하는 모든 사원들의 이름을 출력
SELECT first_name
FROM employees
WHERE first_name like 'D%';

-- 이름이 d로 끝나는 모든 사원들의 이름을 출력
SELECT first_name
FROM employees
WHERE first_name like '%d';

-- 사원테이블에서 이름의 세번째 글자가 a인 사원의 사번, 이름을 출력
SELECT employee_id, first_name
FROM employees
WHERE first_name like '__a%';

-- 사원테이블에서 입사년도가 2006년인 사원들의 사번, 이름 , 입사일 출력
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date like '%2006';

-- 이름이 H로 시작하면서 6글자 이상인 사원의 사번, 이름을 출력
SELECT employee_id, first_name
FROM employees
WHERE first_name like 'H_____%';

-- 이름에 소문자 o가 포함되어있으며 a로 끝나는 사원들의 사번과, 이름을 출력
SELECT employee_id, first_name
FROM employees
WHERE first_name like '%o%a';

-- 전화번호가 6으로 시작해서 중간에 2가 포함되어있고 9로 끝나는 사원들의 사번,이름, 전화번호를 출력
SELECT employee_id, first_name, phone_number
FROM employees
WHERE phone_number like '6%2%9';

5. 연산자 not
not 연산자 : 해당조건을 제외한 자료를 조회
1) not을 사용하지 않은 쿼리문
SELECT employee_id, first_name,job_id
FROM employees
WHERE job_id != 'SA_MAN' and job_id !='IT_FROG' and job_id != 'HR_REP';
2) NOT을 사용하여 위의 쿼리문 수정!
SELECT employee_id, first_name,job_id
FROM employees
WHERE job_id NOT IN('SA_MAN','IT_FROG','HR_REP');
--부서번호가 80이 아닌 부서의 사원들의 정보를 이름, 부서번호 순으로 출력
SELECT first_name, department_id
FROM employees
WHERE department_id NOT IN (80);
/*두번째 방법*/
WHERE department_id != 80;
/*세번째 방법*/
WHERE NOT department_id = 80;
