본문 바로가기
Database/SQL

[SQL] 연산자

by 혀나Lee 2016. 9. 23.

WHERE 절 연산자

 연산자

설명 

 =

같음 

<> 

같지 않음 

!= 

같지 않음 

보다 작음 

<=

보다 작거나 같음 

 !<

보다 작지 않음

>

보다 큼 

>= 

보다 크거나 같음 

!> 

보다 크지 않음 

BETWEEN

지정된 두 값 사이에 있음 

IS NULL

NULL 값임 


연산자 호환성

연산자 중 <>와 !=는 같은 의미이며 보다 작지 않음을 의미하는 !<와 보다 크거나 같음을 의미하는 >=는 동일한 기능을 한다. 이러한 연산자가 모든 DBMS에서 지원되는 것은 아니므로 자세한 내용은 각 DBMS 설명서를 참고해야 한다.

IN 연산자와 OR 연산자

IN 연산자는 조건의 범위를 지정하는 데 사용된다. 값은 콤마로 구분하여 괄호 내에 묶으며, 이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가된다.

SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01', 'BRS01')
ORDER BY prod_name;


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 연산자

LIKE 연산자는 와일드카드를 사용하여 패턴을 사용하여 데이터를 검색한다. 

와일드카드: 값의 일부가 일치하는 경우를 검색하는 데 사용되는 특별한 문자
검색 패턴: 리터럴 텍스트, 와일드카드 문자 또는 이들의 조합으로 만들어지는 검색 조건

연산자가 아닌 연산자. 기술적으로 말해 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

댓글