Apa beda SQL Inner Join, Left Outer Join, Right Outer Join? Apa beda SQL Inner Join, Left Outer Join, Right Outer Join? Mungkin kedengarannya lucu ya pertanyaan diatas(Hari gene masih binun ttg SQL Join)? tp mmg kalo ga sering pake kita bisa lupa prinsip tentang SQL join koq.Wajar…manusiawi:)) Selagi belum ada kerjaan yg di assign ke aq, sambil nunggu JIRA-nya diisi ama mas paddy bisa belajar n review2 hehehe Sekarang mari kita coba mengingat-ingat lagi pelajaran SQl ini : disini qta buat dulu 2 tabel yaitu - tabel area, dengan 3 buah field : area_id, nama_area, luas_area - tabel penduduk, dengan field 3 buah field : penduduk_id, nama_penduduk, area_id kedua tabel diatas diilustrasikan dengan beberapa data sebagai berikut : TABEL AREA ===================================================== Area_ID || Nama_Area || Luas_Area ===================================================== ARS01 Surabaya 1000 ARJ01 Jakarta 2000 ARY09 Yogya 4000 ARS02 Solo 3000 ARK01 Kediri null TABEL PENDUDUK ===================================================== Penduduk_ID || Nama_Penduduk || Area_ID ===================================================== PDS01 Susanna ARS01 PDJ01 Jocki Hendry null PDA01 Asrina Febyanti ARJ01 PDA02 Abi Anwari ARY01 I. Inner Join / Join : Operasi Join tipe ini akan hanya menampilkan tabel sisi kiri yang datanya sama dengan data di pasangan joinnya yg disisi kanan. dengan script sql berikut : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d inner join penduduk p on (d.area_id=p.area_id); script diatas ekivalen dengan script dibawah ini : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from penduduk p inner join area d on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDA01 Asrina Febyanti
2 rows selected II. Left Outer Join / Left Join : Operasi Join tipe ini akan menampilkan semua isi tabel sisi kiri, walaupun data di pasangan joinnya yg disisi kanan nilainya tidak sama ataupun bernilai null. dengan script sql berikut (Note => tabel sisi kiri : area; tabel sisi kanan : penduduk) : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d left outer join penduduk p on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDA01 Asrina Febyanti ARY09 Yogya 4000 ARS02 Solo 3000 ARK01 Kediri 5 rows selected dengan script sql berikut (Note => tabel sisi kiri : penduduk; tabel sisi kanan : area) : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from penduduk p left outer join area d on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna PDJ01 Jocki Henry ARJ01 Jakarta 2000 PDA01 Asrina Febyanti PDA02 Abi Anwari 4 rows selected III. Right Outer Join / Right Join : Operasi Join tipe ini akan menampilkan semua isi tabel sisi Kanan, walaupun data di pasangan joinnya yg disisi kiri nilainya tidak sama ataupun bernilai null. dengan script sql berikut (Note => tabel sisi kiri : area; tabel sisi kanan : penduduk) : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d Right outer join penduduk p on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————–
ARS01 Surabaya 1000 PDS01 Susanna PDJ01 Jocki Henry ARJ01 Jakarta 2000 PDA01 Asrina Febyanti PDA02 Abi Anwari 4 rows selected dengan script sql berikut (Note => tabel sisi kiri : penduduk; tabel sisi kanan : area) : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from penduduk p Right outer join area d on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDA01 Asrina Febyanti ARY09 Yogya 4000 ARS02 Solo 3000 ARK01 Kediri 5 rows selected IV. Cross Join : Operasi Join tipe ini akan menampilkan semua isi tabel sisi Kiri akan memiliki pasangan semua data disisi kanan. Banyaknya Record Cross Join = jumlah record tabel pertama x jumlah record tabel kedua dengan script sql berikut : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d cross JOIN penduduk p akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDS01 Susanna ARS02 Solo 3000 PDS01 Susanna ARY09 Yogya 4000 PDS01 Susanna ARK01 Kediri PDS01 Susanna ARS01 Surabaya 1000 PDJ01 Jocki Henry ARJ01 Jakarta 2000 PDJ01 Jocki Henry ARS02 Solo 3000 PDJ01 Jocki Henry ARY09 Yogya 4000 PDJ01 Jocki Henry ARK01 Kediri PDJ01 Jocki Henry ARS01 Surabaya 1000 PDA01 Asrina Febyanti ARJ01 Jakarta 2000 PDA01 Asrina Febyanti ARS02 Solo 3000 PDA01 Asrina Febyanti ARY09 Yogya 4000 PDA01 Asrina Febyanti ARK01 Kediri PDA01 Asrina Febyanti ARS01 Surabaya 1000 PDA02 Abi Anwari
ARJ01 Jakarta 2000 PDA02 Abi Anwari ARS02 Solo 3000 PDA02 Abi Anwari ARY09 Yogya 4000 PDA02 Abi Anwari ARK01 Kediri PDA02 Abi Anwari 20 rows selected script diatas ekivalen dengan script dibawah ini : select * from area d, penduduk p; V. Full Outer Join / Full Join : Operasi Join tipe ini akan menampilkan semua isi tabel sisi kiri, walaupun data di pasangan joinnya yg disisi kanan nilainya null.dan sebaliknya. dengan script sql berikut : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d full join penduduk p on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDA01 Asrina Febyanti ARY09 Yogya 4000 ARS02 Solo 3000 ARK01 Kediri PDJ01 Jocki Henry PDA02 Abi Anwari 7 rows selected dengan script sql berikut : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from penduduk p full join area d on (d.area_id=p.area_id); akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna PDJ01 Jocki Henry ARJ01 Jakarta 2000 PDA01 Asrina Febyanti PDA02 Abi Anwari ARY09 Yogya 4000 ARS02 Solo 3000 ARK01 Kediri 7 rows selected
VI. Lain-lain Kadang ada yang terbiasa/lebih suka dengan menggunakan left outer join untuk menghasilkan data seperti yang dihasilkan perintah di inner join. bisa juga sich. caranya filter data sisi kanan yang bernilai null. dengan script sql berikut : select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d left outer join penduduk p on (d.area_id=p.area_id) where p.area_id is not null; akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDA01 Asrina Febyanti 2 rows selected atau ada yang suka pake right outer join juga bisa lho. scriptnya sebagai berikut select d.Area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d Right outer join penduduk p on (d.area_id=p.area_id) where d.area_id is not null; akan menghasilkan : AREA_ID NAMA_AREA LUAS_AREA PENDUDUK_ID NAMA_PENDUDUK ——- ——————– ———————- ———– ——————– ARS01 Surabaya 1000 PDS01 Susanna ARJ01 Jakarta 2000 PDA01 Asrina Febyanti