Pages

Saturday, March 9, 2013

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 klausa where.

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




0 comments:

Post a Comment