연산자

IN 연산자

IN 연산자는 row와 배열 비교를 위해 사용됩니다.

개요

column_reference IN (val1, val2, ..., valN)
column_reference NOT IN (val1, val2, ..., valN)

예제는 아래와 같습니다.

-- this statement filters lists down all the records where col1 value is 1, 2 or 3:
SELECT col1, col2 FROM table1 WHERE col1 IN (1, 2, 3);

-- this statement filters lists down all the records where col1 value is neither 1, 2 nor 3:
SELECT col1, col2 FROM table1 WHERE col1 NOT IN (1, 2, 3);

문자 데이터에 대해서도 IN 연산자를 사용할 수 있습니다.

SELECT col1, col2 FROM table1 WHERE col2 IN ('tajo', 'hadoop');

SELECT col1, col2 FROM table1 WHERE col2 NOT IN ('tajo', 'hadoop');

String 패턴과 매칭 연산자

LIKE

LIKE 연산자는 주어진 string에 대해 패턴 매칭 검사를 한 후 true 혹은 false를 결과로 돌려줍니다. 패턴에 포함된 _ 는 하나의 문자를 의미하고, % 는 0개, 혹은 그 이상의 어떤 문자열을 의미합니다.

개요

string LIKE pattern
string NOT LIKE pattern

ILIKE

ILIKE 연산자는 LIKE 와 같지만 대소문자 구분이 없습니다. 이는 SQL의 표준은 아니며, PostgreSQL의 구현을 빌려왔습니다.

개요

string ILIKE pattern
string NOT ILIKE pattern

SIMILAR TO

개요

string SIMILAR TO pattern
string NOT SIMILAR TO pattern

SIMILAR TO 는 주어진 string에 대해 주어진 패턴이 맞는지를 계산해 true 혹은 false를 돌려줍니다. 또한, LIKE 와 비슷하게, SIMILAR TO 연산자는 _% 를 메타문자로 사용할 수 있습니다.

LIKE 로부터 빌려온 이러한 메타문자들과 더불어, SIMILAR TO 연산자는 더욱 강력한 패턴매칭을 위해 정규식의 다양한 메타문자들을 지원합니다.

메타문자 설명
| 두개의 아이템 중 하나를 의미.
이전 아이템이 0번 이상 반복됨.
이전 아이템이 1번 이상 반복됨.
? 이전 아이템이 0번 혹은 한번 반복됨.
{m} 이전 아이템이 정확히 m번 반복됨.
{m,} 이전 아이템이 m번 혹은 그 이상 반복됨.
{m,n} 이전 아이템이 최소한 m번 반복되고, n번 이상은 반복되지 않음.
[] POSIX 정규 표현식과 같이 문자열 클래스를 의미.
() 괄호 내의 아이템들을 하나의 논리적인 아이템으로 묶음.

. 의 경우는 SIMILAR TO 연산자의 메타문자로 사용되지 않는점을 유의하세요.

정규식

정규식은 string 패턴 매칭을 위한 강력한 도구 입니다. 현재 Tajo에서는, POSIX 정규식을 대신해 자바언어와 유사한 정규식을 제공합니다. 두 정규식의 주요 차이점은 문자 클래스에 있습니다.

개요

string ~ pattern
string !~ pattern

string ~* pattern
string !~* pattern
연산자 설명
~ 주어진 정규식이 string과 매칭될 경우 true를 돌려줍니다. 그렇지 않다면, false를 돌려줍니다.
!~ 주어진 정규식이 string과 매칭될 경우 false를 돌려줍니다. 그렇지 않다면, true를 돌려줍니다.
~* ‘~’ 연산자와 동일하지만, 대소문자 구분이 없습니다.
!~* ‘!~’ 연산자와 동일하지만, 대소문자 구분이 없습니다.

아래에 몇가지 예제가 있습니다.

'abc'   ~   '.*c'               true
'abc'   ~   'c'                 false
'aaabc' ~   '([a-z]){3}bc       true
'abc'   ~*  '.*C'               true
'abc'   !~* 'B.*'

정규식 연산자들은 SQL 표준은 아닙니다. Tajo는 정규식 연산자들을 PostgreSQL 로부터 빌려왔습니다.

REGEXP 연산자와 RLIKE 연산자 개요

string REGEXP pattern
string NOT REGEXP pattern

string RLIKE pattern
string NOT RLIKE pattern

그러나, 이들은 대소문자 구분이 필요합니다.