Memahami SQL Join dengan Diagram Venn

Query JOIN pada bahasa SQL berfungsi untuk menggabungkan data dari 2 atau lebih tabel dalam sebuah database. Syntax SQL mempunyai 4 tipe JOIN, yaitu: INNER, OUTER, LEFT, dan RIGHT.

Diagram Venn adalah diagram yang menunjukan semua kemungkinan relasi logis antara sekelompok variabel yang berbeda. Di sekolah dasar, Diagram Venn dikenalkan pada saat mempelajari teori himpunan pada Matematika. Diagram Venn biasanya dilambangkan dengan 2 atau lebih lingkaran yang saling berpotongan (meskipun tidak harus selalu demikian).

Misalkan kita mempunyai 2 buah tabel pada database, TabelA dan TabelB. TabelA di sebelah kiri dan TabelB di sebelah kanan. Kemudian kita akan mengisi masing-masing dengan 4 buah data.

id nama       id  nama
-- ----       --  ----
1  Andik      1   Andik
2  Binta      2   Bambi
3  Carli      3   Conan
4  Didut      4   Didut

Sekarang kita coba gabungkan kedua tabel di atas menggunakan tipe-tipe JOIN yang ada.

1. INNER JOIN

SELECT * FROM TabelA INNER JOIN TabelB
ON TabelA.nama = TabelB.nama

id nama       id  nama
-- ----       --  ----
1  Andik      1   Andik
4  Didut      4   Didut

INNER JOIN hanya akan menampilkan data yang cocok satu sama lain (berpasangan) pada kedua tabel. Diagram Venn-nya adalah sebagai berikut.

inner join

2. OUTER JOIN
Pada dasarnya OUTER JOIN dibagi menjadi 3, FULL OUTER JOIN, LEFT OUTER JOIN, dan RIGHT OUTER JOIN.

2.a. FULL OUTER JOIN

SELECT * FROM TabelA FULL OUTER JOIN TabelB
ON TabelA.nama = TabelB.nama

id    nama       id    nama
--    ----       --    ----
1     Andik      1     Andik
2     Binta      null  null
3     Carli      null  null
4     Didut      4     Didut
null  null       2     Bambi
null  null       3     Conan

FULL OUTER JOIN menghasilkan semua data yang ditemukan dan cocok satu sama lain pada kedua tabel, jika ada yang tidak cocok, bagian yang tidak ada tersebut akan berisi null. Jadi bisa dikatakan FULL OUTER JOIN ini akan menampilkan semua data yang ada di kedua tabel termasuk yang tidak cocok satu sama lain. Diagram Venn-nya adalah sebagai berikut.

full outer join

2.b. LEFT OUTER JOIN

SELECT * FROM TabelA LEFT OUTER JOIN TabelB
ON TabelA.nama = TabelB.nama

id    nama       id    nama
--    ----       --    ----
1     Andik      1     Andik
2     Binta      null  null
3     Carli      null  null
4     Didut      4     Didut

LEFT OUTER JOIN menghasilkan semua data yang ada pada TabelA (tabel sebelah kiri), dengan pasangannya (jika ada) pada TabelB (tabel sebelah kanan). Jika pasangannya tidak ditemukan, tabel sebelah kanan akan berisi null. Diagram Venn-nya adalah sebagai berikut.

left outer join

Lalu bagaimana jika kita menginginkan data yang hanya ada pada TabelA (tabel sebelah kiri)? Untuk itu kita membutuhkan bantuan klausa WHERE.

2.c. LEFT OUTER JOIN dengan klausa WHERE

SELECT * FROM TabelA LEFT OUTER JOIN TabelB
ON TabelA.nama = TabelB.nama
WHERE TabelB.id IS null

id    nama       id    nama
--    ----       --    ----
2     Binta      null  null
3     Carli      null  null

Query LEFT OUTER JOIN di atas menghasilkan data yang hanya ada pada TabelA (tabel sebelah kiri). Diagram Venn-nya adalah sebagai berikut.

left outer join where

Untuk tipe RIGHT OUTER JOIN tidak perlu dijelaskan lagi karena hasilnya hanya kebalikan dari LEFT OUTER JOIN. Terakhir, ada satu bentuk diagram lagi, yaitu jika yang diinginkan hanya data yang tidak memiliki pasangan satu sama lain, alias data tersebut berada di luar bagian yang berpotongan.

2.d. FULL OUTER JOIN dengan klausa WHERE

SELECT * FROM TabelA FULL OUTER JOIN TabelB
ON TabelA.nama = TabelB.nama
WHERE TabelA.id IS null OR
TabelB.id IS null

id    nama       id    nama
--    ----       --    ----
2     Binta      null  null
3     Carli      null  null
null  null       2     Bambi
null  null       3     Conan

Query FULL OUTER JOIN di atas menghasilkan data yang unik (tidak ada yang berpasangan) dari TabelA dan TabelB. Diagram Venn-nya adalah sebagai berikut.

full outer join where

Artikel ini merupakan terjemahan bebas dari artikel yang ditulis oleh Jeff Atwood dengan ditambah penjelasan seperlunya.

About Sibudi

Ubuntu user | Loves books | Blogger | Web Developer | Learn PHP, JavaScript, Ruby & Python the hard way

08. April 2012 by Sibudi
Categories: SQL | Tags: , , | 1 comment

One Comment

  1. Pingback: Perbedaan Left Join dan Left Outer Join | Sibudi </>

Leave a Reply

Required fields are marked *