Mungkin kita pernah membuat model tabel yang rumit seperti ini, tabel yang bisa memiliki atribut sama namun sengaja dipisahkan, tapi pada akhirnya kita harus menjalankan 2 query terpisah untuk memanggilnya. Sebut saja kita mempunyai tabel
bukutamu dengan atribut (
id
,
alamat_ip
,
nama
,
judul
,
pesan
,
tanggal
), namun pada masa penggunaan ternyata banyak yang mengirimkan pesan spam yang tidak kita inginkan, dan solusi yang terpikir pada saat itu adalah membuat tabel
spam (dengan atribut yang sama dengan tabel, tapi kita menyortir terlebih dahulu dengan filter anti-spam yang kita buat, atau mungkin menggunakan
Akismet), dengan maksud agar si spam bisa ditinggalkan saat
backup, dan tabel bukutamu dalam keadaan bebas
spam.
Di sistem pengelolaan (
backend), kita bisa melakukan query masing-masing terhadap kedua tabel untuk ditampilkan terpisah, tapi melihat dua halaman terpisah untuk maksud yang sama (dalam hal ini membedakan yang mana buku tamu dengan
spam) bukanlah solusi yang bagus.

kedua tabel dibuat terpisah dengan pengelolaan terpisah
Solusi
Dalam kasus seperti ini bisa dilakukan tiga solusi;
- Gabungkan kedua tabel secara fisik menjadi satu dan ditambah atribut (…,
is_spam
) sehingga nantinya query akan dibatasi dengan ‘ WHERE is_spam = 0
‘ (dimana kita memilih hanya bukan spam)
- Gabungkan kedua tabel dalam query menggunakan
UNION
sehingga yang kita lakukan hanya sekali query saja
- Lakukan dua query untuk mengambil data dari kedua tabel dan menggabungkannya nanti di pemrograman.
Tapi sesuai judul, kita akan menggunakan pilihan nomor 2 saja.
UNION Beraksi
Jadi, setelah kita sepakat dengan memilih solusi nomor dua diatas, maka tinggal kita selesaikan dengan sihir
UNION
saja.
Meskipun sudah dibahas sedikit, tapi sebelum lebih jauh biar saya jelaskan tambahan mengenai
UNION
.
Pada dasarnya, union adalah fungsi untuk menggabungkan dua atau lebih query
SELECT
dalam satu hasil keluaran saja. Dengan catatan kedua query
SELECT
tersebut harus memiliki jumlah field yang sama.
Langsung kita coba, struktur tabel bukutamu dan spam yang saya gunakan adalah sebagai berikut
3 | id INT PRIMARY KEY AUTO_INCREMENT, |
8 | tanggal TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL |
Begitu pula dengan tabel spam, tidak ada yang dirubah selain nama tabelnya.
Untuk itu, dengan query ini…
1 | ( SELECT id, nama, judul, pesan, tanggal, '0' as is_spam FROM bukutamu) |
3 | ( SELECT id, nama, judul, pesan, tanggal, '1' as is_spam FROM spam) |
kedua
SELECT
akhirnya akan bersatu dan menambahkan satu field
is_spam
yang bernilai
0
jika datang dari tabel bukutamu, dan bernilai
1
jika datang dari tabel spam.
Sifat normalnya
UNION
adalah selalu
DISTINCT
, jadi jika ditemukan record yang sama tidak akan ditampilkan kedua-kalinya.

Pengelolaan Bukutamu dan Spam disatukan
Kesimpulan
Jadi
UNION
berguna untuk menggabungkan beberapa query
SELECT
untuk menghasilkan satu keluaran saja.
Batasan/aturan yang dapat kita simpulkan diantaranya…
- Query yang disatukan harus menghasilkan jumlah field yang sama.
- Nilai record yang sama dalam
UNION
akan disatukan, dan tidak akan tampil dua kali (sama ketika kita menggunakan DISTINCT
)
- Statement
ORDER
menggunakan alias pada setiap SELECT
, bukan nama field sebenarnya.
- Statement
ORDER
(tanpa LIMIT
pada salah-satu SELECT
) harus disimpan di akhir, karena jika disimpan didalam salah-satu SELECT
tidak akan berpengaruh.
- Jika menggunakan statement
LIMIT
(dan atau ORDER
), harus ditentukan didalam salah-satu SELECT
atau LIMIT
total.
0 comments:
Post a Comment