Coding Note/SQL

SQL DUAL 테이블 / SELECT문 WHERE절 (비교연산자, NULL, IS NULL, IS NOT NULL, AND, OR, IN, LIKE)

푸린이 2021. 12. 26. 19:37

* DUAL 테이블

- 가상테이블, 임시테이블 (값만 확인)

-- 1번
SELECT 1 FROM DUAL;

-- 2번
SELECT 1, 'A', 2, 'HELLO' FROM DUAL;

-- 3번
SELECT TO_DATE('20211222', 'YYYYMMDD') FROM DUAL;

 

* SELECT 문

SELECT

FROM

WHERE → 조건절(if)

 

-비교연산자 : >, <, >=, <=, !=, <>

                  !=, <> : 서로 다를 때

- NULL, IS NULL, IS NOT NULL → =NULL로 사용할 수 없음

- AND(Java : &&), OR(Java : ||), ()→ 우선되는 조건

 

-- 이름이 Julia인 사원 검색

SELECT first_name, LAST_NAME, salary
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';

- Shanta는 포함되지 않음

 

-- 이름의 첫 스펠링이 J보다 큰 이름

SELECT first_name
FROM employees
WHERE first_name > 'J';			-- J부터 나옴(Ja....)
-- WHERE first_name < 'J';		-- J보다 작은 것, J 안나옴

 

-- 매니저(상사)가 없는 사원

SELECT first_name
FROM employees
WHERE manager_id IS NULL;

 

-- 보너스가 없는 사원

SELECT first_name, NVL(commission_pct, 0)
FROM employees
WHERE commission_pct IS NULL;

 

-- 보너스가 있는 사원

SELECT first_name, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

- 보너스가 NULL이 아닌 경우

 

-- AND

SELECT first_name, last_name
FROM employees
WHERE first_name = 'Shanta'
    AND last_name = 'Vollman';

 

-- 이름 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';

- 07/12/31은 포함하지 않음

   -- 외부에서 20071231로 데이터를 받았을 때

SELECT first_name, hire_date
FROM employees
-- WHERE hire_date > '20071231';         			 <- 이렇게 해도 되지만
WHERE hire_date > TO_DATE('20071231', 'YYYYMMDD');		-- 정석

 

-- ALL(=AND), ANY(=OR)

-- 이름이 julia이면서 john인 사람은 없음 => all 조건은 잘 안씀
SELECT * 
FROM employees
-- WHERE first_name = ALL('Julia', 'John');
WHERE first_name = 'Julia' AND first_name = 'John';
-- 이름이 Julia 이거나 John인 경우
SELECT * FROM employees
WHERE first_name = ANY('Julia', 'John');

 

-- 월급여가 8000이거나 3200이거나 6000일 때 이름과 급여

SELECT first_name, salary
FROM employees
WHERE salary = ANY(8000, 3200, 6000);

 

-- IN, NOT IN

SELECT first_name, SALARY
FROM employees
WHERE salary IN(8000, 3200, 6000);

SELECT first_name, SALARY
FROM employees
WHERE salary NOT IN(8000, 3200, 6000);

- OR, ANY와 같음

- = 없이 사용

 

-- BETWEEN 범위 연산자 / NOT BETWEEN

-- 3200과 9000 포함
SELECT first_name, salary
FROM employees
-- WHERE salary >= 3200 AND salary <= 9000;
WHERE (salary BETWEEN 3200 AND 9000);

-- 3200보다 작고, 9000보다 큼
SELECT first_name, salary
FROM employees
WHERE (salary NOT BETWEEN 3200 AND 9000);

 

-- <> ~가 아닌

SELECT first_name, salary
FROM employees
WHERE salary <> 9000;

- WHERE salary != 9000;와 같음

 

-- LIKE

-- _ : 한 글자 허용

SELECT first_name
FROM employees
WHERE first_name LIKE 'G_ra_d';

- _자리에 뭐든 한 글자 들어갈 수 있음

 

-- %

SELECT first_name
FROM employees
WHERE first_name LIKE 'K%y';

- K와 y 사이에 글자 수에 관계 없이 허용

 

SELECT first_name
FROM employees
WHERE first_name LIKE 'A%';

- 첫 글자가 A

 

SELECT first_name
FROM employees
WHERE first_name LIKE '%y';

- 끝 글자가 y

 

SELECT first_name
FROM employees
WHERE first_name LIKE '%e%';

- e가 들어간 이름

 

-- 06년도에 입사한 사원 검색 (2가지 방법)

-- AND로 범위 지정
SELECT first_name, hire_date
FROM employees
WHERE hire_date > '05/12/31' AND hire_date < '07/01/01';

-- 06으로 시작하는 날짜
SELECT first_name, hire_date
FROM employees
WHERE hire_date LIKE '06%';

 

-- 폰번호가 590으로 시작하고 월급이 5000이상

SELECT first_name, phone_number, salary
FROM employees
WHERE phone_number LIKE '590%' and salary > 5000;