본문 바로가기

database

oracle - IN, LIKE, IS NOT NULL, AND, OR, NOT

19.11.21. IN, LIKE, IS NOT NULL, AND, OR, NOT

데이터베이스 구현

2019-11-21 23:46:05


▶IN 연산자

col 의 값이 IN 연산자 안에 나열된 값 중에 포함될 때 참으로 판정.

 

-

SELCT *

FROM emp

WHERE deptno IN (10,20);

=> emp 테이블의 직원 소속부서가 10번 "이거나" 20번인 직원 정보 조회.

 

RDBMS : 집합의 개념.

1. 순서가 없다.

(1,5,7),=(5,7,1)

2. 중복이 없다.

(1,1,5,7) = (5,1,7)

 

"이거나" => OR

"이고" => AND

따라서 IN 연산자는 OR 로 바꿀 수 있다.

 

SELECT *

FROM emp

WHERE deptno = 10

OR deptno = 20;

 

▶LIKE 연산자

문자열 매칭 연산. ( % , _)

%   :  문자가 없거나, 여러 문자열.

_    :   하나의 문자. 

 

Q : emp 테이블 속 사원 이름(ename)이 s로 시작하는 사원 정보 조회.

SELECT *

FROM emp

WHERE ename LIKE 'S%';

 

Q : Smith, Scott 를 패턴으로 검색해보자.

1. _ 패턴 사용

SELCT *

FROM emp

WHERE ename LIKE 'S__T_';

 

2. % 패턴 사용

SELCT *

FROM emp

WHERE ename LIKE 'S%T_';

 

=> 두 개는 같지 않다. % 패턴 속에는 아무것도 안 올 수도, 537457345개의 글자가 올 수도 있다.

 

NULL 값 조회해보자.

WHERE MRG = NULL;

=> 일 것 같지만 아님.

 

WHERE MRG IS NULL;

=> 이게 맞음.

 

반대는 IS NOT NULL

 

Q :  상여금을 받은 사원을 조회해보자.

SELCT *

FROM emp

WHERE comm IS NOT NULL;

 

 

▶ 논리 연산 (AND, OR, NOT)

And : 조건을 동시에 만족. (많이 쓰일수록 데이터가 줄어든다.)

OR : 조건을 한 개만 충족하면 만족. (많이 쓰일수록 데이터가 늘어난다.)

 

Q : emp 테이블에서 관리자 사번이 7698, 7839 가 아닌 직원 정보 조회.

 

SELECT *

FROM emp

WHERE mgr NOT IN (7698, 7839);

                      (!=)

=> 여기에 mgr 값이 NULL 인 사람 조회도 해야 하니까

SELECT *

FROM emp

WHERE mgr NOT IN (7698, 7839);

OR mgr IS NOT NULL;

=> 완성~!

 

Q : emp 테이블 job 이 SALESMAN, 입사일자가 1981.06.01 이후인 직원 정보 조회

SELECT *

FROM emp

WHERE  job = 'SALESMAN'

AND hiredate > TO_DATE('19810601'),('yyyymmdd');