Bedanya INNER, CROSS, LEFT, RIGHT, dan FULL JOIN di SQL

Kadang saya masih selalu kebingungan dalam menerapkan INNER, CROSS, LEFT, RIGHT, dan FULL JOIN di SQL, jika salah penerapannya maka hasilnya pun tidak sesuai dengan yang kita harapkan dan membingungkan hingga membuat pusing kepala...he he...
karena untuk membuat aplikasi dinamis kita membutuhkan Query untuk mengambil data pada tabel yang saling berhubungan.
Pada kesempatan ini saya memberikan contoh, misalnya saya mempunyai  2 tabel yg nantinya akan dihubungkan :
tbl_kota
id_kota
nama_kota
id_propinsi
101
surabaya
1
102
gresik
1
103
kebumen
2
104
semarang
2
105
jogjakarta
3
106
bogor
4
107
banten
5




tbl_propinsi
id_prop
nama_prop
1
jawa timur
2
jawa tengah
4
jawa barat
7
jakarta
8
sumatera utara

Disini kita mendefinisikan bagaimana mencari data yg ada pada tabel tersebut yang bisa dihubungkan antara tabel "tbl_kota" & tabel "tbl_propinsi". pada tabel tersebut yang bisa di relasikan adalah field "id_propinsi" dari tbl_kota & field "id_prop" pada tbl_propinsi, berikut kita Query dengan cara INNER JOIN tabel :

SELECT *
FROM tbl_kota INNER JOIN tbl_propinsi
ON tbl_kota.id_propinsi = tbl_propinsi.id_prop 

hasilnya :
id_kota
nama_kota
id_propinsi
id_prop
nama_prop
101
surabaya
1
1
jawa timur
102
gresik
1
1
jawa timur
103
kebumen
2
2
jawa tengah
104
semarang
2
2
jawa tengah
106
bogor
4
4
jawa barat

------------------------
Disini Kawan² akan lihat persamaan apabila saya gunakan Cross join :

SELECT * 
FROM tbl_kota CROSS JOIN tbl_propinsi
ON tbl_kota.id_propinsi = tbl_propinsi.id_prop

hasilnya :
id_kota
nama_kota
id_propinsi
id_prop
nama_prop
106 bogor 4 4 jawa barat
102 gresik 1 1 jawa timur
103 kebumen 2 2 jawa tengah
104 semarang 2 2 jawa tengah
101 surabaya 1 1 jawa timur

Sama saja bukan, hanya saja datanya tidak diurutkan menurut tbl_kota
--------------------------
Kita coba dengan LEFT JOIN :

SELECT * 
FROM tbl_kota LEFT JOIN tbl_propinsi
ON tbl_kota.id_propinsi = tbl_propinsi.id_prop

hasilnya :

id_kota
nama_kota
id_propinsi
id_prop
nama_prop
101 surabaya 1 1 jawa timur
102 gresik 1 1 jawa timur
103 kebumen 2 2 jawa tengah
104 semarang 2 2 jawa tengah
105 jogjakarta 3 Null Null
106 bogor 4 4 jawa barat
107 banten 5 Null Null

disini anda lihat bahwa data tbl_kota akan ditampilkan yg tidak berelasi tetap ditampilkan, dgn pertimbangan data yg di tbl_propinsi tidak ada maka bernilai NULL.
------------------------
Kita coba dengan RIGHT JOIN :

SELECT * 
FROM tbl_kota RIGHT JOIN tbl_propinsi
ON tbl_kota.id_propinsi = tbl_propinsi.id_prop

hasilnya :
id_kota
nama_kota
id_propinsi
id_prop
nama_prop
101
surabaya
1
1
jawa timur
102
gresik
1
1
jawa timur
103
kebumen
2
2
jawa tengah
104
semarang
2
2
jawa tengah
106
bogor
4
4
jawa barat
Null
Null
Null
7
jakarta
Null
Null
Null
8
sumatera utara

Hasil diatas kebalikan dari LEFT JOIN, bahwa data yg di tbl_kota tidak ada maka bernilai NULL.
-------------------------
Bagaimana jika kita menampilkan semua data??
Maka kita memakai Query FULL JOIN

SELECT * 
FROM tbl_kota FULL JOIN tbl_propinsi
ON tbl_kota.id_propinsi = tbl_propinsi.id_prop
ORDER BY tbl_kota.id_kota

hasilnya :
id_kota
nama_kota
id_propinsi
id_prop
nama_prop
101
surabaya
1
1
jawa timur
102
gresik
1
1
jawa timur
103
kebumen
2
2
jawa tengah
104
semarang
2
2
jawa tengah
106
bogor
4
4
jawa barat
105
jogjakarta
3
Null
Null
107
banten
5
Null
Null
Null
Null
Null
7
jakarta
Null
Null
Null
8
sumatera utara

Semua data yg bisa direlasikan maupun tidak akan keluar semuanya.
Melihat perbedaan Query diatas, maka anda bisa menentukan sendiri Query mana yang ingin anda pakai.
Nah itu dia perbedaanya so jangan sampai pusing kepala lagi asal tahu jurusnya pasti anda pun bisa....

Referensi:http://inspirasicode.blogspot.com/2012/07/perbedaan-inner-left-right-dan-full.html

Comments

Popular posts from this blog

10 Tips Untuk Mempercepat Akses Database MySQL

Membuat pencarian data lebih dari satu table pada database dengan php script

Error Login Lokomet..???