본문 바로가기

Study/OracleDB

8강 오라클 논리연산자, Between in

728x90

논리 연산자, 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';

AND

 

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';

OR

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)

범위의 값을 조회할 때 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;

 

* 탄탄히 다지기

탄탄히 다지기(1)

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 연산자

■ 오라클에서는 특정 범위의 값을 조회하기 위해서는 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);

* 탄탄히 다지기

탄탄히 다지기(2)

-- 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);
                  --   아닌것

* 탄탄히 다지기

탄탄히 다지기(3)

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;
반응형