全部产品
Search
文档中心

MaxCompute:INTERSECT, UNION, EXCEPT, dan MINUS

更新时间:Jul 02, 2025

Tema ini menjelaskan cara melakukan operasi berikut pada kumpulan data hasil query di MaxCompute: INTERSECT, INTERSECT ALL, INTERSECT DISTINCT, UNION, UNION ALL, UNION DISTINCT, EXCEPT, EXCEPT ALL, EXCEPT DISTINCT, MINUS, MINUS ALL, dan MINUS DISTINCT.

Deskripsi

MaxCompute mendukung operasi berikut pada kumpulan data:

  • INTERSECT: Mengembalikan irisan dari dua kumpulan data. Irisan mencakup nilai-nilai yang terdapat di kedua kumpulan data.

  • UNION: Mengembalikan gabungan dari dua kumpulan data. Gabungan adalah kumpulan data yang diperoleh dengan menggabungkan kedua kumpulan data tersebut.

  • EXCEPT dan MINUS: Mengembalikan nilai unik dari salah satu dari dua kumpulan data. Nilai-nilai ini tidak terdapat dalam kumpulan data lainnya.

Batasan

Berikut adalah batasan untuk INTERSECT, UNION, EXCEPT, dan MINUS:

  • MaxCompute memungkinkan Anda melakukan operasi INTERSECT, UNION, EXCEPT, atau MINUS pada maksimal 256 kumpulan data secara bersamaan. Jika jumlah kumpulan data melebihi 256, kesalahan akan dikembalikan.

  • Jumlah kolom di tabel kiri dan kanan harus sama.

Catatan Penggunaan

Saat Anda melakukan operasi INTERSECT, UNION, EXCEPT, atau MINUS pada dua kumpulan data, perhatikan hal-hal berikut:

  • Hasil dari operasi INTERSECT, UNION, EXCEPT, atau MINUS mungkin tidak diurutkan dalam urutan tertentu.

  • Jika tipe data dari kumpulan data tidak konsisten, MaxCompute secara implisit mengonversi tipe data sebelum Anda melakukan operasi INTERSECT, UNION, EXCEPT, atau MINUS. Untuk informasi lebih lanjut tentang konversi implisit, lihat Tipe Data. Untuk mencegah masalah kompatibilitas, MaxCompute menonaktifkan konversi implisit antara data tipe STRING dan data tipe lainnya untuk operasi INTERSECT, UNION, EXCEPT, atau MINUS.

INTERSECT

  • Sintaks

    -- Dapatkan irisan yang berisi nilai duplikat.
    <select_statement1> INTERSECT ALL <select_statement2>;
    -- Dapatkan irisan yang tidak berisi nilai duplikat. Penggunaan INTERSECT setara dengan INTERSECT DISTINCT.
    <select_statement1> INTERSECT [DISTINCT] <select_statement2>;
  • Parameter

    • select_statement1 dan select_statement2: Wajib. Parameter ini menentukan klausa SELECT. Untuk informasi lebih lanjut tentang sintaks klausa, lihat Sintaks SELECT.

    • distinct: Opsional. Parameter ini digunakan untuk menghapus nilai duplikat dari irisan dua kumpulan data.

  • Contoh

    • Contoh 1: Dapatkan irisan dari dua kumpulan data. Irisan berisi nilai duplikat. Pernyataan contoh:

      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);

      Hasil berikut dikembalikan:

      +------------+------------+
      | a          | b          |
      +------------+------------+
      | 1          | 2          |
      | 1          | 2          |
      | 3          | 4          |
      +------------+------------+
    • Contoh 2: Dapatkan irisan dari dua kumpulan data. Irisan tidak berisi nilai duplikat. Pernyataan contoh:

      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);
      -- Pernyataan di atas setara dengan pernyataan berikut:
      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;

      Hasil berikut dikembalikan:

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

