SQL UNION adalah operator dalam bahasa sql yang berfungsi untuk menggabungkan dua buah atau lebih tabel melalui query select statement.
Di materi sebelumnya, kita sudah pernah belajar cara menggabungkan dua buah tabel menggunakan sql join. Tapi masalahnya, join tabel itu menggabungkan tabel ke samping.
Kadang-kadang, kita perlu menggabungkan dua tabel atau lebih ke bawah, bukannya ke samping.
Nah untuk menyelesaikan masalah tersebut, maka operator sql uinon lah yang lebih cocok untuk Anda pake, ketimbang menggunakan join tabel.
Tapi tentu saja tidak serta merta bisa menggabungkan dua atau lebih query select secara bersamaan ya.
Terdapat beberapa hal yang perlu Anda perhatikan jika hendak menggabungkan tabel menggunakan sql union.
- Setiap query select di dalam sql UNION harus memiliki jumlah kolom yang sama.
- Kolom-kolom yang bersesuaian harus memiliki tipe data yang sama.
- Setiap kolom-kolom yang bersesuaian dari hasil query select harus di urutan yang sama.
Sintaks SQL UNION
Berikut ini sintaks cara menggunakan operator UNION.
SELECT
kolom_1, kolom_2, ...
FROM
tabel_1
UNION
SELECT
kolom_1, kolom_2, ...
FROM
tabel_2;
Dari contoh sintaks operator UNION di atas, tampak jelas ya operator sql union berada di antara query select statement pertama dan kedua.
Contoh Penggunaan SQL UNION di Kasus Nyata
Nah untuk memperdalam pemahaman, mari lakukan studi kasus. Misalkan kita memiliki dua buah tabel di database, katakanlah tabel supplier
dan customer
. Isi tabelnya masing-masing seperti berikut.
Tabel customer:
ID | Name | Address |
---|---|---|
1 | Doni | Jl. Ir. Juanda, No.3 |
2 | Tono | Jl. Anggrek Merah, No.10 |
3 | Ucup | Jl. Pahlawan Toha, No.20 |
4 | Asep | Jl. Dewi Sartika, No.14 |
5 | Baim | Jl. Kelapa Tiga, Np.5 |
Tabel supplier:
ID | Name | Address |
---|---|---|
1 | Dodit | Jl. Pramuka, No.7 |
2 | Galih | Jl. Idola, No.16 |
3 | Yoga | Jl. Tempel, No.37 |
4 | Asep | Jl. Dewi Sartika, No.14 |
Di kasus ini, kita diminta untuk merekap data-data customer dan supplier di sebuah tabel yang sama lalu tandai mana yang customer dan mana yang supplier.
SELECT
Name, Address, 'Customer' AS type
FROM
customer
UNION
SELECT
Name, Address, 'Supplier' AS type
FROM
supplier;
Output:
Name | Address | type |
---|---|---|
Doni | Jl. Ir. Juanda, No.3 | Customer |
Tono | Jl. Anggrek Merah, No.10 | Customer |
Ucup | Jl. Pahlawan Toha, No.20 | Customer |
Asep | Jl. Dewi Sartika, No.14 | Customer |
Baim | Jl. Kelapa Tiga, Np.5 | Customer |
Dodit | Jl. Pramuka, No.7 | Supplier |
Galih | Jl. Idola, No.16 | Supplier |
Yoga | Jl. Tempel, No.37 | Supplier |
Asep | Jl. Dewi Sartika, No.14 | Supplier |
Jika diperhatikan, di tabel customer dan supplier ada data yang memiliki ID, Name dan Address sama persis. Tapi pada contoh studi kasus di atas, hasil query masih benar, karena terdapat kolom tambahan yaitu type.
Akan menjadi masalah jika kita melakukan query yang sama, tapi menghilangkan kolom tambahan type. Perhatikan query berikut.
SELECT
Name, Address
FROM
customer
UNION
SELECT
Name, Address
FROM
supplier;
Output:
Name | Address |
---|---|
Doni | Jl. Ir. Juanda, No.3 |
Tono | Jl. Anggrek Merah, No.10 |
Ucup | Jl. Pahlawan Toha, No.20 |
Asep | Jl. Dewi Sartika, No.14 |
Baim | Jl. Kelapa Tiga, Np.5 |
Dodit | Jl. Pramuka, No.7 |
Galih | Jl. Idola, No.16 |
Yoga | Jl. Tempel, No.37 |
Jika Anda jeli, ada satu nama yang hilang dari hasil output di atas. Betul sekali, nama Asep hanya muncul satu kali.
Padahal seharusnya ada dua Asep karena dari masing-masing tabel customer dan supplier terdapat nama Asep.
Nah hal ini terjadi karena operator sql UNION akan mengambil satu data saja jika terdapat data yang duplikat. Lalu bagaimana mengatasi masalah ini?
Agar tidak menghilangkan data yang duplikat, maka Anda bisa menggunakan operator SQL UNION ALL.
SQL UNION ALL
Sintaks sql UNION ALL mirip sekali dengan UNION biasa. Hanya perlu menambahkan kata kunci ALL
setelah operator UNION.
SELECT
kolom_1, kolom_2, ...
FROM
tabel_1
UNION ALL
SELECT
kolom_1, kolom_2, ...
FROM
tabel_2;
Mari kita coba kembali query sebelumnya tanpa menyertakan kolom type, tetapi sekarang gunakan operator sql UNION ALL.
SELECT
Name, Address
FROM
customer
UNION ALL
SELECT
Name, Address
FROM
supplier;
Output:
Name | Address |
---|---|
Doni | Jl. Ir. Juanda, No.3 |
Tono | Jl. Anggrek Merah, No.10 |
Ucup | Jl. Pahlawan Toha, No.20 |
Asep | Jl. Dewi Sartika, No.14 |
Baim | Jl. Kelapa Tiga, Np.5 |
Dodit | Jl. Pramuka, No.7 |
Galih | Jl. Idola, No.16 |
Yoga | Jl. Tempel, No.37 |
Asep | Jl. Dewi Sartika, No.14 |
Supplement
Anda juga bisa menambahkan sql where clause ataupun tambahan lain seperti sql order by keyword ketika menggabungkan tabel menggunakan SQL UNION. Namun tidak akan dipraktekan dalam materi ini. Silahkan dicoba masing-masing.