Anda di halaman 1dari 4

Kali ini saya akan mencoba membahas bagaimana cara membuat query SQL yang

melibatkan tabel lebih dari satu (multi tabel) dimana saling berelasi satu sama yang
lain. Dalam hal ini, pembahasan hanya akan berfokus pada query berbentuk SELECT
saja.

Untuk lebih jelasnya, saya berikan sampel 3 buah tabel yang saling berelasi satu sama
lain beserta sampel datanya. Tabel ini merupakan studi kasus dari data perkuliahan
mahasiswa.

1
CREATE TABLE `ambilmk` (
2 `nim` varchar(5),
3 `kodemk` varchar(4),
4 `nilai` float,
5 `smt` varchar(10),
`thajar` varchar(10),
6
PRIMARY KEY (`nim`,`kodemk`)
7 );
8
1 CREATE TABLE `mhs` (
2 `nim` varchar(5),
3 `namamhs` varchar(20),
4 `alamat` text,
5 `tgllhr` date,
PRIMARY KEY (`nim`)
6 );
7
1 CREATE TABLE `mk` (
2 `kodemk` varchar(4),
3 `namamk` varchar(20),
4 `sks` int(11),
5 `smt` varchar(10),
PRIMARY KEY (`kodemk`)
6 );
7
dan… berikut ini adalah sampel datanya
INSERT INTO `ambilmk` VALUES ('M001', 'MK01', '3', 'GANJIL', '2001-2002');
INSERT INTO `ambilmk` VALUES ('M001', 'MK02', '2', 'GANJIL', '2001-2002');
INSERT INTO `ambilmk` VALUES ('M002', 'MK01', '4', 'GANJIL', '2001-2002');
INSERT INTO `ambilmk` VALUES ('M003', 'MK03', '4', 'GENAP', '2001-2002');
INSERT INTO `mhs` VALUES ('M001', 'XXX', 'SOLO', '1990-10-01');
INSERT INTO `mhs` VALUES ('M002', 'YYY', 'SEMARANG', '1992-08-11');
INSERT INTO `mhs` VALUES ('M003', 'ZZZ', 'SOLO', '1991-04-15');
INSERT INTO `mk` VALUES ('MK01', 'KALKULUS I', '3', 'GANJIL');
INSERT INTO `mk` VALUES ('MK02', 'GEOMETRI', '2', 'GANJIL');
INSERT INTO `mk` VALUES ('MK03', 'KALKULUS II', '3', 'GENAP');

Berdasarkan ketiga tabel tersebut, kita bisa melihat relasi antar ketiga tabel tersebut
sebagaimana tergambar pada gambar berikut ini
Nah… selanjutnya, misalkan kita ingin menampilkan data mahasiswa (nim, nama) dari
mahasiswa yang pernah mengambil matakuliah ‘MK01’. Bagaimana cara membuat
query SQL nya?

Sebelum kita mulai membuat query SQL nya, terlebih dahulu harus kita tentukan ‘Di
tabel manakah kita akan bekerja‘ dari ketiga tabel tersebut. OK… untuk menampilkan nim
dan nama, kita bisa menggunakan tabel ‘mhs’. Sedangkan untuk prasyarat dari query
yaitu ‘mahasiswa yang pernah mengambil matakuliah MK01 kita menggunakan tabel
‘ambilmk’. Dengan demikian query yang akan kita buat hanya melibatkan kedua tabel
tersebut, yaitu ‘mhs’ dan ‘ambilmk’.
Eh… masih ada lagi hal yang harus diperhatikan, yaitu relasi kedua tabel tersebut. Bila
Anda lihat gambar relasi di atas atau hubungan antar ketiga tabel, tabel ‘ambilmk’ dan
tabel ‘mhs’ direlasikan melalui field apa? Dari gambar, kita tahu bahwa kedua tabel
terhubung melalui field ‘nim’ yang ada di tabel ‘mhs’ dan field ‘nim’ yang ada di tabel
‘ambilmk’. Oleh karena itu di dalam query SQL terutama pada bagian klausa WHERE
perlu adanya perintah untuk menggambarkan hubungan tersebut.