UNION

  • Sintaks

    -- Dapatkan gabungan yang berisi nilai duplikat.
    <select_statement1> UNION ALL <select_statement2>;
    -- Dapatkan gabungan yang tidak berisi nilai duplikat.
    <select_statement1> UNION [DISTINCT] <select_statement2>;
  • Catatan Penggunaan

    • Jika ada beberapa operasi UNION ALL, gunakan tanda kurung () untuk menentukan prioritas operasi UNION ALL.

    • Jika UNION diikuti oleh klausa CLUSTER BY, DISTRIBUTE BY, SORT BY, ORDER BY, atau LIMIT dan SET odps.sql.type.system.odps2=false; dikonfigurasi, klausa hanya bekerja pada select_statement terakhir dari UNION. Jika SET odps.sql.type.system.odps2=false; dikonfigurasi, klausa bekerja pada hasil semua operasi UNION.

  • Parameter

    • select_statement1 dan select_statement2: Wajib. Parameter ini menentukan klausa SELECT. Untuk informasi lebih lanjut tentang sintaks klausa, lihat Sintaks SELECT.

    • distinct: Opsional. Parameter ini digunakan untuk menghapus nilai duplikat dari gabungan dua kumpulan data.

  • Contoh

    • Contoh 1: Dapatkan gabungan dari dua kumpulan data. Gabungan berisi nilai duplikat. Pernyataan contoh:

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

      Hasil berikut dikembalikan:

      +------------+------------+
      | a          | b          |
      +------------+------------+
      | 1          | 2          |
      | 1          | 2          |
      | 3          | 4          |
      | 1          | 2          |
      | 1          | 4          |
      +------------+------------+
    • Contoh 2: Dapatkan gabungan dari dua kumpulan data. Gabungan tidak berisi nilai duplikat. Pernyataan contoh:

      SELECT * FROM VALUES (1, 2), (1, 2), (3, 4) t(a, b)
      UNION DISTINCT 
      SELECT * FROM VALUES (1, 2), (1, 4) t(a, b);
      -- Pernyataan di atas setara dengan pernyataan berikut:
      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));

      Hasil berikut dikembalikan:

      +------------+------------+
      | a          | b          |
      +------------+------------+
      | 1          | 2          |
      | 1          | 4          |
      | 3          | 4          |
      +------------+------------+
    • Contoh 3: Gunakan tanda kurung () untuk menentukan prioritas operasi UNION ALL. Pernyataan contoh:

      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));

      Hasil berikut dikembalikan:

      +------------+------------+
      | a          | b          |
      +------------+------------+
      | 1          | 2          |
      | 1          | 2          |
      | 5          | 6          |
      | 1          | 2          |
      | 1          | 2          |
      | 3          | 4          |
      | 1          | 2          |
      | 1          | 4          |
      +------------+------------+
    • Contoh 4: Gunakan UNION yang diikuti oleh klausa CLUSTER BY, DISTRIBUTE BY, SORT BY, ORDER BY, atau LIMIT dalam pernyataan SELECT dan konfigurasikan SET odps.sql.type.system.odps2=true;. Pernyataan contoh:

      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;

      Hasil berikut dikembalikan:

      +------------+
      | a          |
      +------------+
      | 0          |
      | 1          |
      | 2          |
      +------------+
    • Contoh 5: Gunakan UNION yang diikuti oleh klausa CLUSTER BY, DISTRIBUTE BY, SORT BY, ORDER BY, atau LIMIT dalam pernyataan SELECT dan konfigurasikan SET odps.sql.type.system.odps2=false;. Pernyataan contoh:

      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;

      Hasil berikut dikembalikan:

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

EXCEPT dan MINUS

  • Sintaks

    -- Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap berisi nilai duplikat.
    <select_statement1> EXCEPT ALL <select_statement2>;
    <select_statement1> minus ALL <select_statement2>;
    -- Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap tidak berisi nilai duplikat.
    <select_statement1> EXCEPT [DISTINCT] <select_statement2>;
    <select_statement1> minus [DISTINCT] <select_statement2>;
    Catatan

    Penggunaan EXCEPT setara dengan MINUS.

  • Parameter

    • select_statement1 dan select_statement2: Wajib. Parameter ini menentukan klausa SELECT. Untuk informasi lebih lanjut tentang sintaks klausa, lihat Sintaks SELECT.

    • distinct: Opsional. Parameter ini digunakan untuk menghapus nilai duplikat dari himpunan pelengkap dua kumpulan data.

  • Contoh

    • Contoh 1: Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap berisi nilai duplikat. Pernyataan contoh:

      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);
      -- Pernyataan di atas setara dengan pernyataan berikut:
      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);

      Hasil berikut dikembalikan:

      +------------+------------+
      | a          | b          |
      +------------+------------+
      | 1          | 2          |
      | 1          | 2          |
      | 3          | 4          |
      | 7          | 8          |
      +------------+------------+
    • Contoh 2: Dapatkan himpunan pelengkap dari dua kumpulan data. Himpunan pelengkap tidak berisi nilai duplikat. Pernyataan contoh:

      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);
      -- Pernyataan di atas setara dengan pernyataan berikut:
      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);
      -- Pernyataan di atas setara dengan pernyataan berikut:
      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);

      Hasil berikut dikembalikan:

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