Rabu, Mei 26, 2010

SQL Join

> Kalian sering menggunakan contoh diatas untuk menyeleksi dari lebih dari 2 tabel? Sebenarnya SQL menyediakan suatu cara untuk seleksi lebih dari 2 tabel tersebut, dan cara itu disebut JOIN.

‘SQL joins are used to query data from two or more tables, based on a relationship between certain columns in these tables’. Join digunakan untuk seleksi dari dua atau lebih tabel berdasarkan relasi dari tabel-tabel yang berhubungan. Karena relasi pun bermacam-macam, tidak selalu bersifat relasi penuh, maka Join pun ada beberapa macam (contoh dibawah ini, saya coba di MySQL) :

* Inner Join atau Join, mengembalikan baris dimana kedua kolom kunci dari kedua tabel bernilai sama. Contoh :
view source
print?
1 SELECT * FROM tbA INNER JOIN tbB ON tbA.key = tbB.key;

Atau
view source
print?
1 SELECT * FROM tbA JOIN tbB ON tbA.key = tbB.key;

Atau, jika memang kedua field yang menjadi key memiliki nama yang sama, sintak dapat dipermudah dengan cara seperti ini, sehingga penggunaan ON dapat dihilangkan :
view source
print?
1 SELECT * FROM tbA NATURAL JOIN tbB;
* Left Join, mengembalikan seluruh baris di tabel kiri, dan baris di tabel kanan yang nilai field kunci sama dengan tabel kiri. Seluruh baris di tabel kiri akan ditampilkan, meskipun nilai tidak ditemukan baris dengan kolom kunci yang sama pada tabel kanan. Contoh :
view source
print?
1 SELECT * FROM tbA LEFT JOIN tbB ON tbA.key = tbB.key;

Atau dengan cara NATURAL
view source
print?
1 SELECT * FROM tbA NATURAL LEFT JOIN tbB;

Hasilnya nampak seperti ini :
tbA.key tbB.key
1 1
2

Terlihat diatas, tbA.key bernilai 2 tapi tbB.key tidak ada yang bernilai 2. Namun baris tetap ditampilkan dan hasil seleksi dari tbB.key bernilai Nul.
* Right Join, mengembalikan seluruh baris di tabel kanan, dan baris di tabel kiri yang nilai field kunci sama dengan tabel kanan. Hampir sama dengan Left Join, hanya saja seluruh baris yang terleksi dari tabel kanan. Contoh :
view source
print?
1 SELECT * FROM tbA RIGHT JOIN tbB ON tbA.key = tbB.key;

Atau dengan cara NATURAL
view source
print?
1 SELECT * FROM tbA NATURAL RIGHT JOIN tbB;

Hasilnya nampak seperti ini :
tbA.key tbB.key
1 1
3
* Full Join, mengembalikan seluruh baris yang memiliki nilai kolom key yang sama, dan baris yang tidak memiliki nilai kolom key yang sama dari kedua tabel. Sehingga seluruh baris dari kedua tabel akan ditampilkan. Contoh :
view source
print?
1 SELECT * FROM tbA FULL JOIN tbB ON tbA.key = tbB.key;

Hasilnya :
tbA.key tbB.key
1 1
2
3

Mengapa harus menggunakan Left Join, Right Join, atau Full Join, jika Join biasa pun sudah dapat menggabungkan kedua tabel? Dulu, saya pun pernah memiliki pemikiran seperti itu. Pernah saya menemui suatu kasus dimana memang kedua tabel didesain memiliki relasi penuh. Tabel-1 adalah tabel utama, dan Primary Key ada pada tabel ini. Sedang tabel-2 hanya tabel pendukung dari tabel-1, dan Foreign Key dari tabel ini merujuk ke Primary Key tabel-1. Suatu ketika, karena suatu kesalahan, nilai kolom yang menjadi Primary Key dari tabel-1 tidak ditemukan di kolom tabel-2, sehingga karena hanya menggunakan Inner Join maka pada waktu ditampilkan baris tidak ditemukan. Kesalahan seperti ini memang tak terduga sebelumnya. Tapi jika kita lebih dulu meramalkan kesalahan tersebut dan mencegah terjadinya kesalahan, kita dapat memanfaatkan Left Join atau Right Join. Seperti kata pak Habibie ‘percaya memang baik, tapi cek ulang lebih baik’ (Maaf pak Habibie kalau tidak sama persis, saya lupa kata-kata lengkapnya, tapi maksudnya sama kok pak ^^)

Sumber :http://www.w3schools.com
Readmore »»