본문 바로가기
Programming/SQL

[Oracle] 04. 다양한 연산자(AND, OR, NOT, LIKE, BETWEEN, IN)

by 고막고막 2019. 4. 18.

관계 연산자 (AND, OR, NOT)

관계 연산자는 WHERE절에서 여러 개의 조건(AND, OR, NOT)을 동시에 이용할 때 사용된다. 복잡한 관계연산은 예상치 못한 결과를 발생시킬 수 있다. 그러므로 두 개 이상의 관계 연산을 이용할 때는 반드시 괄호를 이용해 연산의 우선순위를 SQL 작성자가 직접 결정해야 한다. 우선순위는 NOT > AND > OR 이다.

//20번 부서 사원 중에 급여가 1500이상이고 개발 업무를 담당하는 사원과,
//급여가 3000이상인 사원을 검색한다.
SELECT * FROM emp WHERE (dno=20 AND sal >= 1500 AND job='개발') OR (sal >= 3000);

LIKE 연산자 (WHERE 컬럼 LIKE '비교 문자열')

WHERE절에 사용되는 문자 전용의 비교 연산자. 문자열의 일부만으로 검색하는 경우에 사용된다. 와일드 문자인 '_'(반드시 한개의 문자를 대체)와 '%'(문자열을 대체한다(문자가 없는 경우도 포함))를 사용한다. 'LIKE'를 꼭 써야 한다!!!

    '경%'    : '경'으로 시작하는 모든 문자열
    '%과'    : '과'로 끝나는 모든 문자열
    '%김%'  : '김'이라는 글자가 들어간 모든 문자열
    '화_'     : '화'로 시작하는 두글자 단어
    '__화'    : '화'로 끝나는 세글자 단어
    '_동_'    : '동'이 가운데에 들어가는 세글자 단어
//김씨 성을 가진 사원을 검색
SELECT * FROM emp WHERE ename LIKE '김%';
//이름이 '하늘'인 사원을 검색
SELECT * FROM emp WHERE ename LIKE '%하늘';
//성과 이름이 각각 한 글자인 사원을 검색
SELECT * FROM emp WHERE ename LIKE '__';

WHERE 컬럼 BEWEEN 값1 AND 값2

SQL의 AND연산자와 같은 기능이지만 가독성을 위해 BETWEEN 값1 AND 값2를 사용하는 것이 좋다. 자바에서는 if((값1<=컬럼)&&(컬럼<=값2))와 유사하다고 볼 수 있다.

// 1992년에서 1996년 사이에 입사한 사원을 검색하세요
ALTER SESSION SET nls_date_format = 'YYYY/MM/DD:HH24:MI:SS';
SELECT *
FROM emp
WHERE hdate BETWEEN '1992/01/01:00:00:00' AND '1996/12/31:23:59:59'
ORDER BY hdate;

WHERE 컬럼 IN (값1, 값2...)

일치하는 값이 하나라도 있으면 검색되기 때문에 SQL의 OR연산자, =연산자와 같은 기능이고 가독성이 매우 우수하다. 자바에서는 Switch~case문과 유사하다고 볼 수 있다. 

// 개발이나 관리 업무를 담당하는 사원을 검색하세요
SELECT * FROM emp WHERE job IN ('개발', '관리') ORDER BY dno;