SQL UNION Operator

SQL UNION Operator

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.

  1. Setiap query select di dalam sql UNION harus memiliki jumlah kolom yang sama.
  2. Kolom-kolom yang bersesuaian harus memiliki tipe data yang sama.
  3. 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.

Tomi Nurhidayat

Data Science dan Machine Learning Enthusiast | SEO Enthusiast.

Previous Post Next Post