<목차>
ㅇ LIKE 연산자
ㅇ 논리 연산자
ㅇ 참고자료 <Do it! 오라클로 배우는 데이터베이스 입문>
ㅇ LIKE 연산자
- 일부 문자열이 포함된 데이터를 조회할 때 사용
- 와일드 카드
- %, _ 는 다른 연산자와 사용하면 그냥 원래 문자로 인식★
- 재작년 정처기 실기문제 : 이씨 성을 가진 자료를 찾아라
오답 : 이름 = '이%'
- = 연산자는 그 값 그대로를 찾는 거니까
- 이름이 이% 인 사람을 찾은 셈이야.
CF. 가장 헷갈려 하는 연산자 중에 하나야
ㅇ % : 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미
'S%' : S로 시작하는 것을 모두 찾아라
'%S' : S로 끝나는 것을 모두 찾아라
'%S%' : S를 포함하는 것을 모두 찾아라
-
테이블에 저장된 포맷을 따라야 함
즉, 현재 테이블의 데이터 포맷을 정확하게 인지하고 있어야 해!
-
예) 날짜 데이터 03/06/17는 2003년 06월 17일을 의미
- 날짜에서 / 는 날짜 포맷의 하나의 옵션일 뿐이야
- 2006을 넣으면 20/06 으로 인식
-
실습 : 2006년에 입사한 사원의 이름과 날짜 구하기
- 오답1 : '%2006' (= 20/06 으로 끝나는) = 20월 06일에 입사한 사원 (no row selected. 나옴)
- 오답2 : '%06' (=06으로 끝나는) = 06일에 입사한 사원 (2 rows selected. 나옴)
- 정답 : '06%' = 06으로 시작하는 = 06년도 입사한 사원
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '06%'
ㅇ _ (언더바) 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
'_o%' : 앞에서 두 번째 글자가 o인 것을 모두 찾아라
'__a%' : 앞에서 세 번째 글자가 a인 것을 모두 찾아라
'%a_' : 뒤에서 두 번째 글자가 a인 것을 모두 찾아라
'b_' : 두 자리 글자 중, 맨 앞의 글자가 b인 것을 찾아라
ㅇ 논리 연산자
ㅇ AND 연산자
- 조건이 여러 개라서 WHERE 절에 조건을 추가할 때 사용
- 조건을 전부 만족할 때 출력
- AND 뒤에 새로운 조건식 추가해야 해 ★ (가장 많이 틀리는 부분)
- 예) did= 90 and 50 (X)
did = 90 AND did = 50 (O) 조건식 전체를 다시 써줘야 해
- 조건식 = 컬럼 + 연산자 + 값
ㅇ 실습 : 90번 부서에 근무하는 사원 중 급여가 5000 이상인 사람은?
- 조건1) 90번 부서 근무
- 조건2) 급여 5000 이상
WHERE department_id = 90
AND salary>= 5000
ㅇ OR 연산자
- 조건이 여러 개라서 WHERE 절에 조건을 추가할 때 사용
- 조건을 하나라도 만족하면 출력
- AND와 용법은 같아
ㅇ 실습 : 급여 10000 이상 이거나 업무 이름 사이에 man 있는 사람은?
- 조건1) 급여 10000 이상
- 조건2) 업무 이름 사이에 man 있는 사람
- 급여 만 이상이면서 맨 안 들어가는 애들도 출력
업무에 맨 들어가면서 급여 만 안되는 애들도 출력
(원래 and 실습 예제인데 or에 사용하니 문제의 의미가 없어지긴 하네;;ㅎㅎ 원래 급여 10000 이상이면서 man 붙는 사람이 얼마나 있나 보는 분석이었는데)
WHERE salary>= 10000
OR job_id LIKE '%man%'
ㅇ NOT 연산자
WHERE 컬럼 NOT IN (~, ~, ~) : ~, ~, ~ 가 아닌 것 찾기
WHERE 컬럼 NOT BETWEEN A AND B : 이상, 이하를 부정하니까 미만, 초과가 돼
WHERE 컬럼 NOT LIKE '%A%' : %A% 를 가지지 않은 것 찾기
WHERE 컬럼 IS NOT NULL : 값이 있는 것 찾기
- 단일 연산자 앞에는 NOT 안 써. NOT = , NOT < 이렇게 쓰면 안 돼
∵ 얘는 부정 연산자 <>, != 존재하니까
- 쓸 수 있기는 하지만 오라클 전용 문법은 아니라서 지양해
- 어떻게 사용하냐면
WHERE NOT department_id = 90
컬럼 이름 앞에 NOT을 붙여서 전체를 부정할 때
ㅇ 실습 : 잡 아이디가 ~,~,~가 아닌 사원을 찾아라.
SELECT last_name, job_id
FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP')
CF. NOT IN 은 모두 아니어야 해
- ~(p∨q) = ~p∧~q
- NOT IN (A, B, C) : A도 B도 C도 모두 아니다.
ㅇ 우선순위 규칙

- 7, 8번은 알아둬 : AND가 OR보다 우선순위가 빨라 (곱하기가 더하기보다 빠른 것처럼)
- WHERE a
OR b
AND c
순으로 써져 있어도 AND 먼저 처리
- OR 먼저 처리하고 싶으면 괄호 쓰기
WHERE (a
OR b)
AND c
ㅇ 실습1
- 조건1) 업무가 'AD_PRES' 이면서 급여 15000 초과
- 조건2) 업무가 'SA_REP'

SELECT last_name, job_id, salary
FROM employees
WHERE job_id = 'SA_REP'
OR job_id = 'AD_PRES'
AND salary > 15000
- 실습2
- 조건1) 업무가 'AD_PRES' 이면서 업무가 'SA_REP'
- 조건2) 급여 15000 초과

SELECT last_name, job_id, salary
FROM employees
WHERE (job_id = 'SA_REP'
OR job_id = 'AD_PRES') 괄호 잘 챙겨주자!!
AND salary > 15000