Di PostgreSQL, UNION
operator menggabungkan hasil dari beberapa kueri ke dalam satu kumpulan hasil.
Sintaks
Sintaks resminya seperti ini:
query1 UNION [ALL] query2
UNION
operator menambahkan hasil query2
ke hasil query1
(walaupun tidak ada jaminan bahwa ini adalah urutan pengembalian baris).
Baris duplikat dihilangkan kecuali UNION ALL
digunakan.
Contoh
Misalkan kita memiliki tabel berikut:
SELECT * FROM Teachers;
SELECT * FROM Students;
Hasil:
teacherid | teachername -----------+------------- 1 | Warren 2 | Ben 3 | Cathy 4 | Cathy 5 | Bill 6 | Bill studentid | studentname -----------+------------- 1 | Faye 2 | Jet 3 | Spike 4 | Ein 5 | Warren 6 | Bill
Kita dapat menggunakan UNION
operator untuk mengembalikan semua guru dan siswa:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Hasil:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Secara default, UNION
operator secara implisit menerapkan DISTINCT
operasi. Dengan kata lain, ini hanya mengembalikan nilai yang berbeda secara default. Jadi hasil di atas hanya berisi satu masing-masing Warren, Cathy dan Bill. Ini terlepas dari fakta bahwa tabel gabungan sebenarnya berisi dua Warrens, dua Cathys, dan tiga Bills (ada dua guru bernama Cathy, seorang guru dan pelanggan bernama Warren, dan dua bernama Bill, serta satu siswa bernama Bill).
Berikut adalah contoh yang secara eksplisit menggunakan DISTINCT
operator:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Hasil:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Hasil yang sama.
Sertakan Duplikat
Kita dapat menggunakan ALL
kata kunci untuk memasukkan nilai duplikat dalam hasil:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Hasil:
teachername ------------- Warren Ben Cathy Cathy Bill Bill Faye Jet Spike Ein Warren Bill (12 rows)
Kali ini kami mendapat dua belas baris, bukan delapan yang kami dapatkan dalam contoh pertama kami.
Kita dapat melihat bahwa kedua Cathys dikembalikan dan ketiga Bills dikembalikan.