Tips dan Trik IlmuKomputer.Com
Copyright © 2005 IlmuKomputer.Com
Djoni Darmawikarta
djoni_darmawikarta@yahoo.ca
Lisensi Dokumen:
Copyright © 2005 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 © 2005 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
, hari hari_pesan
2
Tips dan Trik IlmuKomputer.Com
Copyright © 2005 IlmuKomputer.Com
, 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.
0 Komentar untuk "Multi-barrel Join"
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).