Relasi Table pada Mysql
Menggunakan Keluarga Join
Mohamad albar
mint.argument25@[Link]
[Link]
Lisensi Dokumen:
Copyright © 2003-2007 [Link]
Seluruh dokumen di [Link] dapat digunakan, dimodifikasi dan disebarkan
secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau
merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen.
Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu
dari [Link].
Relasi table pada database sangat diperlukan untuk menyederhanakan data-data kita,dan supaya
mudah untuk [Link] beberapa cara yang digunakan untuk merelasikan [Link] pelajaran
kali ini saya akan mengajarkan cara relasi database dengan menggunakan keluarga [Link]
table dengan Join ada 6 macam.
CROSS JOIN
STRAIGHT JOIN
INNER JOIN
RIGHT JOIN
LEFT JOIN
NATURAL JOIN
Sebelum memulai pelajaran kali ini saya asumsikan di computer anda sudah terinstal mysql
server,dan [Link] anda belum punya silahkan download disini untuk phpmyadmin
[Link] dan untuk mysql download disini
[Link] atau agar lebih mudah download aja yang sudah
dipaket,anda bias gunakan wamp download disini [Link] .
Untuk mempermudah pelajaran kali ini saya sudah menyiapakan database yang sudah saya
export dengan nama [Link] di import melalui [Link] juga saya sudah
siapkan versi dump nya.
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 1
Note:Cocokan versi mysql dump anda dengan dump yang saya gunakan kalau tidak database
tidak bias di import.
Note:Query Mysql bersifat case-insensitif sehingga perbedaan huruf kecil dan besar tidak
[Link] untuk nama table,nama database,record,nama_field tidak berlaku.
Contoh:
Anda membuat table namanya nilai dengan huruf kecil [Link] menampilkan isi dari table
gunakan query berikut
select * from nilai //work
select * from Nilai //don’t work
select * from NILAI //don’t work
SeLeCt * FroM nilai //work
Ok sekarang masuk dulu ke mysql server anda kalau pakai console ketik mysql –u root –p
[enter] masukkan password.
Setelah itu masuk ke database produk
mysql> use produk
Lalu untuk melihat table yang sudah dibuat ketik perintah berikut
mysql> show tables;
+------------------+
| Tables_in_produk |
+------------------+
| jenis |
| produk |
+------------------+
2 rows in set (0.00 sec)
Disitu terdapat dua table yang ingin kita relasikan yaitu table jenis dan [Link] meliat
deskripsi dari kedua table tersebut gunakan query berikut
mysql> desc produk;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id_produk | int(11) | NO | PRI | NULL | auto_increment |
| nm_produk | varchar(40) | YES | | NULL | |
| no_jenis | int(3) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 2
3 rows in set (0.01 sec)
mysql> desc jenis
-> ;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| no_jenis | int(11) | NO | PRI | NULL | auto_increment |
| nm_jenis | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
Ok sekarang kita perhatikan pada table jenis dan produk terdapat field yang sama yaitu
no_jenis.yang akan kita gunakan untuk merelasikan kedua table berikut.
Pada table produk primary key nya adalah id_produk sedangkan pada table jenis primary key
nya adalah no_jenis.Nah,pada table jenis no_jenis adalah kunci primer(primary key),sedangkan
pada table produk no_jenis adalah kunci tamu(foreign key).
Sekarang kita lihat isi dari masing-masing table berikut
mysql> select * from jenis;
+----------+------------+
| no_jenis | nm_jenis |
+----------+------------+
| 1 | Furniture |
| 2 | Elektronik |
| 3 | FOOD |
+----------+------------+
3 rows in set (0.00 sec)
mysql> select * from produk;
+-----------+-----------+----------+
| id_produk | nm_produk | no_jenis |
+-----------+-----------+----------+
| 1 | Lemari | 1 |
| 2 | Kulkas | 2 |
| 3 | Meja | 1 |
| 4 | Bangku | 1 |
| 5 | Televisi | 2 |
| 6 | Komputer | 2 |
+-----------+-----------+----------+
6 rows in set (0.00 sec)
Nah pada field/kolom no_jenis pada table jenis dan produk ,kita bermaksud menghubungkan
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 3
no_jenis di table jenis dan no_jenis di table produk,agar angka-angka di field no_jenis pada
table produk diganti dengan huruf pada field nm_jenis di table [Link] bias melakukan hal
tersebut dengan merelasi kan kedua table tersebut.
Query Relasi : select nama_table1.nama_kolom1,nama_table2.nama_kolom2
…. nama_table(n).nama_kolom(n) from nama_table1,nama_table2..nama_table(n)
[Link] Manual
Baik,cara manual untuk merelasikan kudua table yaitu dengan query seperti berikut
mysql> select produk.id_produk,produk.nm_produk,jenis.nm_jenis from
produk,jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 1 | Lemari | Elektronik |
| 1 | Lemari | FOOD |
| 2 | Kulkas | Furniture |
| 2 | Kulkas | Elektronik |
| 2 | Kulkas | FOOD |
| 3 | Meja | Furniture |
| 3 | Meja | Elektronik |
| 3 | Meja | FOOD |
| 4 | Bangku | Furniture |
| 4 | Bangku | Elektronik |
| 4 | Bangku | FOOD |
| 5 | Televisi | Furniture |
| 5 | Televisi | Elektronik |
| 5 | Televisi | FOOD |
| 6 | Komputer | Furniture |
| 6 | Komputer | Elektronik |
| 6 | Komputer | FOOD |
+-----------+-----------+------------+
18 rows in set (0.00 sec)
Kalau kita lihat output diatas rada aneh ya karena tidak sesuai yang kita [Link]
banyak redudansi data pada output diatas nah,untuk mengatasi hal tersebut kita bias gunakan
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 4
klausa where sehingga query nya jadi seperti berikut
mysql> select produk.id_produk,produk.nm_produk,jenis.nm_jenis from
produk,jenis where produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
Sekarang table sudah muncul sesuai yang [Link] dikarenakan yang kita relasikan hanya
no_jenis di table produk dan no_jenis di table jenis.
Ok sekarang sesudah kita paham dengan konsep relasi,kita akan bedakan relasi cara Manual di
atas dengan menggunakan Keluarga JOIN
[Link] TABLE
[Link] JOIN
Pada dasarnya cross join tidak ada bedanya dengan Cara manual di atas yang
membedakan adalah tanda Koma(,) sesudah kata [Link] nya seperti berikut.
mysql> select produk.id_produk,produk.nm_produk,jenis.nm_jenis from
produk cross join jenis where produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
Bisa kita lihat tanda koma pada cara manual,di cara Cross join diganti dengan klausa Cross join
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 5
Oh ia satu lagi tambahan Klausa Cross Join ini selain bias menggunakan klausa where juga bisa
menggunakan kalusa On.
mysql> select produk.id_produk,produk.nm_produk,jenis.nm_jenis from
produk cross join jenis on produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
[Link] JOIN
Straight Join juga pada dasarnya sama seperti cross join perbedaan yang jelas disini
adalah Straight Join tidak bisa menggunakan Klausa Kondisi seperti Where atau On
mysql> select id_produk,nm_produk,nm_jenis from produk straight join
jenis where produk.no_jenis=jenis.no_jenis;
ERROR 1054 (42S22): Unknown column 'produk.no_jenis' in 'where clause'
mysql> select id_produk,nm_produk,nm_jenis from produk straight join
jenis on produk.no_jenis=jenis.no_jenis;
ERROR 1054 (42S22): Unknown column 'produk.no_jenis' in 'on clause'
Bisa kita lihat,jika menggunakan clausa where atau on akan menampilkan pesan error
mysql> select id_produk,nm_produk,nm_jenis from produk straight join
jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 1 | Lemari | Elektronik |
| 1 | Lemari | FOOD |
| 2 | Kulkas | Furniture |
| 2 | Kulkas | Elektronik |
| 2 | Kulkas | FOOD |
| 3 | Meja | Furniture |
| 3 | Meja | Elektronik |
| 3 | Meja | FOOD |
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 6
| 4 | Bangku | Furniture |
| 4 | Bangku | Elektronik |
| 4 | Bangku | FOOD |
| 5 | Televisi | Furniture |
| 5 | Televisi | Elektronik |
| 5 | Televisi | FOOD |
| 6 | Komputer | Furniture |
| 6 | Komputer | Elektronik |
| 6 | Komputer | FOOD |
+-----------+-----------+------------+
18 rows in set (0.00 sec)
Jadi Kesimpulannya jangan gunakan Straight join supaya tidak ada penumpukkan/redudansi
data
[Link] JOIN
Inner Join konseprnya sama seperti Cross Join Tidak ada perbedaan apapun
mysql> select id_produk,nm_produk,nm_jenis from produk inner join jenis
on produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
mysql> select id_produk,nm_produk,nm_jenis from produk inner join jenis
where produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 7
[Link] JOIN
Left Join digunakan untuk menampilkan semua record pada table di sebelah kiri .
mysql> select id_produk,nm_produk,nm_jenis from produk left join jenis
on produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
Kita Lihat, Pada contoh diatas left join akan menampilkan semua record pada table di sebelah
kiri yaitu table produk sedangkan table jenis berada disebelah kanan sehingga table jenis akan
menyesuaikan .
[Link] JOIN
Kebalikan dari left join ,right join digunakan untuk menampilkan semua record pada
table di sebelah kanan.
mysql> select id_produk,nm_produk,nm_jenis from produk right join jenis
on produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 2 | Kulkas | Elektronik |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
| NULL | NULL | FOOD |
+-----------+-----------+------------+
7 rows in set (0.00 sec)
Dapat kita lihat Table jenis akan ditampilkan semua sehingga untuk field/kolom nm_jenis
FOOD karena tidak ada pasangan di table produk maka table produk akan otomatis mengisinya
dengan NULL.
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 8
Warning!!
Right Join dan Left Join tidak bias menggunakan klausa where sehingga apabila kita
gunakan klausa where maka akan muncul pesan error
[Link] JOIN
Natural Join ini mungkin merupakan jawaban bagi query-query yang panjang seperti
[Link] tanpa menggunakan kalusa where,natural join akan secara otomatis merelasikan
table tersebut dengan sangat tepat.
mysql> select id_produk,nm_produk,nm_jenis from produk natural join
jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
Jika menggunakan where
mysql> select id_produk,nm_produk,nm_jenis from produk natural join
jenis where produk.no_jenis=jenis.no_jenis;
+-----------+-----------+------------+
| id_produk | nm_produk | nm_jenis |
+-----------+-----------+------------+
| 1 | Lemari | Furniture |
| 2 | Kulkas | Elektronik |
| 3 | Meja | Furniture |
| 4 | Bangku | Furniture |
| 5 | Televisi | Elektronik |
| 6 | Komputer | Elektronik |
+-----------+-----------+------------+
6 rows in set (0.00 sec)
Note:Natural join tidak bias menggunakan klausa on ,sehingga jika kita meggunakan klausa
tersebut akan muncul pesan error.
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 9
BIOGRAFI PENULIS
Mohamad Albar,Lahir di Jakarta,25 Mei [Link] SMU
di SMU Negeri 113 jakarta,dan sekarang sedang menjalankan study
S1 di Universitas Gunadarma.
Informasi Lebih Lanjut tantang penulis dapat melalui.
URL : [Link]
BLOG : [Link]
EMAIL : mint.argument25@[Link]
Komunitas eLearning [Link]
Copyright © 2003-2007 [Link] 10