비교 함수
비교 함수 (Comparison Functions)
값을 비교해 참/거짓을 판별하는 함수 모음이에요. 아래 비교 함수들은 UInt8 타입으로 0 또는 1을 반환해요.
출처: 문서
본문
비교 규칙 (Comparison rules)
아래 비교 함수들은 UInt8 타입으로 0 또는 1을 반환해요. 같은 그룹 안의 값만 비교할 수 있어요(예: UInt16과 UInt64) 하지만 그룹을 넘어서는 비교는 불가능해요(예: UInt16과 DateTime). 숫자와 문자열의 비교가 가능하며, 문자열과 날짜, 날짜와 시간의 비교도 가능해요. 튜플과 배열의 경우 비교는 사전식(lexicographic)으로 이루어져 좌변과 우변 튜플/배열의 각 대응 요소를 비교해요. 다음 타입들을 비교할 수 있어요:
- 숫자와 소수(decimals)
- 문자열과 고정 문자열
- 날짜
- 시간이 포함된 날짜
- 튜플(사전식 비교)
- 배열(사전식 비교)
문자열은 바이트 단위로 비교돼요. UTF-8로 인코딩된 다중 바이트 문자가 문자열 중 하나에 포함된 경우 예상치 못한 결과가 나올 수 있어요. 다른 문자열 S2를 접두사로 가지는 문자열 S1은 S2보다 길다고 간주돼요.
equals
두 값이 같은지 비교해요.
구문 (Syntax)
equals(a, b)
-- a = b
-- a == b
인자 (Arguments)
a— 첫 번째 값.b— 두 번째 값.
반환 값 (Returned value)
a가 b와 같으면 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)
a가 b보다 크면 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)
a가 b보다 크거나 같으면 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)
반환 값 (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)
a가 b보다 작으면 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)
a가 b보다 작거나 같으면 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)
a가 b와 같지 않으면 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)