Beli Modem Wavecom Untuk SMS Gateway. FREE E-book Gammu + FREE Ongkos kirim !!
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

Cara Membuat Query SQL Untuk Relasi Tabel


September 11th, 2009 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

Ngabuburit gini emang enak buat ngeblog, itung-itung sambil beramal dengan sharing ilmu :-)

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

CREATE TABLE `ambilmk` (
  `nim` varchar(5),
  `kodemk` varchar(4),
  `nilai` float,
  `smt` varchar(10),
  `thajar` varchar(10),
  PRIMARY KEY (`nim`,`kodemk`)
);
CREATE TABLE `mhs` (
  `nim` varchar(5),
  `namamhs` varchar(20),
  `alamat` text,
  `tgllhr` date,
  PRIMARY KEY (`nim`)
);
CREATE TABLE `mk` (
  `kodemk` varchar(4),
  `namamk` varchar(20),
  `sks` int(11),
  `smt` varchar(10),
  PRIMARY KEY (`kodemk`)
);

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

Relasi Tabel

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:

SELECT mhs.nim, mhs.namamhs
FROM mhs, ambilmk
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

Hasil query SQL

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

SELECT mhs.nim, mhs.namamhs, ambilmk.nilai
FROM mhs, ambilmk, mk
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

Hasil query SQL

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.

<?php

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

$query = "SELECT mhs.nim, mhs.namamhs, ambilmk.nilai
          FROM mhs, ambilmk, mk
          WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk
                AND mk.namamk = 'KALKULUS I'";
$hasil = mysql_query($query);

echo "<table border='1'>";
echo "<tr><td>NIM</td><td>Nama Mhs</td><td>Nilai</td></tr>";
while ($data = mysql_fetch_array($hasil))
{
   echo "<tr><td>".$data['nim']."</td><td>".$data['namamhs']."</td><td>".$data['nilai']."</td></tr>";
}
echo "</table>";

?>

dan hasilnya…

Hasil query SQL dengan PHP

Dengan demikian, saya ulangi lagi bahwa dalam hal ini relasi tabel dilakukan di dalam query SQL nya dan tidak di PHP nya. Script PHP hanya menjalankan query, memfetching data hasil query dan kemudian menampilkannya di browser.

OK… mudah-mudahan artikel ini bermanfaat bagi Anda yang sedang belajar merelasikan tabel dengan query SQL sekaligus menjalankannya di PHP.

VN:F [1.9.3_1094]
Rating: 10.0/10 (3 votes cast)
Cara Membuat Query SQL Untuk Relasi Tabel , 10.0 out of 10 based on 3 ratings
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

Kata kunci: membuat relasi tabel - query relasi tabel - query relasi tabel sql - relasi tabel di php - script php relasi tabel -


