Tips dan Trik IlmuKomputer.Com
Copyright © 2006 IlmuKomputer.Com
Djoni Darmawikarta
djoni_darmawikarta@yahoo.ca
Lisensi Dokumen:
Copyright © 2006 IlmuKomputer.Com
Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan
secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus
atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap
dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin
terlebih dahulu dari IlmuKomputer.Com.
Bila kita memerlukan lebih dari satu baris (row) dari sebuah tabel untuk membentuk satu baris
output (hasil SQL query), kita dapat memanfaatkan “multi-barrel” join. Untuk memperjelas kita
gunakan contoh berikut.
Catatan: Semua SQL statements dibawah ini mengikuti syntax MySQL dan
semuanya sudah ditest di MySQL database server (version 5)
Ada dua tabel sebagai berikut:
CREATE TABLE pesanan (
no_pesanan INT
, tanggal_pesan DATE
, tanggal_kirim DATE
)
;
CREATE TABLE tanggal (
tanggal DATE
, hari CHAR(8)
, bulan CHAR(10)
, tahun INT(4)
)
;
Kita isi kedua tabel dengan sejumlah data sebagai berikut:
INSERT INTO pesanan VALUES
(1001,'2005-01-01','2005-01-01')
, (1002,'2005-01-05','2005-01-05')
, (1003,'2005-01-10','2005-02-01')
, (1004,'2005-01-20','2005-02-01')
;
INSERT INTO tanggal VALUES
('2005-01-01','Sabtu','Januari','2005')
, ('2005-01-05','Rabu','Januari','2005')
, ('2005-01-10','Senin','Januari','2005')
1
Tips dan Trik IlmuKomputer.Com
Copyright © 2006 IlmuKomputer.Com
, ('2005-01-20','Kamis','Januari','2005')
, ('2005-02-01','Selasa','Februari','2005')
;
Yang kita perlukan adalah daftar pesanan, tanggal pesan dan tanggal kirim, beserta bentuk hari,
bulan dan tahunnya. Kedua tanggal ini membutuhkan dua buah join sekaligus dari pesanan
tabel pesanan ke tabel tanggal. Bentuk SQL statement untuk menghasilkan daftar tersebut
adalah:
/* Script name: multi_barrel_qry.sql
USE multi_barrel;
SELECT
no_pesanan
, tanggal_pesan
, b.hari hari_pesan
, b.bulan bulan_pesan
, b.tahun tahun_pesan
, tanggal_kirim
, c.hari hari_kirim
, c.bulan bulan_kirim
, c.tahun tahun_kirim
FROM
pesanan a
, tanggal b
, tanggal c
WHERE
a.tanggal_pesan = b.tanggal
AND a.tanggal_kirim = c.tanggal
;
Perhatikan penggunaan kedua alias (b dan c) untuk table tanggal.
Outputnya adalah:
Catatan: Bila kita menggunakan tabel tanggal hanya sekali seperti pada query berikut:
/* Script name: wrong_qry.sql
USE multi_barrel;
SELECT
no_pesanan
, tanggal_pesan
2
Tips dan Trik IlmuKomputer.Com
Copyright © 2006 IlmuKomputer.Com
, hari hari_pesan
, bulan bulan_pesan
, tahun tahun_pesan
, tanggal_kirim
, hari hari_kirim
, bulan bulan_kirim
, tahun tahun_kirim
FROM
pesanan
, tanggal
WHERE
tanggal_pesan = tanggal
;
Hasilnya tidak seperti yang diinginkan:
Perhatikan kesalahan hari_kirim dan bulan_kirim pada dua baris terakhir, karena yang
digunakan sebenarnya adalah tanggal_pesan bukan tanggal_kirim.
Catatan: Teknik lain yang dapat dimanfaatkan adalah dengan membuat view pada tabel tanggal
untuk masing-masing tanggal_pesan dan tanggal_kirim. Teknik ini dipakai di dimensional data
warehousing untuk menangani multi-role suatu dimension (dalam contoh kita diatas tanggal
adalah sebuah dimension) . Ini akan dibahas di tulisan mendatang tentang teknik-teknik
dimensional data warehousing.
Ringkasan
Bila kita memiliki sejumlah column sejenis didalam satu tabel (sejumlah tanggal di table
pesanan pada contoh diatas, namun tidak terbatas hanya dua tanggal) yang ‘terhubung’
dengan satu tabel lain (table tanggal pada contoh diatas), maka query untuk menghasilkan
kolom-kolom tersebut memanfaatkan multi-barrel join.
Diperlukan alias untuk menggunakan satu tabel tersebut berulang-kali.
1 Komentar untuk "Multi-barrel Join"
Terimakasih atas informasinya...
Informasi Pilihan Identitas:
Google/Blogger : Khusus yang punya Account Blogger.
Lainnya : Jika tidak punya account blogger namun punya alamat Blog atau Website.
Anonim : Jika tidak ingin mempublikasikan profile anda (tidak disarankan).