***************** 연산자 ***************** ===================== IN 연산자 ===================== ``IN`` 연산자는 row와 배열 비교를 위해 사용됩니다. *개요* .. code-block:: sql column_reference IN (val1, val2, ..., valN) column_reference NOT IN (val1, val2, ..., valN) 예제는 아래와 같습니다. .. code-block:: sql -- 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`` 연산자를 사용할 수 있습니다. .. code-block:: sql 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개, 혹은 그 이상의 어떤 문자열을 의미합니다. *개요* .. code-block:: sql string LIKE pattern string NOT LIKE pattern -------------------- ILIKE -------------------- ``ILIKE`` 연산자는 ``LIKE`` 와 같지만 대소문자 구분이 없습니다. 이는 SQL의 표준은 아니며, PostgreSQL의 구현을 빌려왔습니다. *개요* .. code-block:: sql string ILIKE pattern string NOT ILIKE pattern -------------------- SIMILAR TO -------------------- *개요* .. code-block:: sql 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 정규식을 대신해 자바언어와 유사한 정규식을 제공합니다. 두 정규식의 주요 차이점은 문자 클래스에 있습니다. *개요* .. code-block:: sql string ~ pattern string !~ pattern string ~* pattern string !~* pattern +----------+---------------------------------------------------------------------------------------------------+ | 연산자 | 설명 | +==========+===================================================================================================+ | ~ | 주어진 정규식이 string과 매칭될 경우 true를 돌려줍니다. 그렇지 않다면, false를 돌려줍니다. | +----------+---------------------------------------------------------------------------------------------------+ | !~ | 주어진 정규식이 string과 매칭될 경우 false를 돌려줍니다. 그렇지 않다면, true를 돌려줍니다. | +----------+---------------------------------------------------------------------------------------------------+ | ~* | '~' 연산자와 동일하지만, 대소문자 구분이 없습니다. | +----------+---------------------------------------------------------------------------------------------------+ | !~* | '!~' 연산자와 동일하지만, 대소문자 구분이 없습니다. | +----------+---------------------------------------------------------------------------------------------------+ 아래에 몇가지 예제가 있습니다. .. code-block:: sql 'abc' ~ '.*c' true 'abc' ~ 'c' false 'aaabc' ~ '([a-z]){3}bc true 'abc' ~* '.*C' true 'abc' !~* 'B.*' 정규식 연산자들은 SQL 표준은 아닙니다. Tajo는 정규식 연산자들을 PostgreSQL 로부터 빌려왔습니다. *REGEXP 연산자와 RLIKE 연산자 개요* .. code-block:: sql string REGEXP pattern string NOT REGEXP pattern string RLIKE pattern string NOT RLIKE pattern 그러나, 이들은 대소문자 구분이 필요합니다.