비교 함수

비교 함수 (Comparison Functions)

값을 비교해 참/거짓을 판별하는 함수 모음이에요. 아래 비교 함수들은 UInt8 타입으로 0 또는 1을 반환해요.

출처: 문서

본문

비교 규칙 (Comparison rules)

아래 비교 함수들은 UInt8 타입으로 0 또는 1을 반환해요. 같은 그룹 안의 값만 비교할 수 있어요(예: UInt16UInt64) 하지만 그룹을 넘어서는 비교는 불가능해요(예: UInt16DateTime). 숫자와 문자열의 비교가 가능하며, 문자열과 날짜, 날짜와 시간의 비교도 가능해요. 튜플과 배열의 경우 비교는 사전식(lexicographic)으로 이루어져 좌변과 우변 튜플/배열의 각 대응 요소를 비교해요. 다음 타입들을 비교할 수 있어요:

  • 숫자와 소수(decimals)
  • 문자열과 고정 문자열
  • 날짜
  • 시간이 포함된 날짜
  • 튜플(사전식 비교)
  • 배열(사전식 비교)

문자열은 바이트 단위로 비교돼요. UTF-8로 인코딩된 다중 바이트 문자가 문자열 중 하나에 포함된 경우 예상치 못한 결과가 나올 수 있어요. 다른 문자열 S2를 접두사로 가지는 문자열 S1은 S2보다 길다고 간주돼요.

equals

두 값이 같은지 비교해요.

구문 (Syntax)

equals(a, b)
        -- a = b
        -- a == b

인자 (Arguments)

  • a — 첫 번째 값.
  • b — 두 번째 값.

반환 값 (Returned value)

ab와 같으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 1 = 1, 1 = 2;

응답:

┌─equals(1, 1)─┬─equals(1, 2)─┐
│            1 │            0 │
└──────────────┴──────────────┘

globalIn

in과 같지만 분산 쿼리에서 전역 집합(global set) 분배를 사용해요. 집합이 모든 원격 서버로 전송돼요.

구문 (Syntax)

globalIn(x, set)

인자 (Arguments)

  • x — 확인할 값.
  • set — 값의 집합.

반환 값 (Returned value)

x가 집합에 있으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 1 IN (1, 2, 3)

응답: 1

globalInIgnoreSet

in과 같지만 분산 쿼리에서 전역 집합 분배를 사용해요. 집합을 생성하지 않고 타입 분석에 사용되는 IgnoreSet 변형이에요.

구문 (Syntax)

globalIn(x, set)

인자 (Arguments)

  • x — 확인할 값.
  • set — 값의 집합.

반환 값 (Returned value)

x가 집합에 있으면 1, 그렇지 않으면 0. UInt8

globalNotIn

notIn과 같지만 분산 쿼리에서 전역 집합 분배를 사용해요. 집합이 모든 원격 서버로 전송돼요.

구문 (Syntax)

globalNotIn(x, set)

인자 (Arguments)

  • x — 확인할 값.
  • set — 값의 집합.

반환 값 (Returned value)

x가 집합에 없으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 4 NOT IN (1, 2, 3)

응답: 1

globalNotInIgnoreSet

notIn과 같지만 분산 쿼리에서 전역 집합 분배를 사용해요. 집합을 생성하지 않고 타입 분석에 사용되는 IgnoreSet 변형이에요.

구문 (Syntax)

globalNotIn(x, set)

globalNotNullIn

notNullIn과 같지만 분산 쿼리에서 전역 집합 분배를 사용해요.

구문 (Syntax)

globalNotNullIn(x, set)

반환 값 (Returned value)

x가 집합에 없으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT notNullIn(NULL, tuple(1, NULL))

응답: 1

globalNotNullInIgnoreSet

notNullIn과 같지만 전역 집합 분배를 사용하는 IgnoreSet 변형이에요.

구문 (Syntax)

globalNotNullIn(x, set)

globalNullIn

nullIn과 같지만 전역 집합 분배를 사용해요.

구문 (Syntax)

globalNullIn(x, set)

반환 값 (Returned value)

x가 집합에 있으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT nullIn(NULL, tuple(1, NULL))

응답: 0

globalNullInIgnoreSet

nullIn과 같지만 전역 집합 분배를 사용하는 IgnoreSet 변형이에요.

구문 (Syntax)

globalNullIn(x, set)

greater

두 값의 대소 관계(a > b)를 비교해요.

구문 (Syntax)

greater(a, b)
    -- a > b

반환 값 (Returned value)

ab보다 크면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 2 > 1, 1 > 2;

응답:

┌─greater(2, 1)─┬─greater(1, 2)─┐
│             1 │             0 │
└───────────────┴───────────────┘

greaterOrEquals

두 값의 대소 관계(a >= b)를 비교해요.

구문 (Syntax)

greaterOrEquals(a, b)
    -- a >= b

반환 값 (Returned value)

ab보다 크거나 같으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 2 >= 1, 2 >= 2, 1 >= 2;

응답:

┌─greaterOrEquals(2, 1)─┬─greaterOrEquals(2, 2)─┬─greaterOrEquals(1, 2)─┐
│                     1 │                     1 │                     0 │
└───────────────────────┴───────────────────────┴───────────────────────┘

in

좌변 피연산자가 우변 피연산자 집합의 구성원인지 확인해요. 구성원이면 1, 아니면 0을 반환해요. 좌변의 NULL 값은 건너뛰어요(집합에 없는 것으로 처리).

구문 (Syntax)

in(x, set)

인자 (Arguments)

  • x — 확인할 값.
  • set — 값의 집합.

반환 값 (Returned value)

x가 집합에 있으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 1 IN (1, 2, 3)

응답: 1

inIgnoreSet

