Perintah MySQL untuk Menampilkan Data dari Beberapa Tabel
Di dalam suatu RDBMS termasuk MySQL, tentunya sudah menjadi suatu kewajaran jika dalam satu database dapat terdiri dari beberapa tabel. Masing-masing tabel tersebut dapat berhubungan (berelasi) satu sama lain. Relasi antar-tabel dapat berupa relasi 1-1 (one-to-one), 1-M (one-to-many), atau M-N (many-to-many). Sebagai contoh terlihat pada gambar pemodelan data konseptual (class diagram) di bawah ini. Tabel pelanggan berhubungan dengan pesan, pesan dengan barang, dsb.
Pada pembuatan suatu aplikasi, terkadang kita juga memerlukan tampilan data yang tidak hanya berasal dari 1 (satu) tabel, namun bisa dari beberapa tabel sekaligus. Contohnya, dari class diagram di bawah, kita ingin menampilkan nama pelanggan berikut transaksi yang pernah dilakukannya. Dari contoh tersebut, kita harus bisa menggabungkan minimal dua tabel, yaitu pelanggan dan pesan.
Untuk menggabungkan 2 (dua) atau lebih tabel, kita dapat menggunakan bentuk perintah JOIN. Dalam tutorial ini, akan dijelaskan secara bertahap mengenai bagaimana menggabungkan dua tabel atau lebih, terutama untuk menampilkan data yang berasal dari beberapa tabel. Contoh-contoh dalam tutorial ini secara khusus telah dicoba di database MySQL, namun demikian secara umum perintah penggabungan tabel di semua jenis database tidak jauh berbeda alias sama.
Sebelum belajar mengenai perintah penggabungan tabel, perlu dipersiapkan tabel-tabel yang akan dijadikan sebagai bahan latihan dan contoh dalam tutorial ini. Kita akan menggunakan tabel rancangan sistem pemesanan barang (pembelian) sederhana berikut ini. Untuk membuatnya, Anda dapat menggunakan tools seperti PHPMyAdmin dan MySQLFront atau dapat juga melalui command-prompt. Jika diperlukan, pelajari kembali postingan saya sebelumnya mengenai administrasi database MySQL dengan PHPMyAdmin dan juga dasar-dasar perintah SQL. Jangan lupa isikan beberapa contoh data ke tabel-tabel yang sudah Anda buat.

Contoh Class Diagram Sistem Pembelian
1. Inner Join
Dengan inner join, tabel akan digabungkan dua arah, sehingga tidak ada data yang NULL di satu sisi. Sebagai contoh, kita akan menggabungkan tabel pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi). Misalkan isi tabel pelanggan dan pesan adalah sebagai berikut :
Tabel pelanggan (hanya ditampilkan field id_pelanggan, nm_pelanggan dan email)

Contoh isi tabel pelanggan
Tabel pesan.

Contoh isi tabel pesan
Cara #1. Inner Join dengan WHERE.
Penggabungan dengan klausa WHERE memiliki bentuk umum sebagai berikut:
SELECT tabel1.*, tabel2.* FROM tabel1, tabel2 WHERE tabel1.PK=tabel2.FK;
Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan:
SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan, pesan WHERE pelanggan.id_pelanggan=pesan.id_pelanggan;
Hasilnya sebagai berikut:

