Data Base/Oracle SQL

23.10.06. Oracle SQL NULL / LIKE 연산

잇꼬 2023. 10. 6. 17:58
728x90
반응형
SMALL

■ NULL 연산자
- NULL 값을 체크하는 연산자 
- IS NULL, IS NOT NULL 

SELECT * 
FROM hr.employees
WHERE commission_pct IS NULL;

SELECT * 
FROM hr.employees
WHERE commission_pct IS NOT NULL;


■ LIKE 연산자
- 문자 패턴만 찾는 연산자 
- % : 0개 이상의 문자를 찾을때 사용
- _ : 1개 문자를 찾을때 사용

SELECT * 
FROM hr.employees
WHERE last_name LIKE 'K%';

SELECT * 
FROM hr.employees
WHERE last_name LIKE '_i%';

SELECT * 
FROM hr.employees
WHERE last_name LIKE '__n%';

- ESCAPE '\' : LIKE 연산자 사용시에 % 또는 _ 를 순수한 문자로 인식할 수 있는 방법.
ESCAPE '(부호)' (부호) 기본적으로는 \ 으로 쓰나, 다양한 기호를 쓸 수 있다. 

ex) 
JOB_ID
-------
HR_REP
HRREP
HR%REP <-
HR_PROG
HR%PROG <-
HR_%REG

[문제]JOB_ID 값 중에 HB%로 시작되는 패턴을 추출해야 한다. 

SELECT * 
FROM hr.employees
WHERE job_id LIKE 'HR\%%' ESCAPE '\';
SELECT * 
FROM hr.employees
WHERE last_name LIKE 'K%';

-- 문자형 타입으로 형변형 후 LIKE 쓰기
SELECT * 
FROM hr.employees
WHERE hire_date LIKE '02%'; 

/*
- 주의!! LIKE 연산자는 문자패턴을 찾는 연산자이기 떄문에 기준컬럼이 문자 컬럼 아닌 다른 유형의 타입의 컬럼을 사용하면 내부적으로 문자타입의 컬럼으로 형변환을 해야한다.
- 주의!! INDEX 가 걸려있는 컬럼이 형변환이 발생하면 인덱스 스캔이 아닌 table full scan 이 발생한다. 
	(table full scan 뜻 : ex) 두꺼운 책을 정독하면서 한 단어를 찾는 거와 같은 것이다.) 
*/



[문제]employees 테이블에 있는 데이터 중에 job_id 가 SA로 시작되고 salary 값이 10000 이상 받는 사원들의 정보를 출력해주세요. 

SELECT *
FROM hr.employees
WHERE job_id LIKE 'SA%'
AND salary >= 10000;


[문제]last_name의 세번째 문자가 'a' 또는 'e' 글자가 포함된 사원들의 정보를 출력해주세요.

SELECT *
FROM hr.employees
WHERE last_name LIKE '__a%'
OR last_name LIKE '__e%';


[문제] employees 테이블에 있는 데이터 중에 job_id 가 SA로 시작되고 salary 값은 10000 이상 받고 2005년도에 입사한(hire_date) 사원들의 정보를 출력해주세요

SELECT *
FROM hr.employees
WHERE job_id LIKE 'SA%'
AND salary >= 10000
AND hire_date BETWEEN '05/01/01' AND '05/12/31' ;
728x90
반응형
LIST