Kursus
Di dunia SQL, kemampuan untuk menggabungkan data dari beberapa kueri adalah kebutuhan mendasar, dan SQL menyediakan fungsi kuat seperti UNION dan UNION ALL untuk mencapainya.
Seperti yang akan Anda lihat, memahami perbedaan halus antara fungsi UNION dan UNION ALL dalam SQL sangat penting untuk kueri dan pengelolaan data yang efisien. Tutorial ini menjelaskan persamaan, perbedaan, dan skenario penggunaannya menggunakan dataset pendamping untuk membantu Anda mengoptimalkan kueri SQL.
Jawaban Singkat: SQL UNION vs. UNION ALL
Perbedaan utamanya adalah UNION menghapus catatan duplikat, sedangkan UNION ALL menyertakan semua duplikasi. Perbedaan ini tidak hanya mengubah jumlah baris dalam hasil kueri, tetapi juga berdampak pada performa.
| Fitur | UNION | UNION ALL |
|---|---|---|
| Duplikasi | Menghapus catatan duplikat | Menjaga semua catatan (termasuk duplikat) |
| Performa | Lebih lambat (Harus mengurutkan/meng-hash data untuk menemukan duplikat) | Lebih cepat (Langsung menambahkan data ke hasil) |
| Operasi | Teori Himpunan (Union matematis) | Menambahkan / Menumpuk Hasil |
Mari pertimbangkan dua tabel contoh, employees_2023 dan employees_2024, yang merepresentasikan catatan karyawan untuk dua tahun berbeda.
SELECT *
FROM employees_2023
|
employee_id |
name |
department |
|
1 |
Alice |
HR |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
SELECT *
FROM employees_2024
|
employee_id |
name |
department |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
4 |
David |
Marketing |
Sekarang, mari gabungkan kedua tabel menggunakan fungsi UNION.
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
name |
department |
|
1 |
Alice |
HR |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
4 |
David |
Marketing |
Pada hasil ini, catatan duplikat dihapus. Sekarang, bandingkan dengan hasil setelah menggunakan UNION ALL.
SELECT employee_id, name, department FROM employees_2023
UNION ALL
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
name |
department |
|
1 |
Alive |
HR |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
4 |
David |
Marketing |
Pada hasil ini, semua catatan disertakan, dan duplikat tidak dihapus.
Apa itu UNION dalam SQL?
Fungsi UNION menggabungkan hasil dari dua atau lebih kueri SELECT ke dalam satu himpunan hasil, sekaligus menghapus baris duplikat. Setiap pernyataan SELECT dalam UNION harus memiliki jumlah kolom yang sama. Selain itu, tipe datanya harus serupa, dan urutan kolom juga harus sama. Untuk memahami fungsi ini, mari buat dua tabel contoh di bawah.
CREATE TABLE sales_team (
employee_id INT,
employee_name VARCHAR(50)
);
INSERT INTO sales_team (employee_id, employee_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
CREATE TABLE support_team (
employee_id INT,
employee_name VARCHAR(50)
);
INSERT INTO support_team (employee_id, employee_name) VALUES
(3, 'Charlie'),
(4, 'David'),
(5, 'Eve');
Kode di atas akan membuat dua tabel yang akan kita gunakan dalam tutorial ini, masing-masing sales_team dan support_team. Anda dapat melihat tabelnya menggunakan kode di bawah.
SELECT *
FROM sales_team

Catatan dalam tabel sales_team. Gambar oleh Penulis
SELECT *
FROM support_team

Catatan dalam tabel support_team. Gambar oleh Penulis
Ini adalah tabel kecil dengan masing-masing tiga catatan, dan nama kolomnya sudah jelas. Sekarang kedua tabel telah dibuat, mari terapkan fungsi UNION.
SELECT employee_id, employee_name
FROM sales_team
UNION
SELECT employee_id, employee_name
FROM support_team;

Keluaran dari fungsi UNION. Gambar oleh Penulis
Anda dapat melihat bahwa entri duplikat dari employee_id dengan nilai 3 dihapus.
Apa Saja Use Case untuk UNION dalam SQL?
Berikut beberapa use case umum untuk fungsi UNION.
-
Menggabungkan Hasil dari Tabel Berbeda: Saat Anda ingin menggabungkan data dari beberapa tabel dan memastikan tidak ada catatan duplikat,
UNIONadalah fungsi andalan. -
Menangani Sumber Data Berbeda:
UNIONberguna saat menggabungkan tabel dari berbagai sumber data. -
Menghapus Duplikasi di Antara Kueri: Saat Anda ingin memastikan keunikan himpunan hasil gabungan, gunakan
UNION.
Apa itu UNION ALL dalam SQL?
Fungsi UNION ALL menggabungkan hasil dari dua atau lebih kueri SELECT, termasuk semua baris duplikat. Fungsi ini lebih cepat dibanding UNION karena tidak menghapus duplikasi.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;

Keluaran dari fungsi UNION ALL. Gambar oleh Penulis
Anda dapat melihat bahwa, dalam kasus ini, entri duplikat diulang dan tidak dihapus.
Apa Saja Use Case untuk UNION ALL dalam SQL?
Berikut beberapa use case umum untuk fungsi UNION ALL.
- Menggabungkan Hasil dengan Duplikasi: Gunakan
UNION ALLsaat Anda perlu menggabungkan hasil dari beberapa kueri dan mempertahankan semua baris duplikat. - Pertimbangan Performa:
UNION ALLlebih efisien waktu dibanding fungsiUNION, karena tidak memerlukan langkah tambahan untuk menghapus duplikasi. - Mengagregasikan Data dari Periode Berbeda: Saat mengagregasikan data dari periode atau sumber berbeda, dan Anda perlu mempertahankan entri duplikat,
UNION ALLlebih disukai. - Pelaporan dan Analisis: Untuk kebutuhan pelaporan di mana setiap catatan, termasuk duplikat, diperlukan,
UNION ALLcocok digunakan.
UNION dan UNION ALL: Persamaan dan Perbedaan
Mari buat tabel ringkasan mengenai persamaan dan perbedaannya.
|
Fitur |
UNION |
UNION ALL |
|
Baris duplikat |
Dihapus |
Disertakan |
|
Performa |
Lebih lambat |
Lebih cepat |
|
Use case |
Saat Anda memerlukan catatan unik |
Saat Anda memerlukan semua catatan |
|
Ukuran hasil |
Lebih kecil |
Lebih besar |
Perbedaan Sintaks UNION dan UNION ALL di Berbagai Dialek SQL
Walaupun sintaks dasar tetap sama di berbagai dialek SQL, ada sedikit variasi tergantung platform. Jika Anda melihat kodenya, maka di sebagian besar platform seperti SQL Server, Oracle, MySQL, PostgreSQL, atau BigQuery, kodenya akan tampak serupa dengan yang ditunjukkan di bawah ini.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;
Perintah dasar dalam dialek SQL ini tetap sama, dengan beberapa nuansa dan perbedaan:
- Penanganan NULL dan Kolasi: Berbagai dialek SQL dapat memiliki aturan berbeda untuk menangani nilai
NULLdan kolasi string. - Optimisasi Performa: Optimisasi performa dan efisiensi eksekusi bisa bervariasi.
- Penanganan Error dan Peringatan: Dialek yang berbeda dapat menangani error dan peringatan secara berbeda saat menggunakan fungsi ini.
- Fungsi dan Fitur Spesifik Platform: Beberapa dialek SQL mungkin menawarkan fungsi atau fitur tambahan yang dapat digunakan bersama
UNIONdanUNION ALLuntuk skenario yang lebih kompleks.
Perintahnya berbeda cukup signifikan dalam kasus PySpark, yang beroperasi di lingkungan terdistribusi. Kodenya diberikan di bawah, dengan asumsi df1 dan df2 adalah nama dua data frame yang berisi dua tabel yang kita buat di atas. :
df1.union(df2)
3 Aturan dan Kesalahan Umum Saat Menggunakan SQL UNION
Walaupun UNION dan UNION ALL kuat, keduanya ketat terkait sintaks. Jika kueri Anda menghasilkan error, kemungkinan melanggar salah satu dari tiga aturan emas ini.
1. Ketidakcocokan Jumlah Kolom
Kesalahan paling umum yang ditemui pengguna adalah ketidakcocokan jumlah kolom. Untuk menggabungkan dua dataset, "bentuk" tabel harus identik. Anda tidak bisa menumpuk tabel dengan 3 kolom di atas tabel dengan 2 kolom.
Kesalahannya:
-- Ini akan gagal karena jumlah kolom tidak cocok
SELECT employee_id, name, department
FROM employees_2023
UNION
SELECT employee_id, name
FROM employees_2024;
Perbaikannya: Pastikan kedua pernyataan SELECT meminta jumlah kolom yang persis sama. Jika tabel kedua kekurangan data (seperti department), Anda dapat memilih NULL sebagai placeholder agar jumlahnya cocok:
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, NULL as department FROM employees_2024;
2. Kompatibilitas Tipe Data
SQL menggabungkan hasil berdasarkan posisi, bukan nama kolom. Tipe data kolom pertama pada kueri pertama Anda harus cocok (atau kompatibel) dengan tipe data kolom pertama pada kueri kedua Anda.
Kesalahannya: Jika Anda secara tidak sengaja menukar urutan kolom, SQL mencoba menumpuk Angka (ID) di atas String (Nama), yang menyebabkan error konversi tipe data.
-- Ini gagal karena Kolom 1 (ID - INT) tidak bisa digabung dengan Kolom 1 (Name - VARCHAR)
SELECT employee_id, name FROM employees_2023
UNION
SELECT name, employee_id FROM employees_2024;
Perbaikannya: Selalu pastikan bahwa kolom Anda dicantumkan dalam urutan yang persis sama di setiap pernyataan SELECT dalam UNION.
3. Batasan ORDER BY
Salah satu hal yang sering membingungkan adalah di mana menempatkan klausa ORDER BY. Anda tidak dapat mengurutkan sub-kueri individual di dalam operasi UNION; Anda hanya dapat mengurutkan hasil gabungan akhir.
Kesalahannya: Menggunakan ORDER BY sebelum kueri akhir akan memunculkan error sintaks.
-- SINTAKS YANG TIDAK BENAR
SELECT employee_id, name FROM employees_2023
ORDER BY employee_id -- Anda tidak bisa mengurutkan di sini!
UNION
SELECT employee_id, name FROM employees_2024;
Perbaikannya: Tempatkan klausa ORDER BY di bagian paling akhir kueri Anda. Ini menerapkan pengurutan pada keseluruhan himpunan hasil gabungan.
-- SINTAKS YANG BENAR
SELECT employee_id, name FROM employees_2023
UNION
SELECT employee_id, name FROM employees_2024
ORDER BY employee_id; -- Mengurutkan hasil akhir
Penutup
Penting untuk memahami penerapan UNION dibanding UNION ALL dalam mengelola data secara efisien menggunakan SQL. Jika UNION hanya memilih catatan unik, UNION ALL memilih semuanya, sehingga memengaruhi performa dan ukuran himpunan hasil. Gunakan pengetahuan ini untuk memilih fungsi yang tepat sesuai kebutuhan spesifik Anda.
Untuk pembelajaran lebih lanjut, pertimbangkan untuk mengeksplorasi sumber berikut:
- Pengantar SQL: Pelajari cara membuat dan mengkueri basis data relasional menggunakan SQL.
- Dasar-dasar SQL: Kuasai keterampilan SQL fundamental yang Anda butuhkan untuk berinteraksi dan mengkueri data Anda.
- Sertifikasi SQL Associate: Tunjukkan kemampuan SQL Anda dengan mengekstraksi data yang sesuai dari basis data, dan menggunakannya untuk menjawab pertanyaan data yang umum.
- SQL Menengah: Dengan kursus praktik ini, Anda akan mempelajari semua yang perlu diketahui untuk menganalisis data menggunakan kode SQL Anda sendiri hari ini.
Profesional berpengalaman di bidang ilmu data, kecerdasan buatan, analitik, dan strategi data.
Pertanyaan yang Sering Diajukan
Apa perbedaan utama antara SQL UNION dan UNION ALL?
UNION menghapus catatan duplikat, sedangkan UNION ALL menyertakan semua duplikasi.
Apakah ada perbedaan performa antara UNION dan UNION ALL?
Ya, UNION umumnya lebih lambat karena menghapus duplikasi.
Apakah ada use case khusus di mana UNION ALL lebih disukai daripada UNION?
UNION ALL lebih disukai saat Anda memerlukan semua catatan, termasuk duplikat, seperti dalam pelaporan dan analisis.
Kapan saya harus menggunakan SQL UNION alih-alih UNION ALL?
Gunakan UNION saat Anda membutuhkan himpunan hasil gabungan tanpa duplikasi.
Bagaimana dialek SQL yang berbeda memengaruhi penggunaan UNION dan UNION ALL?
Walau sintaks dasarnya konsisten, mungkin ada sedikit variasi dalam performa, penanganan NULL, dan kolasi antar dialek SQL.

