본문 바로가기
Database/Oracle

[Oracle SQL] WHERE절 - 비교 연산자, BETWEEN, IN, LIKE

by Amy IT 2022. 5. 8.

WHERE절을 이용하면 SELECT문에서 테이블 내의 모든 행을 검색하는 대신, 검색 조건을 지정하여 사용자가 원하는 행만 검색할 수 있습니다. WHERE절의 기본 문법은 다음과 같으며, FROM절 바로 다음에 기술합니다. 

 

SELECT [DISTINCT] {*, column [Alias],...} 
FROM 테이블명 
[WHERE 조건식];

 

1. 비교 연산자

 

두 개의 값을 비교할 때 사용하는 연산자를 비교 연산자라고 합니다. WHERE절에 비교 연산자를 사용할 수 있습니다. 

 

연산자 설명
= 같다
!= , <> , ^= 같지 않다
> 보다 크다
>= 보다 크거나 같다
< 보다 작다
<= 보다 작거나 같다

 

 

30번 부서인 사람들의 이름, 부서번호를 출력하는 SELECT문입니다.

SELECT ename, deptno FROM emp WHERE deptno=30;

 

직업이 'SALESMAN'인 사람들의 이름, 직업을 출력하는 SELECT문입니다. 주의할 점은, 숫자에는 작은따옴표가 필요 없지만 문자나 문자열, 날짜에는 작은따옴표가 필요하며 문자의 대소문자도 일치해야 한다는 것입니다.

SELECT ename, job FROM emp WHERE job='SALESMAN';

 

반대로, 다음과 같이 직업이 'SALESMAN'이 아닌 사람들의 이름, 직업을 출력할 수 있습니다.

SELECT ename, job FROM emp WHERE job!='SALESMAN';

 

월급이 1000 이하인 사람들의 이름, 월급을 출력하는 SELECT문입니다.

SELECT ename, sal FROM emp WHERE sal<=1000;

 

날짜에도 비교 연산자를 사용할 수 있습니다. 입사일이 81년 05월 01일보다 늦은 사람들의 이름, 입사일을 출력하는 SELECT문입니다.

SELECT ename, hiredate FROM emp WHERE hiredate>'81/05/01';

 

 

 

2. BETWEEN a AND b 연산자

 

특정한 두 값의 범위에 포함되는 조건으로 검색하고 싶을 때 사용합니다. 다음은 월급이 1000과 2000 사이인 사람들의 이름과 월급을 출력하는 SELECT문입니다.

SELECT ename, sal FROM emp WHERE sal BETWEEN 1000 AND 2000;

 

 

 

3. IN 연산자

 

괄호 안의 값과 일치하는 조건으로 검색하고 싶을 때 사용합니다. 하나의 값이 아닌 여러 값을 한번에 비교할 수 있는 연산자로서, 내부적으로 OR 연산자로 변환되어 실행됩니다. 

 

직업이 SALESMAN이거나 CLERK인 사람들의 이름, 직업을 출력하기 위해 OR 연산자를 사용하면 다음과 같습니다.

SELECT ename, job FROM emp WHERE job='SALESMAN' OR job='CLERK';

 

이를 IN 연산자를 이용하여 표현하면 다음과 같습니다.

SELECT ename, job FROM emp WHERE job IN ('SALESMAN','CLERK');

 

IN 안에 값을 나열할 수 있기 때문에 원하는 조건이 여러 개일 경우 OR 연산자보다 편리하게 쓸 수 있습니다.

사원번호가 7369 또는 7499 또는 7521인 사람들의 사원번호, 이름을 출력하는 SELECT문입니다.

SELECT empno, ename FROM emp WHERE empno=7369 OR empno=7499 OR empno=7521;
SELECT empno, ename FROM emp WHERE empno IN (7369,7499,7521);

 

* 다중 리스트

직업이 MANAGER이면서 20번 부서에 속하거나, 직업이 CLERK이면서 30번 부서에 속하는 사원의 정보 출력하려면 다음과 같이 괄호를 이용합니다. 

SELECT ename, job, deptno FROM emp WHERE (job,deptno) IN (('MANAGER',20),('CLERK',30));

 

 

 

4. LIKE 연산자

 

검색하고자 하는 내용을 정확히 알 수 없는 경우에 사용합니다. 다음은 LIKE 연산자에서 사용 가능한 와일드 카드 문자(패턴 매칭 연산자)입니다. 

 

기호 설명
% 0개 이상의 문자를 의미
_ 1개 문자를 의미

 

이름이 A로 시작하는 사람을 출력합니다.

SELECT empno, ename, job FROM emp WHERE ename LIKE 'A%';

 

이름에 T가 들어가는 사람을 출력합니다. T로 시작하거나 T로 끝나는 것도 포함합니다.

SELECT empno, ename, job FROM emp WHERE ename LIKE '%T%';

 

이름의 두 번째 글자가 L인 사람을 출력합니다. 

SELECT empno, ename, job FROM emp WHERE ename LIKE '_L%';

 

다섯 번째 글자가 K로 끝나는 다섯 자리의 이름을 가진 사람을 출력합니다.

SELECT empno, ename, job FROM emp WHERE ename LIKE '____K';

 

81년도에 입사한 사람을 출력합니다.

SELECT * FROM emp WHERE hiredate LIKE '81%';
SELECT * FROM emp WHERE hiredate LIKE '81/__/__';

 

* ESCAPE 옵션

검색하고자 하는 문자열에 와일드 카드 문자가 포함되어 있을 때는 ESCAPE 옵션을 사용해야 합니다. 

LIKE '%$_%' ESCAPE '$';

'_'라는 문자가 포함된 조건으로 검색하고 싶을 때, ESCAPE 문자로 $를 설정한 후 LIKE 연산자에 $ 뒤 '_'를 입력하면 됩니다. ESCAPE 옵션을 통해 $ 바로 뒤에 있는 '_'는 어떤 글자 하나가 아니라 '_' 그 자체를 뜻하게 됩니다. ESCAPE는 사용자가 임의의 문자로 지정할 수 있습니다.

 

다음은 '_'라는 글자 뒤에 두 개의 문자로 끝나는 조건으로 검색할 수 있는 SELECT문입니다.

LIKE '%E___' ESCAPE 'E';

예를 들어 _AB , T_AB , AD_VP 와 같은 문자열이 출력될 수 있습니다.

 

* 나머지 구하기

참고로 %는 자바에서 나머지를 구할 때 사용됩니다. SQL에서는 %를 LIKE 연산자에서 사용하기 때문에, 나머지를 구할 때는 mod 함수를 사용합니다. 이에 대한 내용은 이후에 자세히 나오겠습니다. 

 

 

WHERE절 정리는 다음 글에서 계속하여 이어집니다.

 

 

댓글