SELECT 쿼리는 데이터를 조회합니다. 기본적으로 요청한 데이터는 클라이언트에 반환되며, INSERT INTO와 함께 사용하면 다른 테이블로 전달할 수도 있습니다.
구문
SELECT 바로 뒤에 오는 필수 표현식 목록은 예외이며, 이에 대해서는 아래에서 더 자세히 설명합니다.
각 선택적 절의 세부 내용은 별도의 섹션에서 설명하며, 실제 실행 순서와 동일한 순서로 나열되어 있습니다:
- WITH 절
- SELECT 절
- DISTINCT 절
- FROM 절
- SAMPLE 절
- JOIN 절
- PREWHERE 절
- WHERE 절
- WINDOW 절
- GROUP BY 절
- LIMIT BY 절
- HAVING 절
- QUALIFY 절
- LIMIT 절
- OFFSET 절
- UNION 절
- INTERSECT 절
- EXCEPT 절
- INTO OUTFILE 절
- FORMAT 절
SELECT 절
SELECT 절에 지정된 표현식은 위에서 설명한 절의 모든 작업이 끝난 후 계산됩니다. 이러한 표현식은 결과의 각 행에 개별적으로 적용되는 것처럼 동작합니다. SELECT 절의 표현식에 집계 함수가 포함된 경우, ClickHouse는 GROUP BY 집계 과정에서 집계 함수와 그 인수로 사용된 표현식을 처리합니다.
결과에 모든 컬럼을 포함하려면 별표(*) 기호를 사용하십시오. 예를 들어 SELECT * FROM ...와 같습니다.
동적 컬럼 선택
a 기호가 포함된 모든 컬럼의 데이터를 선택합니다.
COLUMNS 표현식을 사용할 수 있으며, 여기에 함수를 적용할 수도 있습니다.
예시:
COLUMNS 표현식이 반환하는 각 컬럼은 함수에 개별 인수로 전달됩니다. 또한 함수가 지원하는 경우 다른 인수도 함께 전달할 수 있습니다. 함수를 사용할 때는 주의해야 합니다. 전달한 인수의 개수를 함수가 지원하지 않으면 ClickHouse는 예외를 발생시킵니다.
예시:
COLUMNS('a')는 aa와 ab라는 두 개의 컬럼을 반환합니다. COLUMNS('c')는 bc 컬럼을 반환합니다. + 연산자는 3개의 인수에 적용할 수 없으므로 ClickHouse는 이에 대한 관련 메시지와 함께 예외를 발생시킵니다.
COLUMNS 표현식과 일치하는 컬럼은 서로 다른 데이터 타입일 수 있습니다. COLUMNS가 어떤 컬럼과도 일치하지 않고 SELECT의 유일한 표현식인 경우 ClickHouse는 예외를 발생시킵니다.
별표
MATERIALIZED 및 ALIAS 컬럼 제외). 별표 사용이 적절한 경우는 몇 가지뿐입니다.
- 테이블 덤프를 만들 때
- 시스템 테이블처럼 컬럼 수가 많지 않은 테이블인 경우
- 테이블에 어떤 컬럼이 있는지 확인할 때. 이 경우
LIMIT 1을 설정합니다. 하지만DESC TABLE쿼리를 사용하는 편이 더 좋습니다. PREWHERE를 사용해 적은 수의 컬럼에 강한 필터링이 적용될 때- 서브쿼리에서(외부 쿼리에 필요하지 않은 컬럼은 서브쿼리에서 제외되므로)
극값
XML, JSON*, TabSeparated*, CSV*, Vertical, Template, Pretty* 포맷에서 다른 행과 분리되어 출력됩니다. 다른 포맷에서는 출력되지 않습니다.
JSON* 및 XML 포맷에서는 극값이 별도의 ‘extremes’ 필드에 출력됩니다. TabSeparated*, CSV*, Vertical 포맷에서는 이 행이 기본 결과 뒤에 출력되며, totals가 있으면 그 뒤에 출력됩니다. 또한 그 앞에는 빈 행이 하나 추가됩니다(다른 데이터 뒤). Pretty* 포맷에서는 이 행이 기본 결과 뒤에, totals가 있으면 그 뒤에 별도의 테이블로 출력됩니다. Template 포맷에서는 지정된 템플릿에 따라 극값이 출력됩니다.
극값은 LIMIT 이전의 행을 기준으로 계산되지만, LIMIT BY는 적용된 이후입니다. 하지만 LIMIT offset, size를 사용할 경우 offset 이전의 행도 extremes에 포함됩니다. 스트림 요청에서는 LIMIT를 거친 소수의 행이 결과에 추가로 포함될 수도 있습니다.
참고 사항
AS 별칭)를 사용할 수 있습니다.
GROUP BY, ORDER BY, LIMIT BY 절은 위치 인수를 지원합니다. 이를 사용하려면 enable_positional_arguments 설정을 켜십시오. 그러면 예를 들어 ORDER BY 1,2는 테이블을 첫 번째 컬럼, 그다음 두 번째 컬럼 기준으로 행을 정렬합니다.
구현 세부 사항
DISTINCT, GROUP BY, ORDER BY 절과 IN, JOIN 서브쿼리를 생략하면, O(1) 크기의 RAM만 사용하여 전체 쿼리를 완전히 스트림 방식으로 처리할 수 있습니다. 그렇지 않으면 적절한 제한을 지정하지 않은 경우 쿼리가 많은 RAM을 사용할 수 있습니다.
max_memory_usagemax_rows_to_group_bymax_rows_to_sortmax_rows_in_distinctmax_bytes_in_distinctmax_rows_in_setmax_bytes_in_setmax_rows_in_joinmax_bytes_in_joinmax_bytes_before_external_sortmax_bytes_ratio_before_external_sortmax_bytes_before_external_group_bymax_bytes_ratio_before_external_group_by
SELECT 수정자
SELECT 쿼리에서 다음 수정자를 사용할 수 있습니다.
| Modifier | Description |
|---|---|
APPLY | 쿼리의 외부 테이블 표현식이 반환하는 각 행에 대해 함수를 호출할 수 있게 합니다. |
EXCEPT | 결과에서 제외할 하나 이상의 컬럼 이름을 지정합니다. 일치하는 모든 컬럼 이름은 출력에서 생략됩니다. |
REPLACE | 하나 이상의 표현식 별칭을 지정합니다. 각 별칭은 SELECT * SQL 문의 컬럼 이름과 일치해야 합니다. 출력 컬럼 목록에서는 해당 별칭과 일치하는 컬럼이 그 REPLACE의 표현식으로 대체됩니다. 이 수정자는 컬럼의 이름이나 순서는 변경하지 않습니다. 하지만 값과 값의 유형은 변경할 수 있습니다. |
수정자 조합
SELECT 쿼리의 SETTINGS
SELECT 쿼리 안에 직접 지정할 수 있습니다. 설정 값은 이 쿼리에만 적용되며, 쿼리 실행 후에는 기본값 또는 이전 값으로 다시 설정됩니다.
설정을 지정하는 다른 방법은 여기를 참조하십시오.
true로 설정되는 불리언 설정의 경우, 값 할당을 생략하는 축약 구문을 사용할 수 있습니다. 설정 이름만 지정하면 자동으로 1(true)로 설정됩니다.
예시