논리 연산자, between, in
* 이 장에서 다룰 내용
1. 논리 연산자
2. BETWEEN AND 연산자
3. IN 연산자
01. 논리 연산자
■ 오라클에서 사용가능한 논리 연산자 AND나 OR나 NOT가 있습니다.
연산자 | 의미 |
AND (논리곱) |
두 가지 조건을 모두 만족해야만 검색할 수 있다. SELECT * FROM emp WHERE deptno=10 AND job='MANAGER'; |
OR (논리합) |
두 가지 조건 중에서 한 가지만 만족하더라도 검색할 수 있다. SELECT * FROM emp WHERE deptno=10 OR job='MANAGER'; |
NOT (부정) |
조건에 만족하지 못하는 것만 검색한다. SELECT * FROM emp WHERE NOT deptno = 10; |
1-1. AND 연산자
■ 두 가지 조건을 모두 만족할 경우에만 검색할 수 있도록 하기 위해서는 AND 연산자를 사용합니다.
■ 다음은 AND 연산자가 조건에 따라 어떤 결과가 출력되는지를 나타내는 표입니다.
■ 두 조건이 모두 만족할 경우에만 결과가 참이고, 조건 중 하나라도 만족하지 않으면 결과가 거짓입니다.
조건1 | 조건2 | &&(AND) |
참(1) | 참(1) | 참(1) |
참(1) | 거짓(0) | 거짓(0) |
거짓(0) | 참(1) | 거짓(0) |
거짓(0) | 거짓(0) | 거짓(0) |
■ 10번 부서 소속인 사원들 중에서 직급이 MANAGER인 사람을 검색하여 사원명, 부서번호, 직급을 출력하려고 한다면 두 가지 조건을 제시해야 합니다.
[조건1] 10번 부서 소속인 사원 : DEPTNO=10
[조건2] 직급이 MANAGER인 사원 : JOB='MANAGER'
예 | SELECT * FROM EMP WHERE DEPTNO=10 AND JOB='MANAGER'; |
1-2. OR 연산자
■ 두 가지 조건 중에서 한 가지만 만족하더라도 검색할 수 있도록 하기 위해서는 OR 연산자를 사용합니다.
■ 다음은 OR 연산자가 조건에 따라 어떤 결과가 출력되는지를 나타내는 표입니다.
■ OR 연산자는 두 조건에 모두 만족하지 않을 경우는 결과가 거짓이고 제시한 조건에 한가지라도 만족하면 결과가 참입니다.
조건1 | 조건2 | ||(논리합) |
참(1) | 참(1) | 참(1) |
참(1) | 거짓(0) | 참(1) |
거짓(0) | 참(1) | 참(1) |
거짓(0) | 거짓(0) | 거짓(0) |
■ 10번 부서에 소속된 사원이거나(OR연산자) 월급이 MANAGER인 사람을 검색하여 사원명, 부서번호, 직급을 출력합시다.
[조건1] 10번 부서 소속인 사원 : DEPTNO(부서번호) = 10
[조건2] 직급이 MANAGER인 사원 : JOB(직급)='MANAGER'
예 | SELECT * FROM EMP WHERE DEPTNO=10 OR JOB='MANAGER'; |
1-3. NOT 연산자
■ 10번 부서에 소속된 사원만 제외하고 나머지(NOT) 사원의 정보를 출력하려면 어떻게 해야 할까요?
이러한 조건을 제시하기 위해서 사용하는 논리 연산자가 바로 NOT 입니다.
■ NOT 연산자는 참은 거짓으로 거짓으로 거짓은 참으로 즉 반대되는 논리값을 구하는 연산자입니다.
■ 다음은 NOT 연산자가 논리값에 의해서 어떤 결과가 출력되는지를 나타내는 표입니다.
조건 | NOT |
참(1) | 거짓(0) |
거짓(0) | 참(1) |
■ 이 조건 앞에 NOT을 붙이면 부서번호가 10번이 아닌 사원들에 대해서만 검색하게 됩니다.
■ 다음은 부서번호가 10번이 아닌 사원의 사원이름, 부서번호, 직급을 출력해 봅시다.
예 | SELECT * FROM EMP WHERE NOT DEPTNO=10; |
예 | SELECT * FROM EMP WHERE DEPTNO<>10; -- 10과 같지 않은(관계 연산자) |
1-4. 논리 연산자의 다양한 활용
■ 2000에서 3000 사이의 급여를 받는 사원을 조회해 봅시다.
[조건1] 급여가 2000 이상 : sal >= 2000
[조건2] 급여가 3000 이하 : sal >= 3000, (두 조건을 만족해야 하니 AND)
예 | SELECT * FROM EMP WHERE sal>=(이상)2000 AND sal<=(이하)3000 -- sal이 2000이상부터 sal이 3000이하인 것을 조회하라. |
select * from emp where sal<=2000 AND sal>=3000;
(주의 수학에서 사용하는 논리로 생각하지말것!)
select * from emp where sal <= sal <= 3000;
■ 커미션이 300 이거나 500 이거나 1400인 사원을 검색해 봅시다.
[조건1] 커미션이 300 : COMM = 300
[조건2] 커미션이 500 : COMM = 500
[조건3] 커미션이 1400 : COMM = 1400
예 | SELECT * FROM EMP WHERE COMM = 300 OR COMM = 500 OR COMM = 1400; |
* 탄탄히 다지기
SELECT EMPNO, SAL FROM EMP WHERE SAL=7521 OR SAL=7654 OR SAL=7844;
(ㅋㅋ 문제 똑바로 읽자 바보야.)
SELECT EMPNO, SAL FROM EMP WHERE EMPNO=7521 OR EMPNO=7654 OR EMPNO=7844;
02. BETWEEN AND 연산자
■ 2000에서 3000 사이의 급여를 받는 사원과 같이 특정 범위내에 속하는 데이터인지를 알아보기 위해서 비교연산자와 논리 연산자를 결합하여 표현할 수 있습니다.
예 | SELECT * FROM EMP WHERE SAL>=2000 AND SAL<=3000; |
■ 오라클에서는 특정 범위의 값을 조회하기 위해서는 BETWEEN AND 연산자를 사용할 수 있습니다.
형식 | column_name BETWEED A AND B |
■ 다음은 2000에서 3000 사이의 급여를 받는 사원을 조회하기 위해서 BETWEEN AND 연산자를 사용한 예입니다.
예 | SELECT * FROM EMP WHERE SAL BETWEEN 2000 AND 3000; |
정리. 특정 사이에 값을 출력하기 위해 column BETWEEN A AND B; 연산자를 사용할 수 있다.
■ 급여가 2000 미만이거나 3000 초과인 사원을 검색하기 위해서 비교 연산자와 OR 연산자로 다음과 같이 표현할 수 있습니다.
예 | SELECT * FROM EMP WHERE SAL < 2000 OR SAL > 3000; -- SAL이 200보다 작고 SQL이 3000보다 큰 값 검색. |
예 | SELECT * FROM EMP WHERE SAL NOT(제거) BETWEEN 2000 AND 3000(2000과 3000사이의 값); -- 급여가 2000과 3000 사이의 값을 제거. |
■ BETWEEN AND 연산자는 숫자형뿐만 아니라 문자형, 날짜형에도 사용할 수 있습니다.
■ 주의할 점은 비교 대상이 되는 값을 단일 따옴표로 둘러싸야 한다는 점입니다.
■ 1987년에 입사한 사원을 출력해 봅시다.
예 | SELECT * FROM EMP WHERE HIREDATE BETWEED '1987/1/1' AND '1987/12/31' ; |
select * from emp where hiredate between '1987-1-1' and '1987-12-31';
03. IN 연산자
■ 커미션이 300 이거나 500 이거나 1400 인 사원을 검색하기 위해서 다음과 같이 쿼리문을 작성했습니다.
예 | SELECT * FROM EMP WHERE COMM=300 OR COMM=500 OR COMM=1400; |
■ 비교 연산자와 논리 연산자 OR를 사용해야 합니다.
■ 위 예제를 보면 OR 연산자로 묶인 비교 연산자 내의 컬럼은 COMM으로 동일합니다.
■ 동일한 필드가 여러 개의 값 중에 하나인 경우인지 살펴보기 위해서 비교 연산자와 논리 연산자 OR를 사용하여 복잡하게 쿼리문을 작성하지 않고 IN 연산자를 사용하여 훨씬 간단하게 표현할 수 있습니다.
형식 | column_name IN(A, B, C); |
■ 특정 필드의 값이 A이거나 B이거나 C 중에 어느 하나만 만족하더라도 출력하도록 하는 표현을 IN 연산자를 사용하여 할 수 있습니다.
■ 이번에는 커미션이 300 이거나 500 이거나 1400인 사원을 검색하기 위해서 IN 연산자를 사용해 봅시다.
예 | SELECT * FROM EMP WHERE COMM IN(300, 500, 1400); -- 300 이거나 500 이거나 1400인 사원을 검색 |
select * from emp where comm in(300, 500, 1400);
* 탄탄히 다지기
-- or 연산자로 작성해보기.
select empno, sal from emp where empno=7521 or empno=7654 or empno=7844;
-- in 연산자로 작성해보기.
select empno, sal from emp where empno in(7521, 7654, 7844);
■ 이번에는 COMM이 300, 500, 1400이 모두 아닌 사원을 검색해 봅시다. <> 연산자를 사용하여 다음과 같이 표현할 수 있습니다.
예 | SELECT * FROM EMP WHERE COMM <> 300 AND COMM <> 500 AND COMM <> 1400; -- 아니거나 아니거나 아닌것 |
■ COMM이 300, 500, 1400이 모두 아닌 사원을 NOT IN 연산자를 사용하면 다음과 같이 간단하게 조회할 수 있습니다.
예 | SELECT * FROM EMP WHERE COMM NOT IN(300, 500, 1400); -- 아닌것 |
* 탄탄히 다지기
5.1 select empno, ename from emp where empno=7521 and empno=7654 and empno=7844;
5.2 select empno, ename from emp where empno not in(7521, 7654, 7844);
학습정리.
연산자 | 의미 |
AND | 두 가지 조건을 모두 만족해야만 검색할 수 있다. select * from emp where deptno=10 and job='MANAGER'; |
OR | 두 가지 조건 중에서 한 가지만 만족하더라도 검색할 수 있다. select * from emp where deptno=10 or job='MANAGER'; |
NOT | 조건에 만족하지 못하는 것만 검색한다 select * from emp where not deptno=10; |
'Study > OracleDB' 카테고리의 다른 글
10강 오라클 SQL 주요함수, 숫자함수 (3) | 2022.09.06 |
---|---|
9강 오라클 SQL Like, sort 정렬 (4) | 2022.09.06 |
7강 오라클 SQL 조건연산자 (4) | 2022.09.05 |
6강 오라클 SQL 연산자 (0) | 2022.09.05 |
5강 오라클 select 모든 기능 특정열 선택 (0) | 2022.09.05 |