Showing posts with label Belajar Mysql. Show all posts
Showing posts with label Belajar Mysql. Show all posts

Thursday, July 14, 2011

Perbedaan SQL Inner Join, Left Outer Join, Right Outer Join

Apa beda SQL Inner Join, Left Outer Join, Right Outer Join?
Sekarang mari kita coba mengingat-ingat lagi pelajaran SQl ini :

disini qta buat dulu 2 tabel yaitu

- tabel area, dengan 3 buah field : id_area, nama_area, luas_area

- tabel penduduk, dengan field 3 buah field : id
_penduduk, nama_penduduk,id_area

kedua tabel diatas diilustrasikan dengan beberapa data sebagai berikut :


TABEL AREA

=====================================================

ID_Area || Nama_Area || Luas_Area

=====================================================

ARS01 Sleman 1000

ARB01 Bantul 2000

ARY09 Yogya 4000

ARG02 Gunungkidul 3000

ARK01 Kulonprogo null


TABEL PENDUDUK

=====================================================

ID_Penduduk || Nama_Penduduk || Area_ID

=====================================================

PDS01 Ngatimin ARS01

PDB01 Jocki Setya null

PDA01 Asrina Febyanti ARB01

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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk
from area d
inner join penduduk p on (d.id_area=p.id_area);

script diatas ekivalen dengan script dibawah ini :

select d.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk
from penduduk p
inner join area d on (d.id_area=p.id_area);


akan menghasilkan :


ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk
from area d
left outer join penduduk p on (d.id_area=p.id_area);

akan menghasilkan :

ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 2000 PDA01 Asrina Febyanti

ARY09 Yogya 4000

ARG02 Gunungkidul 3000

ARK01 Kulonprogo


5 rows selected

dengan script sql berikut (Note => tabel sisi kiri : penduduk; tabel sisi
kanan : area) :

select d.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
penduduk p

left outer join area d on (d.id_area=p.id_area);


akan menghasilkan :


ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

PDB01 Jocki Setya

ARB01 Bantul 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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
area d

Right outer join penduduk p on (d.id_area=p.id_area);



akan menghasilkan :


ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

PDB01 Jocki Setya

ARB01 Bantul 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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
penduduk p

Right outer join area d on (d.id_area=p.id_area);

akan menghasilkan :

ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 2000 PDA01 Asrina Febyanti

ARY09 Yogya 4000

ARG02 Gunungkidul 3000

ARK01 Kulonprogo


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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
area d

cross JOIN penduduk p

akan menghasilkan :


ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 2000 PDS01 Ngatimin

ARG02 Gunungkidul 3000 PDS01 Ngatimin

ARY09 Yogya 4000 PDS01 Ngatimin

ARK01 Kulonprogo PDS01 Ngatimin

ARS01 Sleman 1000 PDB01 Jocki Setya

ARB01 Bantul 2000 PDB01 Jocki Setya

ARG02 Gunungkidul 3000 PDB01 Jocki Setya

ARY09 Yogya 4000 PDB01 Jocki Setya

ARK01 Kulonprogo PDB01 Jocki Setya

ARS01 Sleman 1000 PDA01 Asrina Febyanti

ARB01 Bantul 2000 PDA01 Asrina Febyanti

ARG02 Gunungkidul 3000 PDA01 Asrina Febyanti

ARY09 Yogya 4000 PDA01 Asrina Febyanti

ARK01 Kulonprogo PDA01 Asrina Febyanti

ARS01 Sleman 1000 PDA02 Abi Anwari

ARB01 Bantul 2000 PDA02 Abi Anwari

ARG02 Gunungkidul 3000 PDA02 Abi Anwari

ARY09 Yogya 4000 PDA02 Abi Anwari

ARK01 Kulonprogo 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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
area d

full join penduduk p on (d.id_area=p.id_area);


akan menghasilkan :


ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 2000 PDA01 Asrina Febyanti

ARY09 Yogya 4000

ARG02 Gunungkidul 3000

ARK01 Kulonprogo

PDB01 Jocki Setya

PDA02 Abi Anwari


7 rows selected


dengan script sql berikut :


select d.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
penduduk p

full join area d on (d.area_id=p.area_id);


akan menghasilkan :


ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

PDB01 Jocki Setya

ARB01 Bantul 2000 PDA01 Asrina Febyanti

PDA02 Abi Anwari

ARY09 Yogya 4000

ARG02 Gunungkidul 3000

ARK01 Kulonprogo


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.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
area d

left outer join penduduk p on (d.id_area=p.id_area)

where p.id_area is not null;

akan menghasilkan :



ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 2000 PDA01 Asrina Febyanti


2 rows selected

atau ada yang suka pake right outer join juga bisa lho.

scriptnya sebagai berikut


select d.id_area, d.nama_area, d.luas_area, p.id_penduduk, p.nama_penduduk from
area d

Right outer join penduduk p on (d.id_area=p.id_area)

where d.id-area is not null;

akan menghasilkan :

ID_AREA NAMA_AREA LUAS_AREA ID_PENDUDUK NAMA_PENDUDUK

------- -------------------- ---------------------- -----------
--------------------

ARS01 Sleman 1000 PDS01 Ngatimin

ARB01 Bantul 2000 PDA01 Asrina Febyanti

Monday, February 28, 2011

MyIsam vs InnoDB

Aspek terpenting dari manajemen data adalah 'integrated' atau saling erhubungan, yang berarti banyak komponen menjadi satu dan tentunya sinkron. Kelemahan utama dari alat komputer adalah tiba-tiba mati/ngadat saat tidak boleh
Nah, jadinya teramat penting bahwa dbserver mendukung "transactions" yaitu teknologi Windows yang bisa menjamin bahwa proses penyimpanan data dari RANGKAIAN (lebih dari satu) tabel ter-eksekusi dengan konsep ALL OR NOTHING (semua berhasil, atau semua batal/rollback), tidak terjadi sebagian berhasil sebagian gagal,maka innoDB tepat untuk itu karena support transaksional.
1. Pada MYISAM data dibagi menjadi tiga bagian file, yaitu; format tabel, data, dan index. Sedangkan pada innoDB tidak ada pemisahan data.innoDB lebih besasr dalam masalah kebutuhan storage.
2. RDB (Relation Database)
RDB lebih di anjurkan pake innoDB karena pada innoDB mempunyai fitur foreign key. Sedang pada MYISAM walaupun masih bisa menggunakan join tapi tidak bisa foreign key. Jadi kalai mau ada foreign key maka harus pake innoDB. Makanya pada innoDB ada link untuk relation view,pada myIsam tidak.


ref:
http://dev.mysql.com/doc/refman/5.1/en/innodb.html
http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html
http://www.mikebernat.com/blog/15#comments

LinkWithin

Related Posts Plugin for WordPress, Blogger...