Query SQL untuk menampilkan data mahasiswa (nim, nama) dari mahasiswa yang
pernah mengambil matakuliah ‘MK01’ adalah sbb:

1 SELECT mhs.nim, mhs.namamhs


2 FROM mhs, ambilmk
3 WHERE mhs.nim = ambilmk.nim AND ambilmk.kodemk = 'MK01';
Perhatikan perintah “mhs.nim = ambilmk.nim” pada query di atas. Perintah tersebut
digunakan untuk merelasikan tabel ‘mhs’ dengan ‘ambilmk’ dimana kedua tabel
terhubung oleh field ‘nim’ yang ada di masing-masing tabel.

Sehingga hasil dari query SQL di atas adalah

Selanjutnya misalkan kita ingin menampilkan data mahasiswa (nim, nama) beserta
nilainya dari mahasiswa yang pernah mengambil matakuliah bernama ‘KALKULUS I’.
Bagaimana query SQL nya?

OK… langkah pertama, kita tentukan dulu tabel mana saja yang kita pilih. Untuk
menampilkan nim dan nama, kita butuh tabel ‘mhs’. Nilai, kita butuh tabel ‘ambilmk’.
Sedangkan nama matakuliah ‘KALKULUS I’ yang digunakan sebagai syarat, kita
dapatkan dari tabel ‘mk’. Jadi untuk query ini, kita butuh ketiga tabel semuanya.

Setelah itu, kembali lagi kita lihat gambar relasi ketiga tabel di atas. Tabel ‘mhs’ dan
‘ambilmk’ dihubungkan dengan field ‘nim’ yang ada pada keduanya. Sedangkan tabel
‘mk’ dan ‘ambilmk’ terhubung oleh field ‘kodemk’ yang juga ada pada keduanya. Nah…
selanjutnya kita bisa membuat query SQL nya

1 SELECT mhs.nim, mhs.namamhs, ambilmk.nilai


2 FROM mhs, ambilmk, mk
3 WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk AND mk.namamk = 'KALKULUS I';

Perhatikan query SQL di atas, perintah “mhs.nim = ambilmk.nim AND mk.kodemk =


ambilmk.kodemk” menunjukkan relasi ketiga tabel. Gunakan operator AND bila relasi
tabelnya lebih dari 1 buah. Dan… kedua perintah relasi bisa dibolak-balik (“mk.kodemk
= ambilmk.kodemk AND mhs.nim = ambilmk.nim”) karena sifat operasi AND adalah
komutatif.

Hasil dari query tersebut adalah

Trus… mungkin ada yang bertanya lagi… bagaimana jika query relasi
tabelnya dijalankan di script PHP? Ya… caranya sama saja, Anda tinggal jalankan query
SQL untuk relasi tabel di dalam script PHP nya. Dalam hal ini relasi tabel tetap
ditentukan oleh query SQL nya.
Sebagai contoh, script PHP di bawah ini akan menampilkan hasil dari query terakhir di
atas.

1
2 <?php
3
4 mysql_connect("dbhost", "dbuser", "dbpass");
5 mysql_select_db("dbname");
6
7 $query = "SELECT mhs.nim, mhs.namamhs, ambilmk.nilai
FROM mhs, ambilmk, mk
8 WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk
9 AND mk.namamk = 'KALKULUS I'";
10 $hasil = mysql_query($query);
11
12 echo "<table border='1'>";
echo "<tr><td>NIM</td><td>Nama Mhs</td><td>Nilai</td></tr>";
13
while ($data = mysql_fetch_array($hasil))
14 {
15 echo "<tr><td>".$data['nim']."</td><td>".$data['namamhs']."</td><td>".$data['nilai'
16 }
17 echo "</table>";
18
?>
19
20
dan hasilnya…

Anda mungkin juga menyukai