DATABASE(oracleDB 11g)/SQL

[SQL]WHERE의 기초

SEUNGSAMI 2019. 1. 24. 14:00

기본적인 WHERE절 문법


SELECT *|{[DISTINCT] column|expression [alias],...}

FROM table

[WHERE condition(s)];


조건(condition(s))이 true인 경우에 해당 조건을 충족하는 행이 반환됨.

이때 조건에 문자열 및 날짜 값이 들어갈 경우 ''으로 묶는다

문자값은 대소문자를 구분, 날짜는 형식을 구분(기본적으로 DD-MON-RR)


연산자의 종류

+ - * / 산술

= < > <= >= 비교

not and or 논리


비교연산자

연산자 

의미 

=

같음

>

초과

>=

이상

<

미만

<=

이하

<>

같지 않다

BETWEEN ... AND ....

두 값 사이(경계값 포함)

IN (set)

값 리스트 중 일치하는 값 검색

LIKE

일치하는 문자 패턴 검색

IS NULL

null 값인지 여부



논리연산자

연산자 

의미 

AND

두 구성 요소 조건이 모두 참인 경우

TRUE를 반환.

OR

구성 요소 중 하나가 참인 경우 TRUE를

반환.

NOT

 조건이 거짓인 경우 TRUE를 반환.



아래는 기본적인 WHERE의 예시이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
select employee_id, last_name AS lname
from employees
where last_name='King';
 
select *
from employees
where department_id = 10
and salary > 3000;
 
select *
from employees
where department_id = 10
or salary > 3000;
 
select * 
from employees
where department_id = 90 
and salary > 3000
and job_id = 'AD_VP';

 
cs


between은 between '하한' and '상한' 으로 작성한다.

다음 예시의 두 코드는 같은 의미이다.

1
2
3
4
5
6
7
8
select *
from employees
where salary >= 2000
and salary <= 3000;
 
select *
from employees
where salary between 2000 and 3000;
cs

문자와, 날짜에도 between을 사용할 수 있다.



IN은 값 리스트중 일치하는 값을 선택할때 사용한다.

다음 예시의 두 코드는 같은 의미이다.

1
2
3
4
5
6
7
8
9
select *
from employees
where department_id = 60
or    department_id = 90
or    department_id = 10;
 
select * 
from employees
where department_id IN (60,90,10);
cs
문자와, 날짜에도 IN을 사용 할 수 있다.


LIKE는 검색 문자열 값의 대체 문자 검색을 수행한다.

검색 조건에는 리터럴 문자나 숫자가 포함될 수 있다.

%는 0개 이상의 문자를 나타내며, _는 한 문자를 나타낸다.

다음 예시는 S로 시작하는 값을 검색하는 것을 말한다.

1
2
3
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%';
cs
_,%는 와일드카드문자로 알아듣는다.
그러므로 '_'를 특수문자로 쓰려면 ESCAPE 식별자를 사용해야한다.
그러므로 내가 'ST_'로 시작하는 값을 검색하려면 'ST\_'로 작성하고 escape를 사용해야 한다.
다음 예시를 참고하자.
1
2
3
select last_name, job_id
from employees
where job_id LIKE 'ST\_%' escape '\';
cs

IS NULL은 NULL인 값을 찾는 것이다.
산술식에 NULL이 들어가면 결과는 무조건 NULL이 되기때문매 NULL=NULL이 true로 출력이 되지 않으므로 값이 찾아지지 않는다.
다음 예시를 참고하자.
1
2
3
select last_name, commission_pct
from employees
where commission_pct IS NULL;

cs


NOT은 다른연산자 앞에 붙고 부정의 값을 찾는 것이다.

다음 예시를 참고하자.

1
2
3
select last_name, salary
from employees
where not salary between 1000 and 3000;
cs


SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.

'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글

[SQL]DEFINE 및 VERIFY 명령  (0) 2019.01.24
[SQL]치환 변수와 바인드 변수  (0) 2019.01.24
[SQL]ORDER BY의 기초  (0) 2019.01.24
[SQL]기본적인 SELECT 문  (0) 2019.01.23
Database란?  (0) 2019.01.23