WHERE 절 연산자
연산자 |
설명 |
= |
같음 |
<> |
같지 않음 |
!= |
같지 않음 |
< |
보다 작음 |
<= | 보다 작거나 같음 |
!< | 보다 작지 않음 |
> | 보다 큼 |
>= | 보다 크거나 같음 |
!> | 보다 크지 않음 |
BETWEEN | 지정된 두 값 사이에 있음 |
IS NULL | NULL 값임 |
연산자 호환성
연산자 중 <>와 !=는 같은 의미이며 보다 작지 않음을 의미하는 !<와 보다 크거나 같음을 의미하는 >=는 동일한 기능을 한다. 이러한 연산자가 모든 DBMS에서 지원되는 것은 아니므로 자세한 내용은 각 DBMS 설명서를 참고해야 한다.
IN 연산자와 OR 연산자
OR 연산자는 조건 중에서 조건에 부합되는 결과만 검색된다. 즉, IN 연산자와 같은 기능을 제공한다고 생각하면 된다.
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
ORDER BY prod_name;
그렇다면 왜 IN 연산자를 쓸까?
IN 연산자의 장점
- 목록에 넣을 값이 여러 개일 때, IN 연산자가 보다 쓰기 쉽고 이해하기 쉽다.
- IN을 사용하면 평가 순서를 보다 쉽게 관리할 수 있고 연산자 수도 줄어든다.
- IN 연산자가 OR 연산자보다 실행 속도가 빠르다.
- IN의 가장 큰 장점은 IN 연산자에 다른 SELECT 문을 넣을 수 있다는 것이다. 동적인 WHERE 절을 만들 때 이 장점이 크게 활용된다. (하지만, 불필요한 sub query 로 인해 실행 속도가 늦어질 수 있다.)
LIKE 연산자
술어
퍼센트 기호(%) 와일드카드
가장 자주 사용되는 와일드카드로 검색 문자열 내에서 (%)를 사용하면 개수에 관계없이 모든 문자를 의미한다.
DBMS의 종류와 설정 방식에 따라 검색 시에 대/소문자가 구분되는 경우도 있다. 만약 구분되는 DBMS에서 아래의 query를 실행하면 'fish'가 포함된 행을 검색되지 않는다.
1. Fish라는 단어로 시작하는 모든 제품 검색
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';
2. Fish라는 단어를 포함하는 모든 제품 검색
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%Fish%';
3. Fish라는 단어로 끝나는 모든 제품 검색
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%Fish';
언더스코어(_) 와일드카드
문자열 내에서 (_)를 사용하면 문자 상관없이 하나의 문자만을 의미한다.
사용방법은 퍼센트(%)와 비슷하나 언더스코어(_)는 단 하나의 문자만을 의미하기 때문에 비교하기 위한 문자열 개수만큼 입력해 주어야 한다.
1. 하나의 문자 비교
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '_Fish';
2. 두 개의 문자 비교
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__Fish';
3. 개수 상관 없이 조회
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%Fish';
괄호([]) 와일드카드
괄호([]) 와일드카드는 문자의 모음을 지정하는 데 사용되며, 이 와일드카드가 있는 위치에 이 목록의 문자 중 하나의 일치하는 문자가 있는 행을 조회한다.
1. J나 M으로 시작되는 문자열 조회
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;
결과
cust_contact
------------
Jim Jones
John Smith
Michelle Green
2. J나 M이 아닌 문자로 시작되는 문자열 조회
2.1. ^ 연산자 사용
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[^JM]%'
ORDER BY cust_contact;
2.2. NOT 연산자 사용
SELECT cust_contact
FROM Customers
WHERE NOT cust_contact LIKE '[JM]%'
ORDER BY cust_contact;
와일드카드 사용시 주의할 점
- 와일드카드를 남용해서는 안 된다. 다른 검색 방법이 있다면 그 방법을 쓰는 것이 좋다.
- 와일드카드를 사용할 때는 반드시 필요한 경우가 아니라면 검색 패턴의 시작 부분에 쓰지 않는 것이 좋다. 와일드카드로 시작하는 검색 패턴은 처리 속도가 느리다.
- 와일드카드 문자의 위치에 신경 써야 한다. 위치를 잘못 지정하면 엉뚱한 데이터가 검색될 것이다.
'Database > SQL' 카테고리의 다른 글
[PostgreSQL] 도메인, 인덱스, 트리거 (0) | 2016.09.26 |
---|---|
[PostgreSQL] 제약 조건 (0) | 2016.09.26 |
[PostgreSQL] 함수(Function) (1) | 2016.09.26 |
[SQL] 저장 프로시저(Procedure) (0) | 2016.09.26 |
[SQL] 뷰(View) (0) | 2016.09.23 |
댓글