모든지 기록하자!

[Oracle] WHERE절과 비교연산자와 예제 본문

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

'Database' 카테고리의 다른 글

[Oracle] SELECT문, WHERE절, 비교연산자 기초 예제  (0) 2021.05.26
[Oracle] ORDER BY , GROUP BY 와 예제  (0) 2021.05.26
[Oracle] SELECT문과 예제  (0) 2021.05.26
[Oracle] Standard Function  (0) 2021.05.25
[Oracle] 기본 입출력  (0) 2021.05.25
Comments