WHERE 절을 사용하면 SELECT의 FROM 절에서 가져오는 데이터를 필터링할 수 있습니다.
WHERE 절이 있으면 그 뒤에는 UInt8 유형의 표현식이 와야 합니다.
이 표현식의 평가 결과가 0인 행은 이후 처리나 결과에서 제외됩니다.
WHERE 절 뒤의 표현식은 비교 및 논리 연산자, 또는 여러 일반 함수와 함께 자주 사용됩니다.
기반 테이블 엔진이 이를 지원하면 WHERE 표현식은 인덱스와 파티션 프루닝을 활용할 수 있도록 평가됩니다.
PREWHERE
PREWHERE라는 필터링 최적화도 있습니다.
Prewhere는 필터링을 더 효율적으로 적용하기 위한 최적화입니다.
PREWHERE 절을 명시적으로 지정하지 않아도 기본적으로 활성화됩니다.NULL 검사하기
값이 NULL인지 확인해야 하는 경우 다음을 사용합니다:
IS NULL또는isNullIS NOT NULL또는isNotNull
NULL이 포함된 표현식은 절대 조건을 만족하지 않습니다.
논리 연산자를 사용한 데이터 필터링
여러 조건을 결합할 때는WHERE 절과 함께 다음 논리 함수를 사용할 수 있습니다:
조건으로 UInt8 컬럼 사용하기
ClickHouse에서는UInt8 컬럼을 불리언 조건으로 직접 사용할 수 있습니다. 이때 0은 false이고, 0이 아닌 모든 값(일반적으로 1)은 true입니다.
이에 대한 예시는 아래 섹션에 있습니다.
비교 연산자 사용
다음 비교 연산자를 사용할 수 있습니다:패턴 매칭과 조건 표현식
비교 연산자 외에도WHERE 절에서 패턴 매칭과 조건 표현식을 사용할 수 있습니다.
사용 예시는 “패턴 매칭과 조건 표현식”을 참조하십시오.
리터럴, 컬럼 또는 서브쿼리가 있는 표현식
WHERE 절 뒤에 오는 표현식에는 리터럴, 컬럼 또는 서브쿼리도 포함될 수 있습니다. 서브쿼리는 조건에 사용할 값을 반환하는 중첩된 SELECT SQL 문입니다.
복잡한 조건에서는 리터럴, 컬럼, 서브쿼리를 함께 사용할 수 있습니다:
예시
NULL 검사하기
NULL 값이 포함된 쿼리:
논리 연산자를 사용한 데이터 필터링
다음 테이블과 데이터를 살펴보겠습니다:AND - 두 조건이 모두 참이어야 합니다:
OR - 하나 이상의 조건이 참이어야 합니다:
NOT - 조건을 부정합니다:
XOR - 정확히 하나의 조건만 참이어야 합니다(둘 다 참이면 안 됨):
AND, OR, NOT, XOR)이 일반적으로 가독성이 더 좋지만, 함수 구문은 복잡한 표현식이나 동적 쿼리를 작성할 때 유용할 수 있습니다.
조건으로 UInt8 컬럼 사용하기
앞선 예시의 테이블을 사용하면 컬럼 이름 자체를 조건으로 직접 사용할 수 있습니다:비교 연산자 사용
아래 예시에서는 위의 예시에 있는 테이블과 데이터를 사용합니다. 간결성을 위해 결과는 생략합니다. 1.true에 대한 명시적 동등 비교(= 1 또는 = true):
false와 명시적으로 같음을 비교(= 0 또는 = false):
!= 0 또는 != false):
IN 연산자 사용:
아래 예시에서 (1, true)는 tuple입니다.
패턴 매칭과 조건 표현식
아래 예시에서는 위의 예시에서 사용한 테이블과 데이터를 사용합니다. 간단히 보여주기 위해 결과는 생략했습니다.LIKE 예시
ILIKE 예시
SIMILAR TO 예시
SIMILAR TO 패턴은 LIKE와 달리 정규식 메타문자 |, *, +, ?, {, }, (, ), [, ]도 사용할 수 있으며, LIKE와 마찬가지로 값 전체와 일치해야 합니다:
ESCAPE 절로 사용자 정의 이스케이프 문자를 지정할 수 있으며, 이 방식은 LIKE, ILIKE, NOT LIKE, NOT ILIKE, NOT SIMILAR TO에서도 동일하게 사용할 수 있습니다:
SIMILAR TO 연산자 문서를 참조하십시오.