티스토리 뷰
SQL의 조건식은 WHERE절에서 많이 사용된다. WHERE절은 SELECT, UPDATE, DELETE문에서 특정 조건의 레코드를 지정하고 싶을 때 사용된다. WHERE절에서 사용했던 NOT, NULL등의 조건식들의 모두 포함된다고 보면 된다. 조건식의 분류는 아래와 같다.
1. 비교조건식 (ex: ANY, SOME, ALL, IN, EXIST)
2. 논리조건식 (ex: AND, OR, NOT, BETWEEN)
3. NULL조건식
4. LIKE조건식
1. 비교조건식
비교조건식은 논리연산자(<,>,<> 등, 참고: [ORACLE] SQL의 연산자(Operator) 정리)나 ANY, SOME, ALL, IN, EXISTS 키워드로 특정 값을 비교하는 조건식을 말한다. 논리연산자의 사용 예는 생략하고, ANY와 SOME, ALL, IN, EXISTS의 사용 예를 살펴보겠다.
SELECT employee_id, salary FROM employees WHERE salary = ANY (2000, 3000, 4000) ORDER BY employee_id;
ANY는 위와 같은 방식으로 사용한다. 위 예제에서는 급여가 2000, 3000, 4000 중 하나라도 해당되는 사원의 id와 급여 레코드를 SELECT했다. ANY의 단어 뜻 중 '아무거나 하나'라는 뜻을 생각하면 편하다. ANY는 OR조건으로 바꾸어 표현할 수도 있다. 위의 예제를 OR문으로 변경하면 아래와 같다.
SELECT employee_id, salary FROM employees WHERE salary = 2000 OR salary = 3000 OR salary = 4000 ORDER BY employee_id;
ALL은 ANY와 반대이다. 모든 조건을 만족해야만 한다. 그러므로 PK와 같은 UNIQUE한 컬럼에 대해 ALL조건을 수행하면, 결과가 나오지 않는다. 사용 예는 아래와 같다.
SELECT employee_id, salary FROM employees WHERE department = ALL(HR, Tech) ORDER BY employee_id;
SOME은 ANY와 사용법과 결과가 비슷하다. IN의 경우에도 마찬가지이다. (ANY와 SOME보다는 IN이 많이 쓰인다고 한다.)
EXIST의 경우에도 ANY와 사용법이 비슷하나, 따라오는 조건이 값의 리스트가 아닌, 서브쿼리가 온다는 특징이 있다. 사용 예를 살펴보면 쉽게 차이점을 구분할 수 있다.
SELECT employee_id, salary FROM employees A WHERE EXISTS ( SELECT employees_id FROM departments B WHERE B.department_name = '마케팅부서') ORDER BY employee_id;
2. 논리 조건식
조건절에서 AND, OR, NOT, BETWEEN을 사용하는 조건식이다. 반환값이 TRUE, FALSE, UNKOWN이다. 다른 프로그래밍 언어를 다룰 줄 안다면 다들 알고 있을 내용이다. AND는 모든 조건을 만족하는 경우에만 TRUE를 반환하고, OR는 하나라도 만족하면 TRUE를 반환한다. NOT은 조건식의 결과가 거짓일 때, TRUE를 반환한다.
SELECT employee_id, salary FROM employees WHERE NOT (salary >= 3500) ORDER BY employee_id
위와 같은 방식으로 논리 조건식이 사용된다. 봉급이 3500 미만인 사원을 조회하는 SQL이다. 한편, BETWEEN의 경우 AND와 함께 쓰여, BETWEEN AND 조건식이라고 불리기도 한다. 단어 뜻대로 사이값을 조회할 때 사용하는 키워드이며, 논리 연산자 2개로 풀어쓸 수도 있다. 사용 예는 아래와 같다.
SELECT employee_id, salary FROM employees WHERE salary BETWEEN 2000 AND 3000 ORDER BY employee_id
3. NULL 조건식
특정 값이 NULL인지 아닌지 판단하는 조건식이다. 앞에 IS를 붙여서 사용한다. 주의해야할 점은, = NULL 형태로 사용하면 절대 안된다는 점이다. 아래의 사용 예처럼, 반드시 IS NULL을 사용해야만 한다.
SELECT employee_id, employee_name FROM employees WHERE employee_name IS NULL ORDER BY employee_id
그 외에 'NULL이 아닌 것'을 찾고 싶을 때는, IS NOT NULL을 사용하면 된다.
4. LIKE 조건식
문자열을 검색할 때 사용하는 조건식이다. 논리 조건식과 같은 완전 일치가 아닌, 패턴 검색이 가능하다. '%'라는 와일드카드를 사용하여 패턴 검색을 진행한다. 사용 예는 아래와 같다.
SELECT employee_id, employee_name FROM employees WHERE employee_name LIKE 'B%' ORDER BY employee_id
위의 SQL은 이름이 B로 시작하는 사원을 조회한 결과이다. %는 문자의 앞, 뒤, 중간 어디나 올 수 있으며, 알파벳 대소문자를 구분한다. 한편, '_'도 LIKE검색에 사용되는데 사용 예는 아래와 같다.
SELECT employee_id, employee_name FROM employees WHERE employee_name LIKE 'B___' ORDER BY employee_id
위의 SQL은 이름이 B로 시작하며, 총 4글자인 사원을 조회하는 SQL이다. 만약 '%'나 '_'가 와일드카드가 아닌, 문자로 사용됐을 경우, 검색조건에 넣기 난감할 수 있다. 그럴 때는 ESCAPE 구문을 사용하면 된다.
-끝-
출처 및 참고
http://webkebi.zany.kr:9003/board/bView.asp?Code=17&aCode=1677&cBlock=0&cPageNo=1&sType=0&sString=
https://www.techonthenet.com/sql/is_not_null.php
홍형경, 『오라클 SQL과 PL/SQL을 다루는 기술』, 길벗(2015)
'IT > DB' 카테고리의 다른 글
[ORACLE] 집합연산자 정리 (UNION, INTERSECT...) (0) | 2017.03.12 |
---|---|
[ORACLE] 오라클 SQL 함수 간단 정리 (0) | 2017.02.27 |
[ORACLE] SQL의 연산자(Operator) 정리 (0) | 2017.01.16 |
[ORACLE] 오라클의 색인(Index) 사용 (0) | 2016.12.31 |
[ORACLE] ORACLE의 제약조건(Constraints) (0) | 2016.12.20 |