Tüm Ürünler
Search
Belge Merkezi

MaxCompute:INTERSECT, UNION, EXCEPT ve MINUS

Son Güncelleme:Oct 04, 2026

MaxCompute, sorgu sonuç kümelerini birleştirmek için dört küme işlecini destekler: INTERSECT, UNION, EXCEPT ve MINUS. Her işlecin, yinelenen satırları işleme biçimine göre iki varyantı bulunur.

Genel Bakış


İşleç


Döndürülen Sonuç


INTERSECT


Her iki veri kümesinde de bulunan satırlar


UNION


Her iki veri kümesindeki tüm satırların birleşimi


EXCEPT / MINUS


Sol veri kümesinde bulunan ancak sağ veri kümesinde bulunmayan satırlar

EXCEPT ve MINUS eş anlamlıdır; aynı sonuçları üretir.

Yinelenen değerlerin işlenmesi: Küme semantiği ve çoklu küme (bag) semantiği

Tüm küme işleçleri aşağıdaki iki moddan birinde çalışır:

  • Küme semantiği (varsayılan): Sonuçtan yinelenen satırları kaldırır; DISTINCT uygulamaya eşdeğerdir. ALL anahtar sözcüğünü kullanmadan INTERSECT, UNION veya EXCEPT kullanın.

  • Çoklu küme (bag) semantiği: Yinelenen satırları korur. INTERSECT ALL, UNION ALL veya EXCEPT ALL kullanın.

Özetle: ALL belirtildiğinde yinelenenler korunur; ALL belirtilmediğinde yinelenenler kaldırılır.

Sınırlamalar

  • Tek bir ifadede en fazla 256 veri kümesi birleştirilebilir. Bu sınırın aşılması hataya neden olur.

  • Her iki veri kümesinin sütun sayısı aynı olmalıdır.

Kullanım Notları

  • Bir ORDER BY yan tümcesi eklemedikçe sonuçların belirli bir sırada olması garanti edilmez.

  • İlgili sütunlar uyumsuz veri türlerine sahipse MaxCompute, işlemi çalıştırmadan önce örtük tür dönüştürme uygular. Dönüştürme kuralları için Veri türleri konusuna bakın.

  • Tüm küme işlemlerinde STRING ile diğer türler arasındaki örtük tür dönüştürme devre dışı bırakılmıştır. STRING türünü dize olmayan türlerle birleştirirken sütunları açıkça dönüştürün.

INTERSECT

Her iki veri kümesinde de görünen satırları döndürür.

Sözdizimi

-- Keep duplicate rows in the result.
<select_statement1> INTERSECT ALL <select_statement2>;

-- Remove duplicate rows from the result. INTERSECT and INTERSECT DISTINCT are equivalent.
<select_statement1> INTERSECT [DISTINCT] <select_statement2>;

Parametreler


Parametre


Zorunlu


Açıklama


select_statement1, select_statement2


Evet


Birleştirilecek SELECT yan tümceleri. Ayrıntılar için SELECT sözdizimi konusuna bakın.


DISTINCT


Hayır


Kesişimden yinelenen satırları kaldırır. ALL anahtar sözcüğünün atlanması aynı etkiyi yaratır.

Örnekler

Örnek 1: Yinelenen satırları koruyarak kesişimi döndürür.

SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 6) t(a, b)
INTERSECT ALL
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 7) t(a, b);

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 1          | 2          |
| 3          | 4          |
+------------+------------+

Örnek 2: Yinelenen satırları kaldırarak kesişimi döndürür.

SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 6) t(a, b)
INTERSECT DISTINCT
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 7) t(a, b);
-- Equivalent to:
SELECT DISTINCT * FROM
(SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 6) t(a, b)
INTERSECT ALL
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (5, 7) t(a, b)) t;

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 3          | 4          |
+------------+------------+

UNION

Her iki veri kümesindeki tüm satırları birleştirilmiş olarak döndürür.

Sözdizimi

-- Keep duplicate rows in the result.
<select_statement1> UNION ALL <select_statement2>;

-- Remove duplicate rows from the result.
<select_statement1> UNION [DISTINCT] <select_statement2>;

Parametreler


Parametre


Zorunlu


Açıklama


select_statement1, select_statement2


Evet


Birleştirilecek SELECT yan tümceleri. Ayrıntılar için SELECT sözdizimi konusuna bakın.


DISTINCT


Hayır


Birleşim sonucundan yinelenen satırları kaldırır.

Kullanım notları

  • Birden fazla UNION ALL işlemini zincirleme kullanırken değerlendirme sırasını belirtmek için parantezlerden yararlanın.

  • UNION sonrasında gelen CLUSTER BY, DISTRIBUTE BY, SORT BY, ORDER BY ve LIMIT yan tümcelerinin davranışı, odps.sql.type.system.odps2 ayarına bağlıdır:

    • SET odps.sql.type.system.odps2=true; — Yan tümce, tüm UNION işlemlerinin sonuçlarına uygulanır.

    • SET odps.sql.type.system.odps2=false; — Yan tümce yalnızca UNION içindeki son select_statement ifadesine uygulanır.

