Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
UNION, INTERSECT, dan KECUALI
Topik
Operator set UNION, INTERSECT, dan EXCEP T digunakan untuk membandingkan dan menggabungkan hasil dari dua ekspresi kueri terpisah. Misalnya, jika Anda ingin mengetahui pengguna situs web mana yang merupakan pembeli dan penjual tetapi nama pengguna mereka disimpan dalam kolom atau tabel terpisah, Anda dapat menemukan per simpangan kedua jenis pengguna ini. Jika Anda ingin mengetahui pengguna situs web mana yang pembeli tetapi bukan penjual, Anda dapat menggunakan operator EXCEPT untuk menemukan perbedaan antara dua daftar pengguna. Jika Anda ingin membuat daftar semua pengguna, terlepas dari perannya, Anda dapat menggunakan operator UNION.
Sintaksis
query { UNION [ ALL ] | INTERSECT | EXCEPT | MINUS } query
Parameter
- query
-
Ekspresi kueri yang sesuai, dalam bentuk daftar pilihannya, dengan ekspresi kueri kedua yang mengikuti operator UNION, INTERSECT, atau EXCEPT. Kedua ekspresi harus berisi jumlah kolom keluaran yang sama dengan tipe data yang kompatibel; jika tidak, kedua set hasil tidak dapat dibandingkan dan digabungkan. Operasi set tidak mengizinkan konversi implisit antara berbagai kategori tipe data; untuk informasi selengkapnya, lihatKompatibilitas dan konversi tipe.
Anda dapat membuat kueri yang berisi ekspresi kueri dalam jumlah tak terbatas dan menghubungkannya dengan operator UNION, INTERSECT, dan EXCEPT dalam kombinasi apa pun. Misalnya, struktur kueri berikut ini valid, dengan asumsi bahwa tabel T1, T2, dan T3 berisi kumpulan kolom yang kompatibel:
select * from t1 union select * from t2 except select * from t3 order by c1; - UNION
-
Tetapkan operasi yang mengembalikan baris dari dua ekspresi kueri, terlepas dari apakah baris berasal dari satu atau kedua ekspresi.
- BERPOTONGAN
-
Tetapkan operasi yang mengembalikan baris yang berasal dari dua ekspresi kueri. Baris yang tidak dikembalikan oleh kedua ekspresi akan dibuang.
- KECUALI | MINUS
-
Tetapkan operasi yang mengembalikan baris yang berasal dari salah satu dari dua ekspresi kueri. Agar memenuhi syarat untuk hasil, baris harus ada di tabel hasil pertama tetapi tidak yang kedua. MINUS dan EXCEPT adalah sinonim yang tepat.
- SEMUA
-
Kata kunci ALL mempertahankan baris duplikat yang dihasilkan oleh UNION. Perilaku default saat kata kunci ALL tidak digunakan adalah membuang duplikat ini. INTERSECT ALL, EXCEPT ALL, dan MINUS ALL tidak didukung.
Urutan evaluasi untuk operator set
Operator himpunan UNION dan EXCEPT bersifat asosiatif kiri. Jika tanda kurung tidak ditentukan untuk mempengaruhi urutan prioritas, kombinasi operator himpunan ini dievaluasi dari kiri ke kanan. Misalnya, dalam kueri berikut, UNION T1 dan T2 dievaluasi terlebih dahulu, kemudian operasi EXCEPT dilakukan pada hasil UNION:
select * from t1 union select * from t2 except select * from t3 order by c1;
Operator INTERSECT diutamakan daripada operator UNION dan EXCEPT ketika kombinasi operator digunakan dalam kueri yang sama. Misalnya, kueri berikut mengevaluasi persimpangan T2 dan T3, kemudian menyatukan hasilnya dengan T1:
select * from t1 union select * from t2 intersect select * from t3 order by c1;
Dengan menambahkan tanda kurung, Anda dapat menerapkan urutan evaluasi yang berbeda. Dalam kasus berikut, hasil penyatuan T1 dan T2 berpotongan dengan T3, dan kueri cenderung menghasilkan hasil yang berbeda.
(select * from t1 union select * from t2) intersect (select * from t3) order by c1;
Catatan penggunaan
-
Nama kolom yang dikembalikan dalam hasil kueri operasi set adalah nama kolom (atau alias) dari tabel dalam ekspresi kueri pertama. Karena nama kolom ini berpotensi menyesatkan, karena nilai dalam kolom berasal dari tabel di kedua sisi operator set, Anda mungkin ingin memberikan alias yang berarti untuk kumpulan hasil.
-
Ekspresi query yang mendahului operator set tidak boleh berisi klausa ORDER BY. Klausa ORDER BY menghasilkan hasil yang diurutkan yang berarti hanya ketika digunakan di akhir kueri yang berisi operator set. Dalam hal ini, klausa ORDER BY berlaku untuk hasil akhir dari semua operasi yang ditetapkan. Kueri terluar juga dapat berisi klausa LIMIT dan OFFSET standar.
-
Ketika kueri operator set mengembalikan hasil desimal, kolom hasil yang sesuai dipromosikan untuk mengembalikan presisi dan skala yang sama. Misalnya, dalam kueri berikut, di mana T1.REVENUE kolom DECIMAL (10,2) dan T2.REVENUE merupakan kolom DECIMAL (8,4), hasil desimal dipromosikan ke DECIMAL (12,4):
select t1.revenue union select t2.revenue;Skal
4anya karena itu adalah skala maksimum dari dua kolom. Ketepatan12karena T1.REVENUE membutuhkan 8 digit di sebelah kiri titik desimal (12 - 4 = 8). Promosi jenis ini memastikan bahwa semua nilai dari kedua sisi UNION cocok dengan hasilnya. Untuk nilai 64-bit, presisi hasil maksimum adalah 19 dan skala hasil maksimum adalah 18. Untuk nilai 128-bit, presisi hasil maksimum adalah 38 dan skala hasil maksimum adalah 37.Jika tipe data yang dihasilkan melebihi batas presisi dan skala Amazon Redshift, kueri mengembalikan kesalahan.
-
Untuk operasi set, dua baris diperlakukan identik jika, untuk setiap pasangan kolom yang sesuai, dua nilai data sama atau keduanya NULL. Misalnya, jika tabel T1 dan T2 keduanya berisi satu kolom dan satu baris, dan baris itu adalah NULL di kedua tabel, operasi INTERSECT di atas tabel tersebut mengembalikan baris itu.