Union
Termasuk bagian Dasar-Dasar dalam perjalanan SQL di Coddy. Pelajaran 48 dari 72.
UNION berbeda dari join. Join menggunakan kondisi untuk menggabungkan tabel, sedangkan UNION hanya menambahkan satu tabel di atas tabel lainnya. Untuk menggunakan UNION, kita akan menulis:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Kedua klausa SELECT harus mematuhi aturan berikut:
- Jumlah field harus sama
- Urutan itu penting
- Kolom pada posisi yang sama harus memiliki tipe data yang cocok
Misalnya, anggap kita memiliki tabel-tabel berikut:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Masalah: Kita ingin membuat satu tabel besar berisi semua nama yang kita miliki.
SELECT name from germany_people
UNION
SELECT name from england_peopleHasil:
| name |
| Lena |
| Leonie |
| George |
UNION hanya mengembalikan nilai yang berbeda, sedangkan UNION ALL mengembalikan semua rekaman apa adanya:
SELECT name from germany_people
UNION ALL
SELECT name from england_peopleHasil:
| name |
| Lena |
| Leonie |
| George |
| Lena |
Kamu juga bisa menggabungkan UNION ALL dengan fungsi agregat, GROUP BY, dan ORDER BY untuk merangkum data dari beberapa tabel. Caranya adalah dengan membungkus UNION ALL di dalam subkueri, lalu menerapkan pengelompokan dan pengurutan di atasnya.
Sebagai contoh, misalkan kita ingin menghitung berapa kali setiap nama muncul di kedua tabel:
SELECT name, COUNT(*) AS total_count
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESCHasil:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
Di sini, UNION ALL (bukan UNION) digunakan agar data duplikat seperti Lena tetap dipertahankan. Jika tidak, data tersebut akan dihapus sebelum dihitung. Subquery menggabungkan semua baris, lalu GROUP BY + COUNT merangkumnya. ORDER BY mengurutkan hasil akhir.
Tantangan
MudahTabel dan kolom yang tersedia:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_2011:product_id,quantity_sold
Ada 3 tabel penjualan.
Temukan total penjualan untuk setiap produk dari semua tabel sekaligus.
Hasilnya harus mencakup product_id dan total penjualan.
Beri nama kolom ini total_sales.
Urutkan hasil berdasarkan total penjualan dari yang terbesar ke yang terkecil.
Coba sendiri
-- Gabungkan ketiga tabel menjadi satu hasil tanpa menghilangkan baris apa pun
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Satu baris per produk, urutkan dari total terbesar
GROUP BY ____
ORDER BY ____ DESC;Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
4Kata Kunci Lainnya
Kata kunci INKata kunci BETWEENKata kunci LIKEKata kunci ASRangkuman: Model Ponsel2Kondisi
Dasar KondisiKata Kunci ANDKata Kunci ORKata Kunci NOTMenggabungkan Beberapa KondisiTanda KurungNilai Boolean3Format Pengembalian Khusus
Nilai nullUrutkan Hasil Bagian 1Urutkan Hasil Bagian 2Ulasan: Perusahaan Keamanan SiberBatasi Jumlah RecordUlasan: Pabrik Kendaraan6Tantangan Pengantar
Ulasan: Pemilihan ParlemenUlasan: Polisi Menangkap Pelaku KejahatanUlasan: Wadah Minuman BarUlasan: Insinyur Membuat Kolom BaruLatihan sendiri: Playground SQL