Hasil Penggabungan 2 Tabel dengan WHERE
Pada hasil perintah query di atas terlihat bahwa terdapat 5 (lima) transaksi yang dilakukan oleh 3 (tiga) orang pelanggan. Jika kita lihat kembali isi tabel pelanggan di atas, maka terdapat satu pelanggan yang tidak ditampilkan yaitu yang memiliki id pelanggan P0003. Pelanggan tersebut tidak ditampilkan karena belum pernah melakukan transaksi.
Cara #1. Inner Join dengan klausa INNER JOIN.
Berikut ini bentuk umumnya:
SELECT tabel1.*, tabel2.* FROM tabel1 INNER JOIN tabel2 ON tabel1.PK=tabel2.FK;
Dan berikut ini perintah SQL penggabungan tabel pelanggan dan pesan.
SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan INNER JOIN pesan ON pelanggan.id_pelanggan=pesan.id_pelanggan;
Hasilnya akan sama dengan gambar di atas (cara #1).
2. Outer Join
Dengan outer join, tabel akan digabungkan satu arah, sehingga memungkinkan ada data yang NULL (kosong) di satu sisi. Sebagai contoh, kita akan menggabungkan tabel pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi).
Outer Join terbagi menjadi 2 (dua) yaitu LEFT JOIN dan RIGHT JOIN. Berikut ini bentuk umum dan contohnya:
LEFT JOIN.
Bentuk umum:
SELECT tabel1.*, tabel2.* FROM tabel1 LEFT JOIN tabel2 ON tabel1.PK=tabel2.FK;
Contoh perintah SQL:
SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan LEFT JOIN pesan ON pelanggan.id_pelanggan=pesan.id_pelanggan;
Hasilnya:

Hasil Perintah Left Join
Berbeda dengan hasil sebelumnya (inner join), penggunaan left join akan menampilkan juga data pelanggan dengan id P0003, walaupun pelanggan tersebut belum pernah bertransaksi. Dan pada kolom id_pesan dan tgl_pesan untuk pelanggan P0003 isinya NULL, artinya di tabel kanan (pesan) pelanggan tersebut tidak ada.
RIGHT JOIN
Bentuk umum:
SELECT tabel1.*, tabel2.* FROM tabel1 RIGHT JOIN tabel2 ON tabel1.PK=tabel2.FK;
Contoh perintah SQL:
SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan RIGHT JOIN pesan ON pelanggan.id_pelanggan=pesan.id_pelanggan;
Hasilnya:

Hasil Perintah Right Join
Dengan right join, tabel yang menjadi acuan adalah tabel sebelah kanan (tabel pesan), jadi semua isi tabel pesan akan ditampilkan. Jika data pelanggan tidak ada di tabel pelanggan, maka isi tabel pesan tetap ditampilkan.
Menggabungkan 3 Tabel atau Lebih
Untuk menggabungkan tiga tabel atau lebih, pada dasarnya sama dengan penggabungan 2 (dua) tabel. Sebagai contoh misalnya kita akan menampilkan barang-barang yang dipesan beserta nama barang dan harganya untuk pemesanan dengan nomor 1, sedemikian sehingga hasilnya menjadi sebagai berikut:

Contoh Hasil Penggabungan 3 Tabel
Bagaimana perintah SQL-nya? Hayoo, siapa bisa? silahkan jawab di bagian komentar tutorial di bawah ini.
Popularity: 2% [?]








