Join MySQL

1    Memahami Join

Salah satu fitur SQL yang paling berguna adalah kemampuan untuk menggabungkantabel dengan query-query yang mendapatkan kembali data. Join adalah salah satu dari beberapa operasi paling penting yang dapat Anda lakukan dengan menggunakan statemen SELECT. Dan sebagai bagian penting dalam mempelajari MySQL, Anda perlu memahami dengan baik join dan sintaks join.

2    Mengapa Menggunakan Join

Pemisahan data ke dalam banyak tabel memungkinkan proses pemyimpanan menjadi lebih efesien, manipulasi lebih mudah dan skalabilitas yang lebih besar. Tetapi manfaat tersebut ada tuntutan.

Jika data disimpan dalam banyak tabel, bagaimana Anda dapat mendapatkan kembali data dengan sebuah statemen SELECT tunggal ?

Jawabannya adalah dengan menggunakan join. Join adalah mekanisme yang digunakan untuk menghubungkan beberapa tabel dengan statemen SELECT (dan karena itu disebut join). Dengan menggunakan sintaks khusus, beberapa tabel dapat digabungkan sehingga dapat dihasilkan sekumpulan output tunggal, dan join menghubungkan record-record yang benar disetiap tabel.

3    Membuat Join

Membuat join sangat sederhana. Anda harus menentukan semua tabel yang akan dimasukkan dan bagaimana tabel itu dihubungkan satu dengan yang
lainnya. Lihat contoh berikut ini :

INPUT

SELECT Supplier.Nama, Barang.Nama, Barang.Harga

FROM Supplier, Barang

WHERE Supplier.KodeSup = Barang.KodeSup

OUTPUT

Nama              Nama                    Harga

————      ———-              —–

Bears R Us        8 inch teddy bear       5.99

Bears R Us        12 inch teddy bear      8.99

Bears R Us        18 inch teddy bear      11.99

Doll House Inc.   Fish bean bag toy       3.49

Doll House Inc.   Bird bean bag toy       3.49

Doll House Inc.   Rabbit bean bag toy     3.49

Doll House Inc.   Raggedy Ann             4.99

ANALYSIS

Statemen SELECT
memulai dengan cara yang sama seperti semua statemen yang Anda ketahui
sejauh ini, dengan menetapkan field yang didapatkan kembali. Perbedaan besar disini adalah dua dari field yang ditentukan (Barang.Nama dan Barang.Harga) ada pada satu tabel, sedangkan yang lainnya (Supplier.Nama) pada tabel lainnya.

Sekerang perhatikan klausa FROM. Tidak seperti semua statemen SELECT sebelumnya, statemen ini mempunyai dua tabel pada klausa FROM, yaitu Supplier dan Barang. Keduanya adalah nama dua tabel yang akan digabungkan dalam statemen SELECT. Tabel-tabel digabung dengan benar dengan klausa WHERE yang memerintahkan DBMS untuk mencocokkan KodeSup pada tabel Supplier dengan KodeSup pada tabel Barang.

Anda juga mencatat bahwa field tersebut ditetapkan sebagai Supplier.KodeSup dan Barang.KodeSup. Disini diperlukan nama field yang terkualifikasi sepenuhnya, karena jika Anda hanya menentukan KodeSup, DBMS tidak dapat memberi tahu field KodeSup mana yang akan Anda hubungi (Ada dua KodeSup, satu pada setiap tabel). Seperti dapat Anda lihat pada outputnya, statemen SELECT tunggal mengembalikan data dari dua tabel yang berbeda.

4    Pentingnya Klausa WHERE

Mungkin terlihat aneh jika menggunakan klausa WHERE untuk mengatur hubungan join, tetapi sebenarnya, ada sebuah alasa yang sangat bagus untuk ini. Ingat,  jika tabel-tabel digabungkan dalam statemen SELECT, maka  hubungan itu disusun on-the-fly. Tidak ada sesuatu dalam definisi tabel database yang dapat memerintahkan DBMS bagaimana menggabungkan tabel. Anda harus melakukannya sendiri.

Ketika Anda menggabungkan dua tabel, yang sebenarnya Anda lakukan adalah
memasangkan setiap record pada tabel pertama dengan setiap record pada tabel kedua. Klausa WHERE (seperti semua klausa WHERE) bertindak sebagai penyaring untuk hanya memasukkan record yang memenuhi kondisi penyaringan yang telah ditentukan – disini kondisi join.

Untuk  memahami  hal  tersebut, lihat  statemen  SELECT  dan  output berikut ini :

INPUT