Örnekler

Örnek 1: Yinelenen satırları koruyarak birleşimi döndürür.

SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b)
UNION ALL
SELECT * FROM VALUES (1, 2), (1, 4) t(a, b);

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 1          | 2          |
| 3          | 4          |
| 1          | 2          |
| 1          | 4          |
+------------+------------+

Örnek 2: Yinelenen satırları kaldırarak birleşimi döndürür.

SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b)
UNION DISTINCT
SELECT * FROM VALUES (1, 2), (1, 4) t(a, b);
-- Equivalent to:
SELECT DISTINCT * FROM (
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b)
UNION ALL
SELECT * FROM VALUES (1, 2), (1, 4) t(a, b));

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 1          | 4          |
| 3          | 4          |
+------------+------------+

Örnek 3: UNION ALL işlemlerinin değerlendirme sırasını kontrol etmek için parantez kullanır.

SELECT * FROM VALUES (1, 2), (1, 2), (5, 6) t(a, b)
UNION ALL
(SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b)
UNION ALL
SELECT * FROM VALUES (1, 2), (1, 4) t(a, b));

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 1          | 2          |
| 5          | 6          |
| 1          | 2          |
| 1          | 2          |
| 3          | 4          |
| 1          | 2          |
| 1          | 4          |
+------------+------------+

Örnek 4: odps.sql.type.system.odps2=true ayarıyla UNION ALL ardından ORDER BY ve LIMIT kullanır. ORDER BY ve LIMIT yan tümceleri birleştirilmiş sonuç kümesine uygulanır.

SET odps.sql.type.system.odps2=true;
SELECT explode(ARRAY(3, 1)) AS (a) UNION ALL SELECT explode(ARRAY(0, 4, 2)) AS (a) ORDER BY a limit 3;

Sonuç:

+------------+
| a          |
+------------+
| 0          |
| 1          |
| 2          |
+------------+

Örnek 5: odps.sql.type.system.odps2=false ayarıyla UNION ALL ardından ORDER BY ve LIMIT kullanır. ORDER BY ve LIMIT yan tümceleri birleştirilmiş sonuca değil, yalnızca son SELECT ifadesine uygulanır. Her iki sorgudan da tüm satırlar döndürülür.

SET odps.sql.type.system.odps2=false;
SELECT explode(ARRAY(3, 1)) AS (a) UNION ALL SELECT explode(ARRAY(0, 4, 2)) AS (a) ORDER BY a limit 3;

Sonuç:

+------------+
| a          |
+------------+
| 3          |
| 1          |
| 0          |
| 2          |
| 4          |
+------------+

EXCEPT ve MINUS

Sol veri kümesinde bulunan ancak sağ veri kümesinde görünmeyen satırları döndürür. EXCEPT ve MINUS eş anlamlıdır.

Sözdizimi

-- Keep duplicate rows in the result.
<select_statement1> EXCEPT ALL <select_statement2>;
<select_statement1> MINUS ALL <select_statement2>;

-- Remove duplicate rows from the result.
<select_statement1> EXCEPT [DISTINCT] <select_statement2>;
<select_statement1> MINUS [DISTINCT] <select_statement2>;

Parametreler


Parametre


Zorunlu


Açıklama


select_statement1, select_statement2


Evet


Birleştirilecek SELECT yan tümceleri. Ayrıntılar için SELECT sözdizimi konusuna bakın.


DISTINCT


Hayır


Sonuçtan yinelenen satırları kaldırır.

Örnekler

Örnek 1: Sol veri kümesinde bulunan ancak sağ veri kümesinde bulunmayan satırları, yinelenenleri koruyarak döndürür.

SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b)
EXCEPT ALL
SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);
-- Equivalent to:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b)
MINUS ALL
SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 1          | 2          |
| 3          | 4          |
| 7          | 8          |
+------------+------------+

Örnek 2: Sol veri kümesinde bulunan ancak sağ veri kümesinde bulunmayan satırları, yinelenenleri kaldırarak döndürür.

SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b)
EXCEPT DISTINCT
SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);
-- Equivalent to:
SELECT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b)
MINUS DISTINCT
SELECT * FROM VALUES (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);
-- Both are equivalent to:
SELECT DISTINCT * FROM VALUES (1, 2), (1, 2), (3, 4), (3, 4), (5, 6), (7, 8) t(a, b) except all select * from values (3, 4), (5, 6), (5, 6), (9, 10) t(a, b);

Sonuç:

+------------+------------+
| a          | b          |
+------------+------------+
| 1          | 2          |
| 7          | 8          |
+------------+------------+