January 19th, 2010 at 16:05
halo pak mau tanya , itukan kondisi disaat masing2 memiliki primary key dan primary key menjadi Foreignkey di tabel yang lain…
nah pertanyaannya :
- bagaimana kalau masing2 tidak memiliki PK atau FK ? apakah masih bisa di Join ?
January 19th, 2010 at 19:29
#tanya
penggabungan 2 tabel bisa dilakukan jika masing2 tabel yang akan digabungkan memiliki field penghubung, baik itu PK-FK maupun field biasa. Jika tidak ada hubungannya, maka tidak dapat di-JOIN secara langsung, misalnya tabel produk dan pelanggan secara langsung tidak dapat di-JOIN.
January 23rd, 2010 at 16:51
makasih infonya ..sangat bermanfaat bg saya..nice blog
February 4th, 2010 at 10:34
Terima kasih Pak, semoga amal baik Bapak jadi amalan yang soleh n diterima Allah SWT.
semoga web Bapak dilihat oleh para pejabat kita dan dijadikan contoh untuk tidak mementingkan diri sendiri maupun golongan.
semoga Bapak dijadikan panutan beliau2 untuk memikirkan Bangsa dan Negeri Tercinta ini.
sekali lagi terima kasih banyak Bapak.
jasamu tak pernah terlupakan apabila saya mau mengerjakan TA
February 4th, 2010 at 20:55
#sujarwosmak
amin. terima kasih atas doanya.
February 25th, 2010 at 20:29
Mas, klo kita mau menampilkan hasil dari penggabungan tabel diatas dalam suatu tabel di web gimana ya?
March 5th, 2010 at 08:46
#FYan dibikin view aja mas.
April 20th, 2010 at 19:11
Mas yang lebih dari 3 tabel gimana ya?
Klo pake natural join bisa tp yang inner dsb gimana ya?
May 6th, 2010 at 14:14
SELECT a.nim_biodata, a.nama_biodata, a.kode_fakjur, b.nama_fakultas_fakjur, c.jenis_kelaminFROM (biodata_mahasiswa a LEFT JOIN status_fakjur b ON a.kode_fakjur = b.kode_fakjur)LEFT JOIN status_jenis_kelamin c ON a.id_jenis_kelamin = c.id_jenis_kelamin;
May 10th, 2010 at 12:49
kalo lima menampilakn 5 tabel bagaiman?? saya buat tabel BUKU (KodeBuku, Judul, KodeBahasa,KodePengarang,KodePenerbit,KodeKategori)
di tabel BAHASA(KodeBahasa,Bahasa)
di tabel PENGARANG (KodePengarang,Pengarang)
di tabel PENERBIT (KodePenerbit,Penerbit)
di tabel KATEGORI (KodeKategori,Kategori)
Saya ingin menampilkan:
(KodeBuku,Judul,Bahasa,Pengarang,Penerbit,Kategori)
Bagaimana perintah SELECT nya? Tolong saya yah mas kalo tau kirim ke email saya salsa_bil89@yahoo.co.id
May 19th, 2010 at 19:49
Artikel yang bagus mas, terima kasih setelah baca2 akhirnya tambah lagi ni ilmu tentang MySQL
May 21st, 2010 at 19:04
mas mhn maaf mw nanya neh..klo koneksi database oracle dipanggil ke PHP ada gak mas??mohon informasi cth script dan contoh implementasinya mas..trima kasih
matur nuhun..artikel minta tolong untuk dikirimkan ke email sy aj mas..stephano2501@yahoo.co.id
skali lagi trima kasih mas..
June 8th, 2010 at 15:48
klo nggabungkan dua tabel dalam database yang berbeda scriptnya gimana mas maklum baru belajar mas
June 22nd, 2010 at 00:52
penggabungan 3 table menggunakan INNER JOIN :
SELECT mahasiswa.nim, mata_kul.kode_mk, absensi.absen
FROM (mahasiswa INNER JOIN absensi on mahasiswa.nim=absensi.nim)
INNER JOIN mata_kul on absensi.kode_mk=mata_kul.kode_mk;
kurang lbh nya mohon maaf, masih sama” belajar =)
July 3rd, 2010 at 14:08
mau tanya nih mas… bagai mana menampilkan data yang tidak sama dengan data pada tabel lain… contoh: Tabel KRS memiliki fields: kdMK, nmMK, SKS Tabel Matakuliah memiliki Fields: kdMK,nmMK,SKS,dosen, Nah Isi dari Tabel KRS secara terurut ya… 001 Aljabar 2 002 Pancasila 3 Isi dari Tabel Matakuliah
oo1 Aljabar 2 002 Pancasila 3 003 fisika 3 sedangkan yang saya maksudkan adalah bagai mana menampilkan Data dari Tabel MataKuliah yang hanya data yang TIDAK ADA PADA TABEL KRS… Bisa gak ya…???? Tolong segera dong MASSSSSS…..terima kasih
July 4th, 2010 at 08:08
#arif. bisa-bisa aja, coba query sbb:
SELECT a.* FROM matakuliah a LEFT JOIN krs b ON a.kdMK=b.kdMK WHERE b.kdMK IS NULL
August 21st, 2010 at 14:30
Infonya bangus bang, Thanks… ^_^