in과 같지만 집합을 생성하지 않고 타입 분석에 사용되는 IgnoreSet 변형이에요.

구문 (Syntax)

in(x, set)

isDistinctFrom

두 값 사이의 null-safe "같지 않음" 비교를 수행해요. 값이 서로 다르면(한 값이 NULL이고 다른 값이 NULL이 아닌 경우 포함) true를 반환해요. 값이 같거나 둘 다 NULL이면 false를 반환해요.

구문 (Syntax)

isDistinctFrom(x, y)

인자 (Arguments)

  • x — 비교할 첫 번째 값. 모든 ClickHouse 데이터 타입 가능. Any
  • y — 비교할 두 번째 값. 모든 ClickHouse 데이터 타입 가능. Any

반환 값 (Returned value)

NULL을 비교 가능한 것으로 취급해 두 값이 서로 다르면 true:

  • x != y이면 true.
  • x 또는 y 중 정확히 하나가 NULL이면 true.
  • x = y이거나 x와 y가 모두 NULL이면 false. Bool

예제 (Examples)

쿼리:

SELECT
    isDistinctFrom(1, 2) AS result_1,
    isDistinctFrom(1, 1) AS result_2,
    isDistinctFrom(NULL, 1) AS result_3,
    isDistinctFrom(NULL, NULL) AS result_4

응답:

┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐
│        1 │        0 │        1 │        0 │
└──────────┴──────────┴──────────┴──────────┘

isNotDistinctFrom

두 값 사이의 null-safe "같음" 비교를 수행해요. 값이 같으면(둘 다 NULL인 경우 포함) true를 반환해요. 값이 서로 다르거나 정확히 하나만 NULL이면 false를 반환해요.

구문 (Syntax)

isNotDistinctFrom(x, y)

인자 (Arguments)

  • x — 비교할 첫 번째 값.
  • y — 비교할 두 번째 값.

반환 값 (Returned value)

NULL을 비교 가능한 것으로 취급해 두 값이 같으면 true:

  • x = y이면 true.
  • x와 y가 모두 NULL이면 true.
  • x != y이거나 x 또는 y 중 정확히 하나가 NULL이면 false. Bool

예제 (Examples)

쿼리:

SELECT
    isNotDistinctFrom(1, 1) AS result_1,
    isNotDistinctFrom(1, 2) AS result_2,
    isNotDistinctFrom(NULL, NULL) AS result_3,
    isNotDistinctFrom(NULL, 1) AS result_4

응답:

┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐
│        1 │        0 │        1 │        0 │
└──────────┴──────────┴──────────┴──────────┘

less

두 값의 대소 관계(a < b)를 비교해요.

구문 (Syntax)

less(a, b)
    -- a < b

반환 값 (Returned value)

ab보다 작으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 1 < 2, 2 < 1;

응답:

┌─less(1, 2)─┬─less(2, 1)─┐
│          1 │          0 │
└────────────┴────────────┘

lessOrEquals

두 값의 대소 관계(a <= b)를 비교해요.

구문 (Syntax)

lessOrEquals(a, b)
-- a <= b

반환 값 (Returned value)

ab보다 작거나 같으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 1 <= 2, 2 <= 2, 3 <= 2;

응답:

┌─lessOrEquals(1, 2)─┬─lessOrEquals(2, 2)─┬─lessOrEquals(3, 2)─┐
│                  1 │                  1 │                  0 │
└────────────────────┴────────────────────┴────────────────────┘

notEquals

두 값이 같지 않은지 비교해요.

구문 (Syntax)

notEquals(a, b)
    -- a != b
    -- a <> b

반환 값 (Returned value)

ab와 같지 않으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 1 != 2, 1 != 1;

응답:

┌─notEquals(1, 2)─┬─notEquals(1, 1)─┐
│               1 │               0 │
└─────────────────┴─────────────────┘

notIn

좌변 피연산자가 우변 피연산자 집합의 구성원이 아닌지 확인해요. 집합에 없으면 1, 아니면 0을 반환해요. 좌변의 NULL 값은 건너뛰어요.

구문 (Syntax)

notIn(x, set)

반환 값 (Returned value)

x가 집합에 없으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT 4 NOT IN (1, 2, 3)

응답: 1

notInIgnoreSet

notIn과 같지만 집합을 생성하지 않고 타입 분석에 사용되는 IgnoreSet 변형이에요.

구문 (Syntax)

notIn(x, set)

notNullIn

좌변 피연산자가 우변 피연산자 집합의 구성원이 아닌지 확인해요. notIn과 달리 NULL 값은 건너뛰지 않아요: NULL을 집합 요소와 비교하며 NULL = NULL은 true로 평가돼요.

구문 (Syntax)

notNullIn(x, set)

반환 값 (Returned value)

x가 집합에 없으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT notNullIn(NULL, tuple(1, NULL))

응답: 1

notNullInIgnoreSet

notNullIn과 같지만 집합을 생성하지 않고 타입 분석에 사용되는 IgnoreSet 변형이에요.

구문 (Syntax)

notNullIn(x, set)

nullIn

좌변 피연산자가 우변 피연산자 집합의 구성원인지 확인해요. in과 달리 NULL 값은 건너뛰지 않아요: NULL을 집합 요소와 비교하며 NULL = NULL은 true로 평가돼요.

구문 (Syntax)

nullIn(x, set)

반환 값 (Returned value)

x가 집합에 있으면 1, 그렇지 않으면 0. UInt8

예제 (Examples)

쿼리:

SELECT nullIn(NULL, tuple(1, NULL))

응답: 0

nullInIgnoreSet

nullIn과 같지만 집합을 생성하지 않고 타입 분석에 사용되는 IgnoreSet 변형이에요.

구문 (Syntax)

nullIn(x, set)

더 알아보기 (Learn more)