- Home>
- Tipe / Jenis JOIN TABLE pada MySQL 5.0
Posted by : Unknown
Minggu, 19 Januari 2014
Jika Anda telah memahami fungsi join pada
database relasional untuk menghubungkan berbagai table, maka artikel berikut
akan menjelaskan dan menunjukkan contoh penggunaan variasi join pada MySQL
versi 5.0. JOIN sendiri merupakan konstruksi bahasa yang tidak bisa berdiri
sendiri, biasanya berupa klausa pada bagian referensi table pada SELECT, UPDATE
atau DELETE statement.
Tipe-tipe JOIN yang akan dibahas adalah :
- INNER JOIN
- CROSS JOIN
- OUTER JOIN
- STRAIGHT JOIN
Semua contoh pada artikel ini menggunakan database PHI-Minimart.
JIka Anda belum melakukan hal tersebut, silahkan lakukan instalasi dengan dua
pilihan, PHI-Minimart
full atau PHI-Minimart
master table saja.
Tiga table yang akan kita gunakan dari database tersebut adalah ms_cabang, ms_kota dan ms_propinsi dengan
relasi terlihat seperti pada gambar berikut.
Keterangan : Relasi antar table ms_cabang, ms_kota dan
ms_propinsi
INNER
JOIN
INNER JOIN adalah tipe join yang akan kita bahas pertama. Tipe join ini
akan mengambil semua row dari table asal dan table tujuan dengan kondisi nilai
key yang terkait saja - jika ada, dan jika tidak maka row tersebut tidak
akan muncul.
Kalau tidak terdapat kondisi key terkait antar table, maka semua row
dari kedua table dikombinasikan.
Syntax dari INNER JOIN adalah sebagai berikut :
table_reference [INNER]
JOIN table_factor [join_condition]
Terlihat bahwa keyword INNER boleh digunakan secara eksplisit atau
tidak. Jika tidak digunakan maka konstruksi JOIN tanpa keyword lain dianggap
sebagai INNER JOIN.
INNER JOIN Antar Table
dengan Kondisi ("ms_cabang" dan "ms_kota" dengan
key "kode_kota")
SELECT * FROM ms_cabang
INNER JOIN ms_kota ON ms_cabang.kode_kota = ms_kota.kode_kota
Hasil terlihat seperti gambar berikut ini. Disini table sumber adalah
ms_cabang (left) mencari referensi row lain dari table ms_kota (right) dengan
kondisi nilai kode_kota diantara kedua table tersebut sama.
Kondisi ini menggunakan keyword ON.
Dengan panduan gambar, kita lihat bahwa tiap row dari ms_cabang akan
dicari padanan row-nya di ms_kota :
- untuk row pertama kita memiliki kode_kota dengan nilai
"KOTA-003", ini akan dicari referensinya ke table ms_kota untuk
nilai yang sama dan kita dapatkan row dengan nilai nama_kota
"Lhokseumawe" adalah padanannya.
- untuk row kedua kita memiliki kode_kota dengan nilai
"KOTA-083", ini akan dicari referensinya ke table ms_kota untuk
nilai yang sama dan kita dapatkan row dengan nilai nama_kota
"Bau-bau" adalah padanannya.
- demikian seterusnya.
Sekarang mari kita coba hapus referensi untuk "Lhokseumawe"
dari table ms_kota :
DELETE FROM ms_kota
WHERE nama_kota = 'Lhokseumawe';
Setelah itu coba jalankan kembali perintah JOIN di atas, Anda akan
mendapatkan hasil JOIN tanpa referensi row "Lhokseumawe". Jadi INNER
JOIN dengan kondisi mengharuskan row dari tiap table memiliki nilai yang sama
untuk column referensinya (dalam hal ini kode_kota).
Kembalikan lagi row referensi yang kita hapus tadi dengan perintah
INSERT berikut ini :
INSERT INTO `ms_kota`
VALUES ('KOTA-003','Lhokseumawe','P33')
INNER JOIN Antar Table
Tanpa Kondisi ("ms_cabang" dengan "ms_kota")
SELECT * FROM ms_cabang
INNER JOIN ms_kota
Hasilnya adalah untuk tiap row dari ms_cabang
akan dikombinasikan dengan semua row dari ms_kota -
contoh hasilnya terlihat seperti pada gambar di bawah ini.
INNER JOIN antar table "ms_cabang", "ms_kota"
dan "ms_propinsi"
SELECT
ms_cabang.nama_cabang,
ms_kota.nama_kota,
ms_propinsi.nama_propinsi
FROM ms_cabang
INNER JOIN ms_kota ON
ms_cabang.kode_kota = ms_kota.kode_kota
INNER JOIN ms_propinsi
ON ms_kota.kode_propinsi = ms_propinsi.kode_propinsi
Hasil eksekusi terlihat seperti gambar berikut. Dengan penggabungan
ketiga table ini sekarang kita dapatkan setiap cabang memiliki informasi nama
kota dan nama propinsi dimana cabang tersebut berada.
Implisit
INNER JOIN dengan Koma
INNER JOIN antar table secara implisit dapat menggunakan daftar table
yang dipisah dengan tanda koma (,). Pengkondisian menggunakan klausawhere.
SELECT
ms_cabang.nama_cabang,
ms_kota.nama_kota ,
ms_propinsi.nama_propinsi
FROM ms_cabang
, ms_kota
, ms_propinsi
WHERE
ms_cabang.kode_kota = ms_kota.kode_kota
AND
ms_kota.kode_propinsi = ms_propinsi.kode_propinsi
CROSS
JOIN
CROSS JOIN identik dengan INNER JOIN pada MySQL 5.0. Pembahasannya sama
dengan INNER JOIN sehingga tidak diulangi lagi disini.
Contoh Penggunaan :
SELECT
ms_cabang.nama_cabang,
ms_kota.nama_kota,
ms_propinsi.nama_propinsi
FROM
ms_cabang
CROSS JOIN
ms_kota ON ms_cabang.kode_kota = ms_kota.kode_kota
CROSS JOIN
ms_propinsi ON ms_kota.kode_propinsi = ms_propinsi.kode_propinsi
OUTER
JOIN
OUTER JOIN merupakan tipe join yang mencari referensi
data dari suatu table sumber ke table lain dengan tidak menghilangkan data
sumber apabila referensi tidak diketemukan.
Untuk menggunakan tipe OUTER JOIN maka perlu memperhatikan beberapa hal
berikut :
- perlu dibedakan antara table sumber dan table referensi,
ini ditentukan dengan cara menspesifikasikan kedudukan table sumber apakah
di kiri (LEFT) atau di kanan (RIGHT).
- jika tidak ada data dari table referensi yang cocok
dengan kondisi join maka hanya data dari table sumber yang ditampilkan
tetapi kolom-kolom table referensi akan berisi null.
Contoh Penggunaan :
- Hapus data master "Lhokseumawe" dari
table ms_kota
DELETE FROM ms_kota WHERE nama_kota =
'Lhokseumawe'
- Lakukan join seperti perintah berikut ini, dan
perhatikan hasilnya seperti pada gambar.
SELECT ms_cabang.*,
ms_kota.nama_kota
FROM ms_cabang
LEFT OUTER JOIN ms_kota
ON ms_cabang.kode_kota =
ms_kota.kode_kota
- Tambahkan kembali
data "Lhokseumawe" ke table ms_kota
INSERT INTO ms_kota(kode_kota, nama_kota,
kode_propinsi)
VALUES ('KOTA-003', 'Lhokseumawe', 'P33');
- Sekarang coba ganti syntax pada query di atas dari
"LEFT" menjadi "RIGHT" dan lihat hasil eksekusinya.
Tentunya dari hasil tersebut Anda sudah dapat mengambil kesimpulan
perbedaan dari kedua konstruksi tersebut.
STRAIGHT_JOIN
STRAIGHT_JOIN merupakan pengganti keyword JOIN pada
MySQL yang digunakan untuk "memaksa" proses join table dari kiri
(LEFT) ke kanan (RIGHT).
Contoh Penggunaan :
SELECT ms_cabang.*,
ms_kota.nama_kota
FROM ms_cabang
STRAIGHT_JOIN ms_kota
ON
ms_cabang.kode_kota = ms_kota.kode_kota
Diberdayakan oleh Blogger.