샘플 스키마 : HR
설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.
행의 조건을 기술함으로써 테이블 내의 원하는 결과만 검색하는 WHERE 절에 대해 배워본다.
No. 01 |
|
| |
WHERE 절을 이용한 검색 조건 |
기본 구조
SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}
FROM 테이블명
WHERE 조건;
- WHERE 절은 FROM 절 바로 뒤에 쓴다.
- 조건을 통해 컬럼 내에 데이터를 제한한다.
- 검색 조건이 문자이거나 날짜인 경우 반드시 단일 인용 부호를 사용해야 한다.
- 조건에 사용되는 비교 연산자
연산자 |
의 미 |
|
= |
같다 |
|
> |
크다 |
|
< |
작다 |
|
>= |
크거나 같다 |
|
<= |
작거나 같다 |
|
<>, !=, ^= |
같지 않다 |
|
◈ 예제
▶ 이름이 'Ellen'인 사원의 사원번호, 메일, 직업, 급여 정보
select first_name, employee_id, email, job_id, salary
from employees
where first_name = 'Ellen';
※ 조건의 내용이 영문일 경우 대소문자를 구별해야 한다.
▶ 100번 부서에 속한 사원들의 사원번호, 이름 정보
select employee_id, first_name
from employees
where department_id = 100;
널 값의 비교 연산
널 값을 검색하는 경우 널 값은 일반 연산, 비교 연산이 불가능하기 때문에 다음의 연산자를 사용한다.
IS NULL : 널 값을 검색
IS NOT NULL : 널이 아닌 값을 검색
◈ 예제
▶ 보너스를 받지 못하는 사원의 이름, 월급, 전화번호를 검색
select first_name, salary, phone_number
from employees
where commission_pct is null;
No. 02 |
|
| |
논리 연산자 |
기본 구조
SELECT * | {DISTINCT] 컬럼명 or 표현식 [별명], …}
FROM 테이블명
WHERE 조건 [논리연산자 조건 …];
- 논리 연산자는 여러 개의 조건을 사용할 때 쓰인다.
- AND, OR, NOT의 논리 연산자를 이용한다.
- 두 개 이상의 논리연산을 할 때는 반드시 괄호로 연산의 우선순위를 결정하는 것이 좋다.
- AND 연산자가 OR 연산자보다 우선순위가 높다.
연산자 |
설 명 |
|
AND |
조건을 모두 만족해야만 검색 |
|
OR |
조건 중 하나만 만족해도 검색 |
|
NOT |
조건을 만족하지 않아야 검색 사용 NOT IN, NOT BETWEEN, NOT LIKE, NOT NULL |
◈ 예제
▶ 60번 부서원들 중 급여가 5000 이상인 사원의 이름, 사원번호, 메일, 직업, 상사번호 정보
select first_name, employee_id, email, job_id, manager_id
from employees
where department_id = 60
and salary >= 5000;
▶ 부서 번호가 60이거나 급여가 5000 이상인 사원의 이름, 사원번호, 메일, 직업, 상사번호 정보
select first_name, employee_id, email, job_id, manager_id
from employees
where department_id = 60
or salary >= 5000;
60번 부서원들과 급여가 5000 이상인 사원이 모두 검색 되었다.
▶ 부서 번호가 60이 아닌 사원의 이름, 사원번호, 메일, 직업, 상사번호 정보
select first_name, employee_id, email, job_id, manager_id
from employees
where not department_id = 60;
NOT 연산자는 보통 위의 예제처럼 단일로 쓰이지 않는다.
NOT 연산자를 사용할 경우 아직 배우지 않았지만 위에 명시한 연산자들과 자주 쓰인다.
▶ JOB_ID가 'IT_PROG' 또는 'FI_ACCOUNT' 이면서 급여가 7000 이상인 사원을 검색하려 할 때
A
select first_name, job_id, salary
from employees
where job_id = 'IT_PROG'
or job_id = 'FI_ACCOUNT'
and salary >= 7000;
B
select first_name, job_id, salary
from employees
where (job_id = 'IT_PROG'
or job_id = 'FI_ACCOUNT')
and salary > = 7000;
두 문장은 괄호를 제외하고 완전히 같은 문장이지만 결과는 다르다.
결과가 다른 이유는 AND 연산자가 OR 연산자보다 우선순위가 높기 때문이다.
A 문장은 job_id가 'FI_ACCOUNT' 이면서 급여가 7000 이상인 사원들과 job_id가 'IT_PROG'인 사원들을 검색한 문장이고,
B 문장은 job_id가 'IT_PROG'와 'FI_ACCOUNT'인 사원들 중에서 급여가 7000 이상인 사원들을 검색한 문장이다.
한마디로 논리 연산자를 두 개 이상 사용할 경우 괄호를 사용하여 우선순위를 정해주어야 정확한 결과를 얻을 수 있다.
No. 03 |
|
| |
기타 연산자 (BETWEEN, IN, LIKE) |
BETWEEN 연산자 기본 구조
SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}
FROM 테이블명
WHERE 컬럼 BETWEEN 값1 AND 값2;
- 컬럼의 값이 값1 이상 값2 이하인 값을 검색한다.
- 값1은 반드시 값2보다 작아야 한다.
- AND 연산자를 사용하여 대체가능 하지만, 가독성을 위해 'BETWEEN ~ AND ~'를 사용
select first_name, salary
from employees
where salary between 5000 and 7000;
IN 연산자 기본 구조
SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}
FROM 테이블명
WHERE 컬럼 IN (값1, 값2, …);
- 지정한 값 중 일치하는 값이 하나라도 있으면 검색한다.
- OR 연산자 = 연산자로 대체 가능하다.
select first_name, employee_id, salary
from employees
where department_id in (10, 60);
LIKE 연산자 기본 구조
SELECT * | {[DISTINCT] 컬럼명 or 표현식 [별명], …}
FROM 테이블명
WHERE 컬럼 LIKE '비교 문자열';
- 문자 전용 비교 연산자이다.
- 문자열의 일부만으로 검색 할 수 있다.
- 와일드 문자를 사용한다.
- '_' : 반드시 한 개의 문자를 대체한다.
- '%' : 문자열을 대체하며, 문자가 없는 경우도 포함된다.
- 와일드 문자 자체를 검색할 때는 ESCAPE 절(ESCAPE '지정할 문자')을 사용한다.
와일드 문자 사용 예
예 문 |
설 명 |
|
'%s' |
's'로 끝나는 모든 문자열 |
|
's%' |
's'로 시작하는 모든 문자열 |
|
'%s%' |
's'를 포함하는 모든 문자열 |
|
'_s' |
's'로 끝나는 두 글자 단어 |
|
's__' |
's'로 시작하는 세 글자 단어 |
|
'%s!_%' |
ESCAPE '!'으로 지정한 경우, 's_'가 포함된 문자열 |
|
'__!%' |
ESCAPE '!'으로 지정한 경우, '%'로 끝나는 세 글자 단어 |
|
select first_name, employee_id, department_id
from employees
where first_name like 'J%';
▶ 이름의 두 번째 알파벳이 'o'인 사원의 이름, 사원번호, 부서번호 정보
select first_name, employee_id, department_id
from employees
where first_name like '_o%';
▶ 이름에 '%'가 포함된 사원의 이름, 사원번호, 부서번호 정보
select first_name, employee_id, department_id
from employees
where first_name like '%!%%' escape '!';
이 예제에서는 결과는 나오지 않는다.
SQL문이 잘못된 것이 아니라 이름에 '%가 포함된 사원이 없기 때문이다.
escape 문자로 지정한 '!' 문자 뒤에 쓰여진 '%'나 '_'는 와일드 문자가 아니라 일반 문자로 인식된다.
'SQL' 카테고리의 다른 글
[SQL 06] 단일 행 함수 - 문자 함수 (0) | 2017.12.03 |
---|---|
[SQL 05] ORDER BY 절 (0) | 2017.12.03 |
[SQL 03] SELECT 문 (0) | 2017.11.30 |
[SQL 02] SQL Developer 간단 사용법 & SQL 언어 (0) | 2017.11.29 |
[SQL 01] HR schema 구조 (0) | 2017.11.29 |