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


Pada artikel kali ini saya akan berbagi pengalaman tentang JOIN pada query SQL.
apa itu Query ??
tentunya kawan² sudah mengerti kan??

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.

Sekian dulu Artikel kali ini, & kalau ada waktu luang Insya Allah saya berbagi pengalaman lagi padamu Kawan..


<<<<< SELAMAT MENCOBA & SEMOGA MEMBANTU >>>>>

23 komentar:

  1. Terima kasih. Dari kmarin saya bingung dgn join sql ini

    BalasHapus
  2. Gan tolong di posting yg bnyk ,artikel spt ini

    BalasHapus
  3. Terima kasih, semoga berkah telah berbagi ilmu...

    BalasHapus
  4. makasih ya..artikelnya lengkap. salam blogger!

    BalasHapus
  5. terima kasih banyak

    BalasHapus
  6. keren banget.. lumayan buat belajar... share ilmu yang lebih banyak :D

    BalasHapus
    Balasan
    1. (y), lg Bnyk Kesibukan, sudah lama off. hehe ^_^
      mau nulis lagi yg lebih mudah dipahami oleh orang awam sekalipun.

      Hapus
  7. Terimakasih, sangat membantu.

    BalasHapus
  8. wah pembahasannya sangat mudah dimengerti, saya jadi paham tentang perbedaan inner, left dan right join, makasih kaka sharing ilmunya ^^

    BalasHapus
  9. mas kalo gak pake INNER, CROSS, LEFT, RIGHT, dan FULL JOIN, sbenernya gimana??? soalnya q jarang gunain perintah tersebut, suwun mas
    http://sharedby-hilmirusdha.blogspot.co.id/

    BalasHapus
    Balasan
    1. maksudnya mas?
      jika ada dua tabel yg ber-relasi antara satu sama yg lain pastinya akan menggunakan salah satu fungsi join tersebut mas, jika langsung from 2 tabel pastinya akan keluar semua dan datanya akan dobel

      Hapus
  10. bang itu di foreign key kan? kek mana biar datanya sukses sya error terus?

    BalasHapus
    Balasan
    1. ada contoh tablenya dan querynya?
      mungkin bisa saya bantu

      Hapus
  11. bisa bantu gan ..?? untuk pengulangan ID propinsi dan antara surabaya dan gersik itu kan id propinsi nya sama sama 1 yah.. nah bila sudah di insert di surabaya 1 maka di gersik tidak bisa mas.. knapa ya ?

    BalasHapus
    Balasan
    1. Bisa dikirimkan screenshotnya gan..
      kemungkinan id_propinsi nya di table kota adalah primary key..

      Hapus