Where 절
사용자들은 자신이 원하는 자료만을 검색하기 위해 Where 절을 이용하여 출력되는 자료들을 제한할 수 있다. Where 절은 From 절 다음에 위치하며, 여러 연산자를 이용하여 조건을 표현할 수 있다.
연산자
연산이란 프로그램에서 데이터를 처리하여 산출하는 것을 의미한다. 연산자는 바로 이 연산을 수행하기 위해 사용되는 문자이다.
연산자의 종류
비교 연산자
- 비교 연산자
= ~와 같다 > / < ~보다 크다 / 작다 >= / <= ~보다 크거나 / 작거나 같다 - 부정 비교 연산자
!= / <> / ^= 같지 않다 NOT 컬럼명 = ~와 같지 않다 NOT 컬럼명 > ~보다 크지 않다
SQL 연산자
- SQL 연산자
BETWEEN A AND B A 와 B 사이에 있다 IN (LIST) 리스트에 있는 값 중 하나라도 있으면 된다 LIKE '비교문자열' 비교문자열의 형태와 일치하면 된다 (와일드카드 %, _ 사용) IS NULL 값이 NULL 이면 된다
NULL 은 = 로 비교할 수 없으므로 해당 연산자를 사용한다 - 부정 SQL 연산자
NOT BETWEEN A AND B A 와 B 사이에 있지 않다 NOT IN (LIST) 리스트에 있는 값과 모두 일치하지 않는다 IS NOT NULL NULL 값이 아니다 - 와일드 카드 : 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호
% 0개 이상의 어떤 문자를 의미한다
%sue% : sue 가 들어간 모든 문자를 찾는다_ (언더바) 1개인 단일 문자를 의미한다
s_ : s로 시작하고 두 글자인 모든 문자를 찾는다
s_ _ : s로 시작하고 세 글자인 모든 문자를 찾는다
_ s _ : 세 글자이고 중간에 s 가 들어간 모든 문자를 찾는다
논리 연산자 : AND, OR, NOT
연산자의 우선 순위
- () 괄호
- NOT 연산자
- 비교 연산자, SQL 비교 연산자
- AND
- OR
AND 와 OR 을 함께 쓸때에는 순서에 주의하여 () 로 꼭 묶어주어야 한다.
문자 유형 비교 방법
양 쪽이 모두 Char 타입인 경우
Char(L) 타입은 고정길이 문자열이다. 고정 길이를 가지고 있으므로 할당된 변수의 값이 L값보다 작을 경우 그 차이만큼 공백으로 채워진다.
- 양 쪽이 모두 Char 타입인 경우 길이가 서로 다르다면 작은 쪽에 공백을 추가하여 길이를 같게 한다.
(오라클 기준으로, MySQL 이나 postgresql 과는 조금 다를 수 있다. http://sqlfiddle.com/ 사이트를 이용하면 설치 없이 쿼리를 연습할 수 있다)
같은 단어를 각각 Char(5) 와 Char(7) 타입의 row 에 넣었을때를 비교해보자.
replace 를 이용하여 공백을 언더바로 바꿔주면, 같은 단어를 넣었지만 char(7) 타입의 로우에 들어간 단어 뒤에는 공백으로 채워져 있음을 알 수 있다.
- 단어 자체는 같고 공백의 크기만 다르다면 같은 단어로 판단한다.
- 서로 다른 문자가 나올 때 까지 비교하고, 달라진 첫 번째 값에 따라 크기를 결정한다.
i 보다 y 가 더 크므로, teddy 가 teddi 보다 크다. 위처럼 공백의 크기는 판단하지 않는다.
한 쪽이 Varchar 타입인 경우
Varchar(L) 타입은 가변길이 문자열로, L만큼의 최대 길이를 가지며 L값보다 작을 경우 해당 값 만큼'만' 공간을 차지한다. 공백으로 채우지 않는다.
- Varchar 은 공백도 문자로 판단하므로, Char 과 다르게 공백이 있으면 서로 다른 문자라고 판단한다.
Char 일때는 공백이 있어도 같은 문자라고 판단한다.
Char 과 달리 Varchar 는 같은 값이 없다고 판단한다.
이럴 경우 TRIM 함수를 이용하여 공백을 제거한 후 비교하면 같은 값으로 판단한다.
'SQL' 카테고리의 다른 글
GROUP BY, HAVING, ORDER BY (0) | 2021.08.08 |
---|---|
함수(Function) (0) | 2021.07.11 |
DML, DDL, TCL (0) | 2021.06.06 |
성능 데이터 모델링 (0) | 2021.05.21 |
정규화 (0) | 2021.05.17 |