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 EXCEPT 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 persimpangan kedua jenis pengguna ini. Jika Anda ingin tahu pengguna situs web mana yang merupakan pembeli tetapi bukan penjual, Anda dapat menggunakan operator EXCEPT untuk menemukan perbedaan antara dua daftar pengguna. Jika Anda ingin membuat daftar semua pengguna, apa pun perannya, Anda dapat menggunakan operator UNION.
Sintaks
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, dua set hasil tidak dapat dibandingkan dan digabungkan. Operasi set tidak mengizinkan konversi implisit antara berbagai kategori tipe data; untuk informasi selengkapnya, lihatKetik kompatibilitas dan konversi.
Anda dapat membuat kueri yang berisi ekspresi kueri dalam jumlah tak terbatas dan menautkannya dengan operator UNION, INTERSECT, dan EXCEPT dalam kombinasi apa pun. Misalnya, struktur kueri berikut 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
-
Mengatur operasi yang mengembalikan baris dari dua ekspresi query, terlepas dari apakah baris berasal dari satu atau kedua ekspresi.
- BERPOTONGAN
-
Mengatur operasi yang mengembalikan baris yang berasal dari dua ekspresi query. Baris yang tidak dikembalikan oleh kedua ekspresi akan dibuang.
- KECUALI | MINUS
-
Mengatur operasi yang mengembalikan baris yang berasal dari salah satu dari dua ekspresi query. Agar memenuhi syarat untuk hasil, baris harus ada di tabel hasil pertama tetapi bukan yang kedua. MINUS dan KECUALI adalah sinonim yang tepat.
- SEMUA
-
Kata kunci ALL mempertahankan setiap baris duplikat yang dihasilkan oleh UNION. Perilaku default saat kata kunci ALL tidak digunakan adalah membuang duplikat ini. INTERSECT ALL, KECUALI ALL, dan MINUS ALL tidak didukung.
Urutan evaluasi untuk operator yang ditetapkan
Operator set UNION dan EXCEPLE adalah asosiatif kiri. Jika tanda kurung tidak ditentukan untuk mempengaruhi urutan prioritas, kombinasi dari operator set 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 lebih diutamakan daripada operator UNION dan EXCEPT ketika kombinasi operator digunakan dalam kueri yang sama. Misalnya, kueri berikut mengevaluasi persimpangan T2 dan T3, lalu 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 kemungkinan akan 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 kueri yang mendahului operator set tidak boleh berisi klausa ORDER BY. Klausa ORDER BY menghasilkan hasil yang diurutkan bermakna hanya jika 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 yang disetel mengembalikan hasil desimal, kolom hasil yang sesuai dipromosikan untuk mengembalikan presisi dan skala yang sama. Misalnya, dalam kueri berikut, di mana T1.REVENUE adalah kolom DECIMAL (10,2) dan T2.REVENUE adalah kolom DECIMAL (8,4), hasil desimal dipromosikan ke DECIMAL (12,4):
select t1.revenue union select t2.revenue;
Skala ini
4
karena itu adalah skala maksimum dari dua kolom. Ketepatannya adalah12
karena T1.REVENUE membutuhkan 8 digit di sebelah kiri titik desimal (12 - 4 = 8). Promosi jenis ini memastikan bahwa semua nilai dari kedua sisi UNION sesuai 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 presisi Amazon Redshift dan batas skala, kueri akan menampilkan kesalahan.
-
Untuk operasi set, dua baris diperlakukan sebagai 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.