Database
[Oracle] WHERE절과 비교연산자와 예제
홍크
2021. 5. 26. 20:05
728x90
이번 게시물에 핵심 기능을 알아보자
--WHERE절 형태
SELECT 컬럼명
FROM 테이블명
WHERE 조건식 -> 자바의 IF와 같다.
비교연산자
( >, <, >=, <=, =, !=, <> )
NULL, IS NULL(= NULL), IS NOT NULL( != NULL )
AND(&&), OR(||),
처리 우선순위 : NOT > AND > OR
-- ALL (=AND)
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = ALL('값', '값'); ex 이름
-- WHERE 컬럼명 = '값' AND 컬럼명 '값' 이랑 동일한 내용
--활용 예시
SELECT
*
FROM employees
WHERE first_name = ALL('Julia', 'John');
-- WHERE first_name = 'Julia' AND first_name 'John'
-- ANY (=OR)
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = ANY(값, 값, 값);
-- 활용 예시
SELECT first_name, salary
FROM employees
WHERE salary = ANY(8000, 3200, 6200);
-- IN --IN()에 있는 값 중에서 어느 하나라도 일치하면 TRUE
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 IN(값, 값, 값);
-- NOT IN --IN()에 있는 값을 제외한 나머지 값
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 NOT IN(값, 값, 값);
-- BETWEEN 범위 연산자 A~B사이의 값을 나타낸다.
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 BETWEEN A AND B;
--WHERE 컬럼명 >= A AND 컬럼명 <= B; 위와 동일하다
-- NOT BETWEEN
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 NOT BETWEEN A AND B;
--WHERE 컬럼명 >= A AND 컬럼명 <= B; 위와 동일하다.
LIKE에서는 '와일드카드'를 사용할 수 있다.
와일드카드 : 한 개 혹은 0개 이상의 문자를 대신해서 사용하기 위한 특수문자
% : 0개 이상의 어떤 문자를 의미
_ : 1개의 단일 문자를 의미
-- LIKE --자바의 contains와 동일
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 LIKE 'A_CD_F'; -- _ 는 한글자가 어떠한 문자든 허용
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 LIKE 'K%y';
%는 글자수에 제한 없이 모두 허용
%에 위치에 따라 의미가 다르다.
ex) 'K%' -- 첫글자가 K
'%a%' -- a가 앞뒤 상관없이 포함
WHERE hire_date >= '06/01/01' AND hire_date <= '06/12/31';
WHERE hire_date LIKE '06%'; --위보다 훨씬 간결함
활용 예시와 실습 문제
/*
SELECT
FROM
WHERE 조건절 -> IF
비교연산자 ( >, <, >=, <=, =, !=, <> )
NULL, IS NULL(= NULL), IS NOT NULL( != NULL )
AND(&&), OR(||),
*/
-- 이름 -> Julia
SELECT first_name, last_name
FROM employees
WHERE first_name = 'Julia';
-- 급여가 $9000 이상인 사원
SELECT first_name, salary
FROM employees
WHERE salary >= 9000;
-- 이름이 Shanta 보다 큰 이름
SELECT first_name
FROM employees
WHERE first_name > 'Shanta';
-- 이름의 첫 스팰링이 J보다 큰 이름
SELECT first_name
FROM employees
WHERE first_name > 'J';
-- 매니저가 없는 사원
SELECT first_name
FROM employees
WHERE manager_id IS NULL;
-- WHERE manager_id = NULL;
-- WHERE manager_id = '';
-- AND, OR
SELECT first_name
FROM employees
WHERE first_name = 'Shanta'
AND first_name = 'Julia';
SELECT first_name
FROM employees
WHERE first_name = 'Shanta'
OR first_name = 'Julia';
-- 이름 John, 월급은 5000이상
SELECT first_name, salary
FROM employees
WHERE first_name = 'John'
AND salary >= 5000;
-- 2007년 12월 31일 이후에 입사한 사원 출력
SELECT first_name, hire_date
FROM employees
WHERE hire_date > '07/12/31';
SELECT first_name, hire_date
FROM employees
WHERE hire_date > TO_DATE('20071231', 'YYYYMMDD');
-- ALL (=AND), ANY(=OR)
SELECT
*
FROM employees
WHERE first_name = ALL('Julia', 'John');
-- WHERE first_name = 'Julia' AND first_name 'John'
SELECT
*
FROM employees
WHERE first_name = ANY('Julia', 'John');
-- 8000, 3200, 6000
SELECT first_name, salary
FROM employees
WHERE salary = ANY(8000, 3200, 6200);
-- IN, NOT IN
SELECT first_name, salary
FROM employees
WHERE salary IN(8000, 3200, 6200);
SELECT first_name, salary
FROM employees
WHERE salary NOT IN(8000, 3200, 6200);
SELECT first_name
FROM employees
WHERE first_name IN('Julia', 'John');
-- BETWEEN 범위 연산자
SELECT first_name, salary
FROM employees
--WHERE salary >= 3200 AND salary <= 9000;
WHERE salary BETWEEN 3200 AND 9000;
SELECT first_name, salary
FROM employees
--WHERE salary >= 3200 AND salary <= 9000;
WHERE salary NOT BETWEEN 3200 AND 9000;
-- LIKE == contains
SELECT first_name
FROM employees
WHERE first_name LIKE 'G_ra_d'; -- _ 한글자가 어떠한 문자든 허용
SELECT first_name
FROM employees
WHERE first_name LIKE 'K%y'; -- % 글자수에 제한 없이 모두 허용
SELECT first_name
FROM employees
WHERE first_name LIKE 'K%'; -- 첫글자가 K
SELECT first_name
FROM employees
WHERE first_name LIKE '%a%'; -- a가 앞뒤 상관없이 포함
SELECT first_name, hire_date
FROM employees
WHERE hire_date >= '06/01/01' AND hire_date <= '06/12/31';
SELECT first_name, hire_date
FROM employees
WHERE hire_date LIKE '06%'; --위보다 훨씬 간결함
SELECT first_name, phone_number
FROM employees
WHERE phone_number LIKE '590%';
728x90