Snowpark Migration Accelerator: Union

설명

2개의 하위 쿼리를 단일 쿼리로 병합합니다. Databricks SQL 은 쿼리를 결합할 수 있는 3가지 세트 연산자를 제공합니다.

  • EXCEPT - 첫 번째 쿼리에서 두 번째 쿼리에 나타나지 않는 모든 행을 검색합니다

  • INTERSECT - 두 쿼리 모두에 표시되는 행만 반환합니다

  • UNION - 2개 이상의 쿼리 결과를 1개의 결과 세트로 결합합니다

Databricks SQL Language Reference UNION

설정 연산자를 사용하면 여러 쿼리를 1개의 결과로 결합할 수 있습니다. 자세한 내용은 Snowflake SQL Language Reference UNION 을 참조하십시오.

구문

subquery1 { { UNION [ ALL | DISTINCT ] |
              INTERSECT [ ALL | DISTINCT ] |
              EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
Copy
[ ( ] <query> [ ) ] { INTERSECT | { MINUS | EXCEPT } | UNION [ ALL ] } [ ( ] <query> [ ) ]
[ ORDER BY ... ]
[ LIMIT ... ]
Copy

샘플 소스 패턴

설정 데이터

Databricks

CREATE TEMPORARY VIEW number1(c) AS VALUES (3), (1), (2), (2), (3), (4);

CREATE TEMPORARY VIEW number2(c) AS VALUES (5), (1), (1), (2);
Copy

Snowflake

CREATE TEMPORARY TABLE number1(c int);
INSERT INTO number1 VALUES (3), (1), (2), (2), (3), (4);

CREATE TEMPORARY TABLE number2(c int);
INSERT INTO number2 VALUES (5), (1), (1), (2);
Copy

패턴 코드

Databricks

-- EXCEPT (MINUS) Operator:
SELECT c FROM number1 EXCEPT SELECT c FROM number2;

SELECT c FROM number1 MINUS SELECT c FROM number2;

-- EXCEPT ALL (MINUS ALL) Operator:
SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);

SELECT c FROM number1 MINUS ALL (SELECT c FROM number2);

-- INTERSECT Operator:
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);

-- INTERSECT DISTINCT Operator:
(SELECT c FROM number1) INTERSECT DISTINCT (SELECT c FROM number2);

-- INTERSECT ALL Operator:
(SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);

-- UNION Operator:
(SELECT c FROM number1) UNION (SELECT c FROM number2);

-- UNION DISTINCT Operator:
(SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);

-- UNION ALL Operator:
SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
Copy

EXCEPT (MINUS) 연산자: MINUS 라고도 하는 EXCEPT 연산자는 두 번째 쿼리의 결과 세트에 표시되는 첫 번째 쿼리에서 행을 제거합니다. 첫 번째 쿼리에서 두 번째 쿼리에 존재하지 않는 고유 행만 반환합니다.

c

3

4

EXCEPT ALL (MINUS ALL) 연산자: 중복 레코드 제거

c

3

3

4

INTERSECT 연산자: 두 결과 세트에 모두 표시되는 행만 반환하여 중복을 제거합니다. 2개 이상 SELECT 문의 결과를 비교하여 일치하는 레코드만 반환합니다. 중복을 제거하여 두 결과 세트에 모두 표시되는 행만 반환합니다.

c

1

2

INTERSECT DISTINCT 연산자: 두 결과 세트에 모두 표시되는 고유 행만 반환하여 중복을 제거합니다. 두 쿼리 모두에 표시되는 고유 행만 반환하여 결과 세트에서 중복을 제거합니다.

c

1

2

INTERSECT ALL 연산자: 중복을 포함하여 여러 쿼리에서 일치하는 모든 행을 반환합니다. 중복을 제거하는 표준 INTERSECT 연산자와 달리 INTERSECT ALL 연산자는 최종 결과 세트에서 중복 행을 보존합니다. 중복을 포함하여 두 결과 세트에 표시되는 모든 행을 반환합니다. 중복을 제거하는 INTERSECT 와 달리 INTERSECT ALL 은 두 세트의 빈도에 따라 중복 행을 보존합니다.

