Penjelasan sederhana
UNION menumpuk hasil dua query ke bawah, seperti menempel data dari sheet kedua di bawah data sheet pertama. Ini berbeda dari JOIN yang menggabungkan ke samping.
UNION otomatis membuang baris yang kembar. Kalau ingin semua baris tetap ada (termasuk yang kembar), pakai UNION ALL, yang juga lebih cepat.
Syaratnya, kedua query harus punya jumlah kolom yang sama dan tipe data yang serasi.
Sintaks
SELECT kolom FROM tabel_a
UNION [ALL]
SELECT kolom FROM tabel_b;
| Bagian | Keterangan |
|---|---|
UNION | Menggabungkan lalu menghapus baris kembar. |
UNION ALL | Menggabungkan apa adanya. Lebih cepat. |
syarat | Jumlah kolom dan tipe datanya harus sama di kedua query. |
Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.
Contoh UNION
Data contoh: karyawan, departemen
Tabel karyawan
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_id |
|---|---|---|---|---|---|---|
| 1 | Andi Pratama | 3 | Bandung | 12500000 | 2019-03-11 | NULL |
| 2 | Bunga Lestari | 1 | Jakarta | 9800000 | 2020-07-01 | NULL |
| 3 | Candra Wijaya | 3 | Bandung | 8200000 | 2021-02-15 | 1 |
| 4 | Dewi Anggraini | 2 | Jakarta | 7500000 | 2022-05-09 | 6 |
| 5 | Eko Saputra | 1 | Jakarta | 6900000 | 2023-01-16 | 2 |
| 6 | Fajar Nugroho | 2 | Surabaya | 11000000 | 2018-09-03 | NULL |
| 7 | Gita Permata | 3 | Jakarta | 8200000 | 2023-08-21 | 1 |
| 8 | Hendra Gunawan | NULL | Medan | 5500000 | 2024-04-02 | NULL |
Tabel departemen
| id | nama_dept | lokasi |
|---|---|---|
| 1 | Keuangan | Jakarta |
| 2 | Marketing | Jakarta |
| 3 | IT | Bandung |
| 4 | Legal | Surabaya |
SELECT kota FROM karyawan
UNION
SELECT lokasi FROM departemen
ORDER BY kota;
Hasil 4 baris
| kota |
|---|
| Bandung |
| Jakarta |
| Medan |
| Surabaya |
Daftar semua kota dari dua tabel, masing-masing muncul sekali.
Cara kerjanya, langkah demi langkah
- Query pertama mengambil kota dari 8 karyawan: Bandung, Jakarta, Surabaya, Medan, dengan beberapa yang berulang.
- Query kedua mengambil lokasi dari 4 departemen: Jakarta, Jakarta, Bandung, Surabaya.
- Kedua hasil ditumpuk, lalu baris yang kembar dibuang, tersisa 4 kota.
ORDER BY kota: diurutkan sesuai abjad. Judul kolomnya mengikuti query pertama, yaitu kota.
Dipakai untuk apa di kantor?
- Menggabungkan data penjualan dari tabel tahun 2025 dan tabel tahun 2026.
- Menggabungkan daftar email pelanggan dan daftar email pendaftar newsletter.
Kesalahan yang sering terjadi
- Jumlah kolom di kedua query berbeda, sehingga database menolak.
- Memakai
UNIONpadahal butuh semua baris, misalnya untuk menjumlahkan transaksi. Transaksi yang kebetulan sama persis ikut terbuang. PakaiUNION ALL.
CONCAT