ARSIP BULANAN : December 2012

syntax SQL, inner join, left join, right join ,full join

11 December 2012 19:27:03 Dibaca : 819

syntax SQL

Bagian ini adalah referensi untuk tata bahasa SQL yang Mckoi SQL Database mendukung. mckoi sql database mendukung subset dari entry level ANSI SQL-92. Bagian ini tidak dimaksudkan untuk menjadi tutorial untuk belajar SQL. Untuk buku SQL dan tutorial online melihat bagian link di halaman rumah.

SQL  INNER JOIN Keyword

 SELECT * FROM Individual INNER JOIN Publisher ON Individual.IndividualId = Publisher.IndividualId WHERE Individual.IndividualId = '2' SELECT * FROM Penerbit individu INNER JOIN ON = Individual.IndividualId Publisher.IndividualId MANA Individual.IndividualId = '2 '

 

Untuk membuat query yang mencakup catatan-satunya di mana data di bidang bergabung adalah sama, menggunakan INNER JOIN operasi.

  • Sebuah LEFT JOIN atau BERGABUNG RIGHT dapat bersarang di dalam suatu INNER JOIN, tapi INNER JOIN tidak dapat bersarang di dalam LEFT JOIN atau RIGHT JOIN. Lihat pembahasan bersarang di topik INNER JOIN untuk melihat bagaimana sarang bergabung dalam lainnya bergabung.
  • Anda dapat menghubungkan beberapa klausa ON. Lihat pembahasan klausul menghubungkan dalam topik INNER JOIN untuk melihat bagaimana hal ini dilakukan.

 

FULL JOIN Sintaks:

Sintaks dasar BERGABUNG LENGKAP adalah sebagai berikut:

 SELECT table1.column1, table2.column2 ...
 DARI table1
 LENGKAP BERGABUNG table2
 ON table1.common_filed = table2.common_field;

Kondisi di sini diberikan bisa berupa ekspresi yang diberikan berdasarkan kebutuhan Anda.

Contoh:

Pertimbangkan mengikuti dua tabel, (a) PELANGGAN tabel adalah sebagai berikut:

 + ---- + ---------- + ----- + ----------- + ---------- +
 | ID | NAME | USIA | ALAMAT | GAJI |
 + ---- + ---------- + ----- + ----------- + ---------- +
 | 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
 | 2 | Khilan | 25 | Delhi | 1500.00 |
 | 3 | kaushik | 23 | Kota | 2000.00 |
 | 4 | Chaitali | 25 | Mumbai | 6.500,00 |
 | 5 | Hardik | 27 | Bhopal | 8.500,00 |
 | 6 | Komal | 22 | MP | 4500.00 |
 | 7 | Muffy | 24 | Indore | 10000.00 |
 + ---- + ---------- + ----- + ----------- + ---------- +

(B) tabel lain adalah PESANAN sebagai berikut:

 + ----- + --------------------- + ------------- + ------- - +
 | OID | TANGGAL | CUSTOMER_ID | JUMLAH |
 + ----- + --------------------- + ------------- + ------- - +
 | 102 | 2009-10-08 00:00:00 | 3 | 3000 |
 | 100 | 2009-10-08 0:00:00 | 3 | 1500 |
 | 101 | 2009-11-20 0:00:00 | 2 | 1.560 |
 | 103 | 2008-05-20 0:00:00 | 4 | 2.060 |
 + ----- + --------------------- + ------------- + ------- - +

Sekarang mari kita bergabung dengan dua tabel menggunakan BERGABUNG LENGKAP sebagai berikut:

 SQL> SELECT ID, NAMA, JUMLAH, DATE
      DARI NASABAH
      LENGKAP BERGABUNG PERINTAH
      ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Hal ini akan menghasilkan hasil sebagai berikut:

 + ------ + --------- + -------- + --------------------- + | ID | NAME | JUMLAH | TANGGAL | + ------ + --------- + -------- + --------------- ------ + | 3 | kaushik | 3000 | 2009-10-08 00:00:00 | | 3 | kaushik | 1500 | 2009-10-08 00:00:00 | | 2 | Ramesh | 1560 | 2009-11-20 0:00:00 | | 4 | kaushik | 2.060 | 2008-05-20 0:00:00 | | 1 | Ramesh | NULL | NULL | | 2 | Ramesh | 1.560 | 2009-11-20 0:00:00 | | 3 | kaushik | 3000 | 2009-10-08 0:00:00 | | 3 | kaushik | 1500 | 2009-10-08 0:00:00 | | 4 | kaushik | 2.060 | 2008 -05-20 0:00:00 | | 5 | Hardik | NULL | NULL | | 6 | Komal | NULL | NULL | | 7 | Muffy | NULL | NULL | + + ----- ------ ---- + -------- + --------------------- + 

Jika database Anda tidak mendukung FULL JOIN maka Anda dapat menggunakan klausa UNION ALL ke combile dua BERGABUNG sebagai berikut:

 SQL> SELECT ID, NAMA, JUMLAH, DATE
      DARI NASABAH
      KIRI BERGABUNG PERINTAH
      ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
 UNION ALL
      SELECT ID, NAMA, JUMLAH, DATE
      DARI NASABAH
      RIGHT JOIN PERINTAH
      ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

 

 

 PERBEDAAN INNER JOIN, LEFT JOIN AND RIGHT 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