SELECT Supplier.Nama, Barang.Nama, Barang.Harga

FROM Supplier, Barang

OUTPUT

Nama              Nama                    Harga

————      ———-              —–

Bears R Us        8 inch teddy bear       5.99

Bear Emporium     8 inch teddy bear       5.99

Doll House Inc.   8 inch teddy bear       5.99

Furball Inc.      8 inch teddy bear       5.99

Bears R Us        12 inch teddy bear      8.99

Bear Emporium     12 inch teddy bear      8.99

Doll House Inc.   12 inch teddy bear      8.99

Furball Inc.      12 inch teddy bear      8.99

Bears R Us        18 inch teddy bear      11.99

Bear Emporium     18 inch teddy bear      11.99

Doll House Inc.   18 inch teddy bear      11.99

Furball Inc.      18 inch teddy bear      11.99

Bears R Us        Fish bean bag toy       3.49

Bear Emporium     Fish bean bag toy       3.49

Doll House Inc.   Fish bean bag toy       3.49

Furball Inc.      Fish bean bag toy       3.49

Bears R Us        Bird bean bag toy       3.49

Bear Emporium     Bird bean bag toy       3.49

Doll House Inc.   Bird bean bag toy       3.49

Furball Inc.      Bird bean bag toy       3.49

Bears R Us        Rabbit bean bag toy     3.49

Bear Emporium     Rabbit bean bag toy     3.49

Doll House Inc.   Rabbit bean bag toy     3.49

Furball Inc.      Rabbit bean bag toy     3.49

Bears R Us        Raggedy Ann             4.99

Bear Emporium     Raggedy Ann             4.99

Doll House Inc.   Raggedy Ann             4.99

Furball Inc.      Raggedy Ann             4.99

ANALYSIS

Seperti Anda lihat pada output terdahulu, Cartesian Product jarang Anda inginkan. Data  yang  dikembalikan  disini  mencocokkan  setiap  barang  dengan

setiap supplier, termasuk barang-barang dengan supplier yang salah.

Catatan Penting

Jangan Lupakan Klausa WHERE. Pastikan semua join Anda mempunyai klausa WHERE, atau DBMS akan mengembalikan lebih banyak data daripada yang Anda inginkan. Pastikan juga klausa WHERE Anda benar. Kondisi penyaringan yang tidak benar akan menyebabkan DBMS mengembalikan data yang tidak benar.

5    Inner Join

Join yang Anda gunakan selama ini disebut EQUIJOIN – join berdasarkan pengujian persamaan tabel antara dua tabel. Jeni join ini juga disebut INNER JOIN. Pada dasarnya, beberapa DBMS menggunakan sintaks yang sedikit berbeda karena join tersebut menetapkan tipe join yang jelas berbeda. Statemen SELECT berikut ini mengembalikan data yang tepat sama seperti contoh terdahulu.

INPUT

SELECT Supplier.Nama, Barang.Nama, Barang.Harga

FROM Supplier INNER JOIN Barang

ON Supplier.KodeSup = Barang.KodeSup

ANALYSIS

SELECT pada statemen ini sama seperti statemen SELECT sebelumnya, tetapi klausa FROM berbeda. Hubungan antara dua tabel adalah bagian dari klausa FROM yang ditentukan sebagai INNER JOIN. Ketika menggunakan sintaks ini, kondisi join ditetapkan dengan menggunakan klausa ON khusus sebagai pengganti klausa WHERE. Kondisi sebenarnya yang dilewatkan pada ON sama seperti yang dilewatkan pada WHERE.

6    Menggabungkan Banyak Tabel

SQL tidak menentukan batasan untuk jumlah tabel yang mungkin digabungkan dalam statemen SELECT. Peraturan dasar untuk membuat join tetap sama. Pertama, daftarkan semua tabel dan kemudian tentaukan hubungan di antara setiap tabel. Contohnya sebagai berikut :

INPUT

SELECT Supplier.Nama, Barang.Nama, Barang.Harga, BarangJual.Jumlah

FROM BarangJual, Barang, Supplier

WHERE Barang.KodeSup = Supplier.KodeSup

AND BarangJual.KodeBrg = Barang.KodeBrg

AND NoFaktur = ‘20007’;

OUTPUT

Nama              Nama                    Harga       Jumlah

—-              —-                    —–       ——

Bears R Us        18 inch teddy bear      11.99       50

Doll House Inc.   Rabbit bean bag toy     3.49        100

Doll House Inc.   Bird bean bag toy       3.49        100

Doll House Inc.   Rabbit bean bag toy     3.49        100

