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
|
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
Post a Comment