논리 조건식은 조건절에서 AND, OR, NOT을 사용하는 조건식을 말합니다. AND는 모든 조건을 만족해야 하고 OR는 여러 조건 중 하나만 만족해도 TRUE를 반환합니다. NOT은 조건식 평가 결과가 거짓(FALSE) 일 때 원하는 결과, 즉 TRUE를 반환합니다
SELECT employee_id, salary
FROM employees
WHERE NOT(salary >= 2500)
ORDER BY employee_id;
결과 출력
이 쿼리문은 NOT으로 급여가 2500보다 크거나 같지 않은 사원, 즉 2500 이하인 사람들을 반환 하고 있습니다.
NULL조건식
NULL조건식은 특정 값이 NULL인지 여부를 체크하는 조건식입니다. 앞서 UPDATE문을 알아보면서 NULL인지 여부는 IS NULL과 IS NOT NULL로 체크한다는 내용을 학습했습니다.
특정 컬럼 값이 NULL인지의 여부를 체크할 때 등호 연산자 (=, <>)를 사용하면 제대로 비교하지 못합니다.
예) "salary = NULL" or "salary <> NULL" 형태로 비교하면 안 되고 "salary IS NULL" or "salary IS NOT NULL" 형태로 비교해야 합니다.
BETWEEN AND 조건식
BETWEEN은 범위에 해당되는 값을 찾을 때 사용하는데 크거나 같고 작거나 같은 값을 찾는다, 따라서 '>='와'<=' 논리 연산자로 변환이 가능합니다.
다음은 급여가 2000~2500 사이에 해당하는 사원을 조회하는 쿼리입니다,
SELECT employee_id, salary
FROM employees
WHERE salary BETWEEN 2000 AND 2500
ORDER BY employee_id;
출력 결과
IN 조건식
IN 조건식은 조건절에 명시한 값이 포함된 건을 반환하는데 앞에서 배웠던 ANY와 비슷합니다.
SELECT employee_id, salary
FROM employees
WHERE salary IN (2000, 3000, 4000)
ORDER BY employee_id;
출력 결과
이 쿼리로 급여가 2000, 3000, 4000 에 포함되는 사원을 추출한 결과로, IN 역시 OR 조건으로 변환이 가능하며 '=ANY'형태로 바꿔 쓸 수 있다. 다만 ANY는 등호 연산자뿐만 아니라 '>' , '>=', '<', '<=', '<>', '!='등의 비교 연산자도 사용할 수 있다는 점이 다릅니다.
SELECT employee_id, salary
FROM employees
WHERE salary NOT IN (2000, 3000, 4000)
ORDER BY employee_id;
결과 출력
이 쿼리는 NOT IN 을 이용해서 급여가 2000, 3000, 4000 이 아닌 건을 조회하고 있습니다. 조건을 풀어쓰면 "salary <> 2000 AND salay <> 3000 AND salary <> 4000"이며 "<> ALL"로도 바꿔 쓸 수 있습니다.
EXISTS조건식
EXISTS 조건식 역시 IN과 비슷하지만 후행 조건절로 값의 리스트가 아닌 서브 쿼리만 올 수 있습니다.
또한 서브 쿼리 내에서 조인 조건 (a.department_id = b.department_id)이 있어야 합니다.
SELECT department_id, department_name
FROM departments a
WHERE EXISTS (
SELECT * FROM employees b
WHERE a .department_id = b.department_id
AND b.salary > 3000)
ORDER BY a.department_name;
결과 출력
LIKE조건식
LIKE 조건식은 문자열의 패턴을 검색할 때 사용하는 조건식입니다. 예를 들어, 사원 테이블에서 사원 이름이 'A'로 시작되는 사원을 조회하는 쿼리를 작성한다면 다음과 같이 LIKE 조건식을 사용합니다.
SELECT emp_name
FROM employees
WHERE emp_name LIKE 'A%'
ORDER BY emp_name;
결과 출력
LIKE 'A%'의 의미는 사원명 첫 글자는 A로 시작하되 나머지는 어떤 글자가 와도 상관없이 모두 조회하라는 의미입니다.
SELECT emp_name
FROM employees
WHERE emp_name LIKE 'Al%'
ORDER BY emp_name;
결과 출력
Al로 시작하는 모든 사원을 조회한 쿼리입니다. '%'는 앞, 뒤 중간 어디나 올 수 있으며 조건식을 검색할 때 대소문자를 구분한다는 점을 주의하자, '%'다르게 '_'는 나머지 글자 전체가 아닌 한 글자만 비교합니다.
CREATE TABLE EX3_5 (
names VARCHAR2(30));
실습용 테이블 생성
INSERT INTO EX3_5 VALUES ('홍길동');
INSERT INTO EX3_5 VALUES ('홍길순');
INSERT INTO EX3_5 VALUES ('홍길자');
INSERT INTO EX3_5 VALUES ('홍남길몽');
데이터 삽입
SELECT * FROM EX3_5
WHERE names LIKE '홍길%';
결과 출력
SELECT * FROM EX3_5
WHERE names LIKE '홍길_';
결과를 보면 알수 있듯이 홍길남 몽의 경우 '%'를 사용하고 조건을 바꾸면 조회가 가능하지만 _를 사용하면 한 글자만 비교하므로 검색되지 않습니다.
'Oracle' 카테고리의 다른 글
Oracle cmd를 사용한 계정만들기, 조회 (0) | 2022.07.25 |
---|---|
Oracle 숫자 함수 (0) | 2022.06.21 |
Oracle 의사컬럼, 연산자, 표현식, 조건식 (0) | 2022.06.16 |
Oracle 그룹함수.연산자 (0) | 2022.06.16 |
Oracle (UP.MERGE.DEL) (0) | 2022.06.15 |