Sampai dengan tutorial sebelum ini, kita hanya menampilkan hasil dari satu tabel saja.
Relasional Database adalah tentang kumpulan tabel yang saling berhubungan, dan dalam
Tutorial Belajar MySQL: Cara Menggabungkan Tabel MySQL dengan INNER JOIN ini kita akan mempelajari cara menyatukan hasil dari dua tabel atau lebih menggunakan query
SELECT..INNER JOIN.
Mempersiapkan Tabel Sample: mata_kuliah dan daftar_dosen
Sebagai tabel sample untuk tutorial ini, saya masih menggunakan tabel sample dari
Tutorial Belajar MySQL: Menampilkan Data dari Tabel MySQL (SELECT).
Jika anda ingin mencoba langsung query yang akan kita bahas, silahkan
mengikuti petunjuk pembuatan tabel sample. Tabel kita akan terdiri dari
tabel
mata_kuliah dan tabel
daftar_dosen.
Tabel daftar_dosen
| NIP | Nama Dosen | No HP | Alamat |
| 0160436012 | Sabrina Sari | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani | 0812656532 | Bogor |
| 0480432066 | Tia Santrini | 0812451177 | Padang |
| 0576431001 | M. Siddiq | 0812979005 | Jakarta |
| 0770435006 | Rubin Hadi | 0812567678 | Papua |
| 0869437003 | Mustalifah | 0812338877 | Aceh |
| 1080432007 | Arif Budiman | 0812456345 | Makasar |
Tabel mata_kuliah
| Kode Mata Kuliah | Nama Matakuliah | Jumlah SKS | Semester | Nip Dosen |
| MATDAS | Matematika Dasar | 4 | 1 | 0160436012 |
| FISDAS | Fisika Dasar | 2 | 1 | 0480432066 |
| TEKKOM | Teknik Kompilasi | 2 | 6 | 0480432066 |
| JARKOM | Jaringan Komputer | 3 | 3 | 0770435006 |
| DTBASE | Database | 4 | 4 | 0275430005 |
| SISOPR | Sistem Operasi | 2 | 4 | 0160436012 |
| MIKROP | Mikro Prosesor | 2 | 5 | 0480432066 |
Saya akan membahas sekilas kedua tabel diatas: tabel
daftar_dosen berisi data dari dosen, dimana kolom
NIP berisi NIP dari dosen. Pada tabel
mata_kuliah,
berisi daftar mata kuliah. Yang perlu diperhatikan adalah kolom NIP
dari kedua tabel. Kolom NIP inilah yang akan kita gunakan untuk
menggabungkan kedua tabel.
Cara Menggabungkan Tabel MySQL dengan INNER JOIN
Tujuan dari menggabungkan tabel adalah untuk menyajikan informasi secara lebih detail. Contohnya dari tabel
daftar_dosen dan tabel
mata_kuliah
diatas, tujuan kita adalah menyajikan informasi mata kuliah sekaligus
nama dosen yang mengajar mata kuliah tersebut. Kita ingin menyajikan
informasi yang berisi nama
mata kuliah, jumlah SKS, dan
nama dosen yang mengajar.
Query
INNER JOIN memiliki beberapa variasi, yaitu
SELECT..INNER JOIN..ON dan
SELECT..INNER JOIN..USING. Kita akan membahasnya satu persatu.
Cara Menggabungkan Tabel MySQL dengan query SELECT..INNER JOIN..ON
Format dasar dari penulisan query
SELECT..INNER JOIN..ON adalah:
SELECT nama_kolom_tampil FROM nama_tabel_pertama INNER JOIN nama_tabel_kedua
ON nama_kolom_join_tabel_pertama = nama_kolom_join_tabel_kedua
- nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
- nama_tabel_pertama adalah nama tabel pertama yang akan digabung.
- nama_tabel_kedua adalah nama tabel kedua yang akan digabung.
- nama_kolom_join_tabel_pertama adalah nama kolom yang akan digunakan sebagai join dari tabel pertama.
- nama_kolom_join_tabel_kedua adalah nama kolom yang akan digunakan sebagai join dari tabel kedua.
Syarat untuk
INNER JOIN adalah kedua tabel
harus memiliki sebuah kolom dengan nilai yang sama yang akan kita gunakan dalam proses
JOIN. Dalam contoh kita, kolom tersebut adalah
kolom NIP dari tabel
nama_dosen, dan kolom
NIP_dosen dari tabel
mata_kuliah. Perhatikan walaupun keduanya berisi NIP, namun nama kolomnya berbeda.
Query untuk
SELECT..INNER JOIN..ON tabel
mata_kuliah dengan
daftar_dosen adalah:
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen ON NIP_dosen=NIP;
+-------------------+------------+---------------+
| nama_matkul | jumlah_SKS | nama_dosen |
+-------------------+------------+---------------+
| Database | 4 | Susi Indriani |
| Fisika Dasar | 2 | Tia Santrini |
| Jaringan Komputer | 3 | Rubin Hadi |
| Matematika Dasar | 4 | Sabrina Sari |
| Mikro Prosesor | 2 | Tia Santrini |
| Sistem Operasi | 2 | Sabrina Sari |
| Teknik Kompilasi | 2 | Tia Santrini |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)
Dari hasil query
SELECT diatas, saya menggabungkan tabel
mata_kuliah dan
daftar_dosen untuk mendapatkan tampilan seluruh
mata kuliah, jumlah sks, dan
nama dosen yang mengajar. Kita menggunakan tabel
mata_kuliah sebagai
tabel pertama, dan tabel
daftar_dosen sebagai
tabel kedua.
Cara Menggabungkan Tabel MySQL dengan SELECT..INNER JOIN..USING
Cara
JOIN kedua adalah menggunakan
USING sebagai pengganti
ON untuk query
INNER JOIN.
Format dasar dari penulisan query
SELECT..INNER JOIN..USING adalah:
SELECT nama_kolom_tampil FROM nama_tabel_pertama INNER JOIN
nama_tabel_kedua USING (nama_kolom_join)
- nama_kolom_tampil adalah nama dari kolom yang akan kita tampilkan, bisa semua kolom dalam tabel, atau hanya kolom tertentu saja.
- nama_tabel_pertama adalah nama tabel pertama yang akan digabung.
- nama_tabel_kedua adalah nama tabel kedua yang akan digabung.
- nama_kolom_join adalah nama kolom yang akan digunakan sebagai join.
Syarat untuk
INNER JOIN..USING adalah
kedua tabel harus memiliki nama kolom yang sama. Dalam contoh kita, kolom tersebut adalah kolom NIP. Namun karena nama kolom NIP untuk tabel
mata_kuliah adalah
NIP_dosen, sedangkan pada kolom
daftar_dosen kolom NIP hanya
NIP saja, maka kita harus menyamakannya. Untuk hal ini saya memutuskan kedua kolom akan bernama
NIP_dosen.
mysql> ALTER TABLE daftar_dosen CHANGE NIP NIP_dosen CHAR(10);
Query OK, 8 rows affected (0.08 sec)
Records: 8 Duplicates: 0 Warnings: 0
Setelah kedua kolom NIP bernama sama, saatnya kita mengabungkan kedua tabel ini
mysql> SELECT nama_matkul, jumlah_SKS, nama_dosen
FROM mata_kuliah INNER JOIN daftar_dosen USING (NIP_dosen);
+-------------------+------------+---------------+
| nama_matkul | jumlah_SKS | nama_dosen |
+-------------------+------------+---------------+
| Database | 4 | Susi Indriani |
| Fisika Dasar | 2 | Tia Santrini |
| Jaringan Komputer | 3 | Rubin Hadi |
| Matematika Dasar | 4 | Sabrina Sari |
| Mikro Prosesor | 2 | Tia Santrini |
| Sistem Operasi | 2 | Sabrina Sari |
| Teknik Kompilasi | 2 | Tia Santrini |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)
Hasilnya sama persis dengan
SELECT..INNER JOIN..ON, hanya berbeda cara penulisan.
Di dalam
MySQL, kata
INNER JOIN dapat diganti dengan
CROSS JOIN, atau hanya
JOIN saja. Ketiga kata kunci ini memiliki fungsi yang sama. MySQL menyediakannya agar dapat kompatible dengan SQL dari
RDBMS lainnya seperti
ORACLE dan
MS SQL.
Misalnya untuk query kita diatas, dapat juga ditulis menjadi
mysql> SELECT nama_matkul, jumlah_SKS, nama_dosen
FROM mata_kuliah CROSS JOIN daftar_dosen USING (NIP_dosen);
Cara Penulisan Nama Kolom: Nama_Tabel.Nama_Kolom
Setelah kita merubah nama kolom NIP menjadi
NIP_dosen pada tabel
daftar_dosen, sekarang tiap tabel memiliki nama kolom yang sama, yakni
NIP_dosen. Jika kita menjalankan kembali query
SELECT..INNER JOIN..ON dengan nama kolom ini, MySQL akan mengeluarkan error:
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen ON NIP_dosen=NIP_dosen;
ERROR 1052 (23000): Column 'NIP_dosen' in on clause is ambiguous
Dari pesan error yang terjadi, sebenarnya MySQL ‘
bingung’ dalam memilih kolom. Query
ON NIP_dosen=NIP_dosen menjadi ambigu karena kedua tabel kita memiliki nama kolom yang sama.
Untuk mengatasi ambiguitas ini, MySQL mengharuskan kita secara
eksplisit menyebutkan nama tabelnya. Cara penulisan ini menggunakan tanda titik sebagai pemisah:
Nama_Tabel.Nama_Kolom
Misalkan untuk merujuk pada kolom
NIP_dosen pada tabel
mata_kuliah, maka penulisannya menjadi:
Mata_kuliah.NIP_dosen
Sehingga query
SELECT..INNER JOIN..ON yang benar menjadi:
mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah
INNER JOIN daftar_dosen ON mata_kuliah.NIP_dosen=daftar_dosen.NIP_dosen;
+-------------------+------------+---------------+
| nama_matkul | jumlah_SKS | nama_dosen |
+-------------------+------------+---------------+
| Database | 4 | Susi Indriani |
| Fisika Dasar | 2 | Tia Santrini |
| Jaringan Komputer | 3 | Rubin Hadi |
| Matematika Dasar | 4 | Sabrina Sari |
| Mikro Prosesor | 2 | Tia Santrini |
| Sistem Operasi | 2 | Sabrina Sari |
| Teknik Kompilasi | 2 | Tia Santrini |
+-------------------+------------+---------------+
7 rows in set (0.00 sec)
Query SELECT..INNER JOIN
ini akan sering kita gunakan untuk menampilkan data dari beberapa
tabel. Dalam mendesain database, sedapat mungkin kita mengeleminasi data
yang redundan (sama) dari satu tabel besar menjadi beberapa tabel
kecil, lalu menggabungkannya pada saat menampilkan data.
Dalam lanjutan tutorial belajar MySQL berikutnya, kita akan membahas tentang
cara menghapus data dari tabel MySQL dengan query DELETE.
this post real copy paste,
diperlukan hanya untuk catatan pribadi dalam hal pembelajaran pribadi saya.
Thanks to Sumber:
http://www.duniailkom.com/tutorial-belajar-menggabungkan-tabel-mysql-dengan-inner-join/