ARSIP BULANAN : January 2013

Syntax SQL (Relasi pada tabel database)

02 January 2013 13:08:03 Dibaca : 1028

Relasi table pada database sangat diperlukan untuk menyederhanakan data-data kita, dan supaya mudah untuk diatur. Ada beberapa cara yang digunakan untuk merelasikan table.

A. Cara Manual

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)

Karena tidak sesuai yang kita harapkan.terdapat banyak redudansi data pada output diatas nah,untuk mengatasi hal tersebut kita bias gunakan klausa wheresehingga 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 tabel sudah muncul sesuai yang diharapkan. Ini dikarenakan yang kita relasikan hanya no_jenis di table produk dan no_jenis di table jenis.

B. Join Table

1. CROSS JOIN

Pada dasarnya cross join tidak ada bedanya dengan Cara manual di atas yang membedakan adalah tanda Koma(,) sesudah kata from.query 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. 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)

2. STRAIGHT JOIN

Straight Join juga pada dasarnya sama seperti cross join perbedaan yang jelas disini adalah Straight Join tidak bisamenggunakan 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'

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 |

| 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.

3. INNER 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)

4. LEFT 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)

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.

5. RIGHT 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 dilihat 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. Right Join dan Left Join tidak bisa menggunakan klausa where.

6. NATURAL JOIN

Natural Join ini mungkin merupakan jawaban bagi query-query yang panjang seperti diatas. Karena 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)

Natural join tidak bisa menggunakan klausa on.

Sumber:

Komunitas eLearning IlmuKomputer.Com