Doll House Inc.   Raggedy Ann             4.99        50

ANALYSIS

Contoh tersebut menampilkan item pada pesanan NoFaktur 20007. Item pesanan disimpan pada tabel BarangJual. Setiap barang disimpan berdasarkan kode barang itu, yang merujuk kepada barang dalam tabel barang. Barang dihubungkan ke supplier yang tepat pada tabel supplier berdasarkan kode supplier, yang disimpan dengan setiap catatan barang. Klausa FROM disini mendaftar tiga tabel, dan klausa WHERE menetapkan kondisi join. Kondisi WHERE tambahan kemudian digunakan untuk menyaring hanya item-item untuk pesanan 20007.

Contoh kasus lain untuk INNER JOIN :

INPUT

SELECT Nama, Kontak

FROM Customer, Penjualan, BarangJual

WHERE Customer.KodeCus = Penjualan.KodeCus

AND BarangJual.NoFaktur = Penjualan.NoFaktur

AND KodeBrg = ‘RGAN01’

OUTPUT

Nama        Kontak

—-        ——

Fun4All     Denise L. Stephens

ANALYSIS

Ada tiga kondisi klausa WHERE disini dua kondisi pertama menghubungkan tabel dalam join, dan yang terakhir menyaring data untuk barang RGAN01.

7    Tipe-Tipe Join

Sejauh ini Anda hanya menggunakan join sederhana yang dikenal sebagai INNER JOIN EQUIJOIN. Sekarang perhatikan tiga tipe join tambahan : SELF-JOIN, NATURAL JOIN dan OUTER JOIN.

1   Membuat Self-Join

Salah satu alasan utama menggunakan alias tabel adalah untuk merujuk kepada tabel yang sama lebih dari satu kali pada statemen SELECT tunggal. Ada contoh untuk menunjukkan hal ini.

Misalkan Anda ingin mengirim sebuah surat ke semua kontak pelanggan yang bekerja untuk perusahaan yang sama dimana Jim Jones bekerja. Query ini mengharuskan Anda pertama-tama mencari perusahaan tempat Jim Jones bekerja, dan selanjutnya pelanggan mana yang bekerja untuk perusahaan tersebut. Berikut ini satu cara untuk menyelesaikan masalah tersebut :

INPUT

SELECT c1.KodeCus, c1.Nama, c1.Kontak

FROM Customer c1, Customer c2

WHERE c1.Nama = c2.Nama

AND c2.Kontak=’Jim Jones’

OUTPUT

KodeCus           Nama        Kontak

——-           —-        ——

1000000003        Fun4All     Jim Jones

1000000004        Fun4All     Denise L. Stephens

ANALYSIS

Dua tabel yang dibutuhkan pada query ini sebenarnya adalah tabel yang sama, dan karena itu tabel Customer muncul dua kali pada klausa FROM. Meskipun ini sah sama sekali, tetapi semua referensi ke tabel Customer akan ambigous karena DBMS tidak mengetahui tabel Customer yang Anda rujuk.

Untuk memecahkan masalah ini, digunakan alias-alias tabel. Kejadian pertama pada Customer punya alias c1, dan kejadian kedua mempunyai alias c2. Sekarang alias-alias itu dapat digunakan sebagai nama tabel. Statemen SELECT, misalnya, menggunakan prefiks c1 untuk menyatakan eksplisit nama lengkap dari field yang diinginkan. Jika ini tidak dilakukan, DBMS akan menghasilkan sebuah error karena ada dua field bernama KodeSup, Nama dan Kontak. DBMS tidak dapat mengetahui yang mana yang Anda inginkan (bahkan sekalipun field itu hanya satu dan sama). Klausa WHERE pertama-tama menghubungkan tabel, dan kemudian menyaring data dengan Kontak pada tabel kedua untuk mengembalikan hanya data yang diinginkan.

2   Natural Join

Kapanpun tabel digabungkan, sedikitnya ada satu field yang akan muncul pada lebih dari satu tabel (field yang digabungkan). Penggabungan standar (INNER JOIN yang Anda pelajari diatas) mengembalikan semua data, bahkan banyak kejadian pada field yang sama. NATURAL JOIN hanya mengurangi kejadian tersebut sehingga hanya satu pada setiap field yang dikembalikan.

Sebenarnya bukan NATURAL JOIN yang melakukan hal tersebut, melainkan Anda yang melakukan. NATURAL JOIN adalah join dimana dilakukan dengan menggunakan wildcard (SELECT *) untuk satu tabel dan sub-kumpulan eksplisit dari field untuk semua tabel lainnya. Berikut ini contohnya :

