IN 조건 - Amazon Redshift

IN 조건

IN 조건은 값 집합 또는 하위 쿼리에서 값의 멤버십 여부를 테스트합니다.

구문

expression [ NOT ] IN (expr_list | table_subquery)

인수

expression

expr_list 또는 table_subquery를 대상으로 평가되는 숫자, 문자 또는 날짜/시간 표현식으로서 해당 목록이나 하위 쿼리의 데이터 형식과 호환되어야 합니다.

expr_list

쉼표로 구분된 표현식 1개 이상, 또는 쉼표로 구분된 표현식 집합 1개 이상이며 괄호로 경계를 표시합니다.

table_subquery

행이 1개 이상 포함되어 있지만 select 목록의 열은 1개로 제한된 테이블로 평가되는 하위 쿼리입니다.

IN | NOT IN

IN은 표현식이 표현식 목록 또는 쿼리의 멤버일 때 true를 반환합니다. NOT IN은 표현식이 멤버가 아닐 때 true를 반환합니다. IN과 NOT IN은 expression이 NULL을 산출하는 경우, 혹은 expr_list 또는 table_subquery 값이 하나도 일치하지 않고 두 비교 행 중 적어도 하나가 NULL을 산출하는 경우에는 NULL과 함께 아무런 행도 반환되지 않습니다.

다음 조건은 나열된 값일 때만 true로 평가됩니다.

qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')

대용량 IN 목록의 최적화

값이 10개 이상인 IN 목록은 쿼리 성능의 최적화를 위해 내부에서 스칼라 배열로 평가됩니다. 값이 10개 미만인 IN 목록은 OR 조건자의 연속으로 평가됩니다. 이러한 최적화는 SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP 및 TIMESTAMPTZ 데이터 형식에서 지원됩니다.

이러한 최적화의 효과는 다음 쿼리에서 EXPLAIN 출력을 보면 알 수 있습니다. 예:

explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)