Daily coding
Oracle day 2 - DML : Select & Where 본문
SELECT2 : WHERE 절
WHERE : 자바의 IF문과 같음 ( 조건절)
표현식
1. 비교연산자 ( >, <, >=, <=, =, !=, <> )
- = : 자바와 다르게 1개로 사용 ( 자바 : == )
- <> : 같지 않다 ( != )
2. NULL, = NULL, IS NULL, IS NOT NULL
3. ( ) (우선순위연산), NOT, AND ( &&없음 ), OR( || 다른기능 )
구조
SELECT
FROM
( WHERE 조건 ) -- > 생략가능
1. = 연산자
SELECT first_name, last_name, salary
FROM employees
WHERE first_name = 'Julia';
-- 대소문자 구문없으면 다른 결과 나온다
SELECT first_name, last_name, salary
FROM employees
WHERE first_name = 'julia'; --> 이 코드는 결과가 나오지 않음
2. > 연산자
-- 급여가 $9000 이상인 사원 찾기
SELECT first_name, salary
FROM employees
WHERE salary >= 9000;
* 문자열에도 크기 비교 연산자를 사용할 수 있다 (>, <)
-- 이름이 Shanta 보다 큰 이름 ( 글자의 아스키코드 값이 큰 것 )
SELECT first_name, salary
FROM EMPLOYEES
WHERE first_name >= 'Shanta';
-- 모든 철자를 다 비교해서 Shanta보다 스펠이 뒤에 있는 값이 나온다
SELECT first_name, salary
FROM employees
WHERE first_name >= 'a';
-- 소문자 a는 아무것도 안나옴
( 테이블에 들어있는 값들은 모두 대문자로 시작하고 a의 아스키 값은 알파벳 중 가장 큼)
SELECT first_name, salary
FROM employees
WHERE manager_id = ' '; ----> ' ' : 빈 문자열을 찾음, NULL 이 아님
3. IS NULL / IS NOT NULL
SELECT first_name, salary
FROM employees
WHERE manager_id IS NULL; ----> : NULL 값을 찾음
SELECT first_name, salary
FROM employees
WHERE manager_id IS NOT NULL; ----> NULL이 아닌 값을 찾음
4. AND / OR
* AND
SELECT *
FROM employees
WHERE first_name = 'Shanta'
AND first_name = 'John';
-- 아무 것도 안나온다 (이름이 2개인 데이터가 없기 때문에)
* OR
SELECT *
FROM employees
WHERE first_name = 'Shanta'
OR first_name = 'John';
-- 이름이 John 이거나 Shanta 인 사람을 찾아줌
-- 이름이 John, 월급이 5000 이상인 사람 찾기
SELECT first_name, salary
FROM employees
WHERE first_name = 'John'
AND salary >=5000;
-- 2007년 12월 31일 이후에 입사한 사원 찾기
-- 방법1
SELECT first_name, hire_date
FROM employees
WHERE hire_date > '07/12/31';
-- 방법2 : TO_DATE 사용
SELECT first_name, hire_date
FROM employees
WHERE hire_date > TO_DATE('20071231','YYYYMMDD');
--> 이 방법은 자바에서 데이터 가져왔을 때 그 형식에 맞추어 데이터 산출가능
5. ALL / ANY
* ALL(=AND)
-- ALL( A, B) : A AND B
SELECT *
FROM employees
WHERE first_name = ALL('Julia', 'John');
= WHERE first_name ='Julia' AND first_name ='John' ;
* ANY( A, B) : A OR B
SELECT *
FROM employees
WHERE first_name = ANY('Julia', 'John');
< ANY의 사용법 예시 >
-- 연봉이 8000, 3200, 6000인 사람만 뽑기
SELECT first_name, salary
FROM employees
WHERE salary = ANY(8000,3200,6000);
-- 여러 값을 넣어둔 컬럼에 다양한 값을 한번에 가져올 때 사용
6. IN / NOT IN
-- IN : OR과 쓰임새가 비슷하다
SELECT first_name, salary
FROM employees
WHERE salary IN (8000, 3200, 6000);
----> salary 의 값이 8000, 3200, 6000 중 하나인 데이터들
-- NOT IN
SELECT first_name, salary
FROM employees
WHERE salary NOT IN (8000, 3200, 6000);
----> salary 의 값이 8000, 3200, 6000 이 아닌 데이터들
7. EXISTS / NOT EXIST
* EXISTS
SELECT first_name, job_id
FROM employees e -- 테이블에도 alias (별칭)을 붙일 수 있음
WHERE NOT EXISTS ( SELECT 1
FROM dual
WHERE e.job_id = 'IT_PROG' );
-- exists 는 1과 0 밖에 없다 (있다/없다)
-- 1이 있을 때만 출력이 되고 0은 출력이 되지 않는다
-- exists 는 Sub Query (쿼리문 안에 쿼리문) 으로 작성해야 함
* NOT EXISTS
SELECT first_name, job_id
FROM employees e -- 테이블에도 alias (별칭)을 붙일 수 있음
WHERE NOT EXISTS ( SELECT 1
FROM dual
WHERE e.job_id = 'IT_PROG' );
-- Sub Query문이 false인 경우면 출력한다.
8. BETWEEN / NOT BETWEEN : 범위 연산자
-- salary >= 3200 AND salary <= 9000
-- salary BETWEEN 3200 AND 9000
-- 위 두개의 코드는 같은 결과를 출력한다.
* BETWEEN
SELECT first_name, salary
FROM employees
WHERE salary BETWEEN 3200 AND 9000;
SELECT first_name, salary
FROM employees
WHERE salary > 3200 AND salary < 9000;
* NOT BETWEEN
SELECT first_name, salary
FROM employees
WHERE salary NOT BETWEEN 3200 AND 9000;
-- 아래의 결과와 같다
SELECT first_name, salary
FROM employees
WHERE salary < 3200 OR salary > 9000;
9. LIKE / NOT LIKE
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'G_ra_d'; --> _ 는 한 개의 문자를 의미한다
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'K%y'; --> %는 글자의 제한이 없다. 중간에 들어가는 모든 글자 +
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE '%Al%';
--> %가 앞에 붙어도 맨 앞글자가 Al인 데이터와 중간에 Al이 붙은 글자를 같이 불러온다
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE '%e%'; --> 데이터에 e(소문자) 가 들어간 모든 데이터를 불러온다
-- 위의 코드는 문자열 검색에 유용하다.
-- %, _ 는 날짜에도 적용이 된다.
SELECT first_name,hire_date
FROM employees
WHERE hire_date LIKE '0_/12%'; ---> 00~09년도 사이의 12월 입사자를 모두 찾아준다.
'DB > Oracle' 카테고리의 다른 글
Oracle day 3 - Select와 Join (0) | 2019.12.15 |
---|---|
Oracle day 2 - DML : Select & Where 문제+풀이 (0) | 2019.12.12 |
Oracle day 2 - DML : Select (0) | 2019.12.12 |
Oracle day 1 - Standard function 오라클 함수 (0) | 2019.12.11 |
Oracle day 1 - 기본 문법 및 자료형 (0) | 2019.12.11 |