INPUT

SELECT C.*, P.NoFaktur, P.Tanggal, BJ.KodeBrg, BJ.Jumlah, BJ.Harga

FROM Customer C, Penjualan P, BarangJual BJ

WHERE C.KodeCus = P.KodeCus

AND BJ.NoFaktur = P.NoFaktur

AND KodeBrg = ‘RGAN01’

ANALYSIS

Pada Contoh tersebut, wildcard digunakan hanya untuk tabel yang pertama.
Seluruh field lainnya dengan jelas di daftar sehingga tidak ada field
duplikat yang di dapat kembali.

Sebenarnya, setiap INNER JOIN yang Anda buah sejauh ini adalah NATURAL JOIN, dan Anda tidak pernah membutuhkan INNER JOIN yang bukan NATURAL JOIN.

3   Outer Join

Kebanyakan join menghubungkan record-record dalam satu tabel dengan record-record tabel lainnya. Tetapi kadang-kadang Anda perlu memasukkan record yang tidak mempunyai record-record yang berhubungan. Sebagai contoh, Anda mungkin menggunakan join untuk menyelesaikan tugas berikut :

·         Menghitung berapa banyak pesanan yang dibuat oleh setiap pelanggan, termasuk pelanggan yang sudah melakukan pesanan.

·         Mendaftar semua barang dengan banyaknya pesanan, termasuk barang yang tidak dipesan oleh siapapun.

·         Menjumlah rata-rata ukuran penjualan, mencakup rekening pelanggan yang belum melakukan pesanan.

Pada setiap contoh tersebut, join memasukkan record-record tabel yang tidak
mempunyai record berkaitan dalam tabel terkait. Tipe join ini disebut OUTER JOIN.

Statemen SELECT berikut adalah INNER JOIN. Statemen ini mendapatkan kembali daftar semua pelanggan dan pesanan mereka :

INPUT

SELECT Customer.KodeCus, Penjualan.NoFaktur

FROM Customer INNER JOIN Penjualan

ON Customer.KodeCus = Penjualan.KodeCus

Untuk
mendapatkan kembali daftar semua pelanggan, termasuk pelanggan yang
tidak membuat pesanan, Anda dapat melakukan hal berikut :

INPUT

SELECT Customer.KodeCus, Penjualan.NoFaktur

FROM Customer LEFT OUTER JOIN Penjualan

ON Customer.KodeCus = Penjualan.KodeCus

OUTPUT

KodeCus     NoFaktur

——-     ——–

1000000001  20005

1000000001  20009

1000000002  NULL

1000000003  20006

1000000004  20007

1000000005  20008

ANALYSIS

Seperti INNER JOIN, statemen SELECT ini menggunakan keyword OUTER JOIN untuk menentukan tipe join. Tetapi tidak seperti INNER JOIN, yang menghubungkan record pada kedua tabel, OUTER JOIN juga memasukkan record dengan yang tidak berhubungan. Dan seperti terlihat pada contoh sebelumnya, ketika membuat OUTER JOIN, Anda harus menentukan tabel dari mana Anda memasukkan semua record. Jika Anda menggunakan sintaks OUTER JOIN, Anda harus menggunakan keyword RIGHT atau LEFT. Contoh diatas menggunakan LEFT OUTER JOIN untuk memilih semua record dari tabel pada bagian kiri klausa FROM (tabel Customer). Untuk memilih semua record dari tabel pada bagian kanan, Anda dapat menggunakan RIGHT OUTER JOIN seperti terlihat pada contoh berikut :

INPUT

SELECT Customer.KodeCus, Penjualan.NoFaktur

FROM Customer RIGHT OUTER JOIN Penjualan

ON Customer.KodeCus = Penjualan.KodeCus

OUTPUT

KodeCus     NoFaktur

——-     ——–

1000000001  20005

1000000003  20006

1000000004  20007

1000000005  20008

1000000001  20009

Tanpa memperhatikan bentuk OUTER JOIN yang digunakan, selalu ada dua bentuk dasar pada OUTER JOIN, yaitu LEFT OUTER JOIN dan RIGHT OUTER JOIN. Perbedaan di antara keduanya hanya urutan tabel yang akan dihubungkan. Dengan demikian, dua tipe OUTER JOIN dapat digunakan secara bergantian, dan keputusan tentang mana yang digunakan semata-mata tergantung pada kenyamanan.

One comment

  1. Pingback: Level – Level Integrasi | putumiatianasari

Tinggalkan Komentar

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s