c

1

2

2

UNION 연산자: UNION 연산자는 2개 이상 SELECT 문의 결과를 1개의 결과 세트로 결합합니다. 기본적으로 결합된 결과 세트에서 중복 행을 제거합니다. UNION 연산자는 2개 이상 SELECT 문의 결과를 1개의 결과 세트로 결합합니다. 결합된 결과에서 중복 행을 제거합니다.

c

1

3

5

4

2

UNION DISTINCT 연산자: UNION DISTINCT 연산자는 2개 이상의 결과 세트를 결합하고 최종 출력에서 중복 행을 제거합니다. 결합된 모든 쿼리에서 고유한 행만 반환합니다. UNION DISTINCT 연산자는 최종 결과 세트에서 중복 행을 제거하면서 2개 이상의 쿼리에서 행을 결합합니다.

c

1

3

5

4

2

UNION ALL 연산자: UNION ALL 연산자는 중복 레코드를 제거하지 않고 2개 이상의 쿼리에서 행을 결합합니다. UNION 연산자와 달리 UNION ALL 연산자는 중복을 포함한 모든 행을 유지하므로 중복 검사를 수행할 필요가 없으므로 실행 속도가 더 빠릅니다. 이 연산자는 2개 이상 SELECT 문의 결과를 결합하며 중복을 포함한 모든 행을 포함합니다. 중복 행을 제거하는 UNION 와 달리 UNION ALL 은 모든 SELECT 문의 모든 행을 유지합니다.

c

3

1

2

2

3

4

5

1

1

2

Snowflake

-- EXCEPT (MINUS) Operator
SELECT c FROM number1 EXCEPT SELECT c FROM number2;

SELECT c FROM number1 MINUS SELECT c FROM number2;

-- EXCEPT ALL (MINUS ALL) Operator:
SELECT number1.c FROM number1 
LEFT JOIN number2 
    ON number1.c = number2.c
WHERE number2.c IS NULL;
-- ** MSC-WARMING - MSC-S000# - EXCEPT ALL IS TRANSFORMED TO A LEFT JOIN. **

SELECT number1.c FROM number1 
LEFT JOIN number2 
    ON number1.c = number2.c
WHERE number2.c IS NULL;
-- ** MSC-WARMING - MSC-S000# - MINUS ALL IS TRANSFORMED TO A LEFT JOIN. **

-- INTERSECT Operator:
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);

-- INTERSECT DISTINCT Operator:
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);

-- INTERSECT ALL Operator:
SELECT DISTINCT number1.c FROM number1 
INNER JOIN number2 
    ON number1.c = number2.c;
-- ** MSC-WARMING - MSC-S000# - INTERSECT ALL IS TRANSFORMED TO A INNER JOIN. **

-- UNION Operator:
(SELECT c FROM number1) UNION (SELECT c FROM number2);

-- UNION DISTINCT Operator:
(SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);

-- UNION ALL Operator:
SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
Copy

EXCEPT (MINUS) 연산자: 중복 레코드 제거

EXCEPT 연산자(MINUS 라고도 함)는 두 쿼리를 비교하여 두 번째 쿼리에 나타나지 않는 첫 번째 쿼리의 고유 레코드만 반환합니다. 결과 세트에서 중복 행을 제거합니다.

c

3

4

EXCEPT ALL (MINUS ALL) 연산자: 중복 행을 제거합니다

c

3

3

4

INTERSECT 연산자:

c

1

2

INTERSECT DISTINCT 연산자:

c

1

2

INTERSECT ALL 연산자:

c

1

2

2

UNION 연산자:

c

1

3

5

4

2

UNION DISTINCT 연산자:

c

1

3

5

4

2

UNION ALL 연산자:

c

3

1

2

2

3

4

5

1

1

2

Known Issues

EWIs 와 관련 없음