Ada 27 komentar dalam artikel ini.

  1. rizal hanafi says:

    oke, oke saya berusaha untuk mengerti walau agak pusing, oke, oke

  2. heru says:

    napa ngak make left join aja pa’?

  3. rosihanari says:

    to heru: saya pusing kalo pake left join atau semacamnya. Kalo relasinya lebih dari 3 tabel jadi repot. Tapi.. kayaknya ini masalah keterbiasaan saja sih :-)

  4. heru says:

    setuju banget pak… :) mana yang enak dan nyaman aja,
    klo saya ngeladenin relasi 5 ato lebih table doyan mke left,inner,outer and kawan, jauh lebih berstruktur :D and kesanya gmana gthu, walaupun hasil akhirnya sama…

    tetap berkreasi pak

  5. Darman says:

    Sangat membantu…. TQ Yang pastinya saya akan Ambil kursus! Tp saya akan melatih diri untuk membuat kasus dan memahami tutorial.

  6. mas saya minta bentuk umum (syntax) perintah update, delete, tapi dalam bentuk sub query sekaligus contoh printahnya….

  7. rosihanari says:

    @fadhil edogawa: mmm… saya belum pernah mencoba update dan delete dalam subquery. Memang bisa mas? saya dulu sepertinya pernah mencoba tapi gagal.

  8. owh…gtu ya..tp menurut dosen saya sub query untuk update dan delete itu ada mas..saya di suruh cari syntax nya mas…duh gmana ya…
    .-= faDhil edogawa´s last blog ..TUGAS BASIS DATA BU FITRI =-.

  9. rosihanari says:

    @fadhil edogawa: maaf penjelasanya saya kurang lengkap. Sebenarnya bisa membuat update dan delete menggunakan subquery, namun sepertinya untuk MySQL belum bisa digunakan bila update dan delete dengan subquery itu diberikan pada tabel yang sama. Anda bisa membaca keterangannya pada kalimat:

    “Another restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, UPDATE, and (because subqueries can be used in the SET clause) LOAD DATA INFILE. ”

    Sumber: http://dev.mysql.com/doc/refman/5.1/en/subqueries.html

  10. adi says:

    wah , , ,
    terima kasih banyak pak , , ,
    saya save dulu halamanya , , ,
    barangkali nanti bingung saya coba tanyakan
    soalanya lagi mau buat menu otomatis dengan ngandalain table
    thanxs pak :D

  11. andre says:

    tolong bikinkan jawaban dari soal ini pak,,,tolong sekali saya bingung….kirim ke alamat email saya aja (ndreagain@yahoo.com),,makasih sebelumnya

  12. siswanto says:

    terima kasih, saya sedang belajar PHP, setiap hari saya buka blog ini. sekali lagi terima kasih. semoga ilmu yang Panjenengan bagi akan dicatat sebagai amal sholeh dan ditambah oleh Allah SWT. Amin

  13. rosihanari says:

    @siswanto: amin.. amin yaa robbal ‘alamin.. makasih pak siswanto atas doanya.. semoga pula niat Anda untuk belajar merupakan catatan pahala pula buat Anda.

  14. dee cheepy says:

    pak mw tanya,, sya lagi bikin skripsi ttg sistem pakar nah kebayakan sistem pakar tuh databasex hmpir sama dengan contoh bpk tinggal direlasikan jadi untuk memperoleh konklusinya bisa cepat dan gag mbulet,, yg mw saya tanyakan ada cara lain g selain relasi database?
    tlg sertain contohnya ya pak krn saya msh tahap belajar php,,,
    makasih,,,

  15. rosihanari says:

    @dee cheepy: selama datanya melibatkan multi tabel, yaa…. mau tidak mau tetap menggunakan relasi tabel mas. Kecuali hanya satu tabel yang digunakan.

  16. dee cheepy says:

    klo seandainya hanya melibatkan satu tabel itu hrs pke cara apa selain select,,,
    apa klo pake php hrs dilooping ya?
    mas pnh bahas sistem pakar pake php gag?
    maaf,, q cwe,, jgn dipanggil mas yach…
    makasih,,,

  17. rosihanari says:

    @dee cheepy: lho untuk membaca data di database yang berbasis SQL kan harus pake SELECT mas. eh .. salah.. mbak :-) saya belum pernah bahas sistem pakar dg PHP mbak, karena pembahasannya akan sangat panjang.

  18. ae says:

    Loh Kokk Bisa yaaaa: Gambar relasi tu bisa ditampilkan di sql yaaa atau
    Bagaimana

  19. rosihanari says:

    @ae: itu bikinnya pake MS. Word… trus dicapture :-)

  20. ae says:

    gitu to
    thanks tak pikir ada control key nya di langsung mysql

  21. Ardi says:

    bisa minta tutor php nya via email gak bang?

  22. Annaz says:

    Nice Info Pak…..Wah…rumit Juga Query Dngan Code Yang bgitu Banyak….TYipsnya Gmna Pak…Biar Cepet Ngerti Tu……

  23. agus rahadian says:

    Sudah lama baca tutorial diblog bapak, baru sekarang kasih komentar. Saya belajar web khususnya PHP secara otodidak. Satu persatu saya praktekkan setiap tutorial bapak, Alhmadulillah sekarang lumayan saya sudah buat database keuangan sekolah berbasis web yang sangat sederhana. Terima kasih pak. Semoga Allah memberikan rahmat dan hidayah-NYA kepada bapak, dimudahkan rejeki dan segala urusannya.

  24. rosihanari says:

    @agus rahadian: amin… trimakasih doanya mas.

  25. hany says:

    Klo relasi 4 tabel gmna yah pak?apa 4 tabel itu kita hanya btuh i primarykey gtu ya?tp kok error untk tble yg k’3 dn k’4..pusing jg..he

  26. hany says:

    kasusnya tb.pegawai,tb.golongan,tb.jabatan,td.gaji..
    thank’s before…:)

  27. Danastri says:

    Trimakasih info
    pembahasan querynya…Lengkap
    NAmbah nambah referensi tentang info BAsis Data MK ku nieh,,,,,,,,,,,
    soalnya ada tugas……..hehe



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word