Cara Membuat Query SQL Untuk Relasi Tabel September 11th, 2009 | by rosihanari
OK.. kali ini saya akan mencoba membahas bagaimana cara membuat query SQ yang melibatkan tabel lebih !ari satu "multi tabel# !imana saling berelasi satu sama yang lain. $alam hal ini, pembahasan hanya akan ber%okus pa!a query berbentuk S&&'( sa)a. *ntuk lebih )elasnya, saya berikan sampel + buah tabel yang saling berelasi satu sama lain beserta sampel !atanya. (abel (abel ini merupakan stu!i kasus !ari !ata perkuliahan mahasisa. CREATE TABLE `ambilmk` ( `nim` varchar(5), `kodemk` varchar(4), `nilai` float, `smt` varchar(!), `tha"ar` varchar(!), #R$%AR& 'E& (`nim`,`kodemk`) (`nim`,`kodem k`) ) CREATE TABLE `mhs` ( `nim` varchar(5), `namamhs` varchar(!), `alamat` te*t, `t+llhr` date, #R$%AR& 'E& (`nim`) ) CREATE TABLE `mk` ( `kodemk` varchar(4), `namamk` varchar(!), `sks` int(), `smt` varchar(!), #R$%AR& 'E& (`kodemk`) )
!an- berikut ini a!alah sampel !atanya $-ERT $-ERT $-ERT $-ERT $-ERT $-ERT $-ERT $-ERT $-ERT $-ERT
$T. $T. $T. $T. $T. $T. $T. $T. $T. $T.
`ambilmk` /AL0E- (1%!!1, 1%'!1, 121, 13A$L1, 1!!!!1) `ambilmk` /AL0E- (1%!!1, 1%'!1, 11, 13A$L1, 1!!!!1) `ambilmk` /AL0E- (1%!!1, 1%'!1, 141, 13A$L1, 1!!!!1) `ambilmk` /AL0E- (1%!!21, 1%'!21, 141, 13EA#1, 1!!!!1) `mhs` /AL0E- (1%!!1, 16661, 1-.L.1, 177!!!1) `mhs` /AL0E- (1%!!1, 1&&&1, 1-E%ARA31, 177!81) `mhs` /AL0E- (1%!!21, 19991, 1-.L.1, 177!451) `mk` /AL0E- (1%'!1, 1'AL'0L0- $1, 121, 13A$L1) `mk` /AL0E- (1%'!1, 13E.%ETR$1, 11, 13A$L1) `mk` /AL0E- (1%'!21, 1'AL'0L0- $$1, 121, 13EA#1)
er!asarkan ketiga tabel tersebut, kita bisa melihat relasi antar ketiga tabel tersebut sebagaimana tergambar pa!a gambar berikut ini
/ah- selan)utnya, misalkan kita ingin menampilkan !ata mahasisa "nim, nama# !ari mahasisa yang pernah mengambil matakuliah K01. agaimana cara membuat query SQ nya3 Sebelum kita mulai membuat query SQ nya, terlebih !ahulu harus kita tentukan Di tabel manakah kita akan bekerja !ari ketiga tabel tersebut. OK- untuk menampilkan nim !an nama, kita bisa menggunakan tabel mhs4. Se!angkan untuk prasyarat !ari query yaitu mahasisa yang pernah mengambil matakuliah K01 kita menggunakan tabel ambilmk4. $engan !emikian query yang akan kita buat hanya melibatkan ke!ua tabel tersebut, yaitu mhs4 !an ambilmk4. &h- masih a!a lagi hal yang harus !iperhatikan, yaitu relasi ke!ua tabel tersebut. ila 5n!a lihat gambar relasi !i atas atau hubungan antar ketiga tabel, tabel ambilmk4 !an tabel mhs4 !irelasikan melalui %iel! apa3 $ari gambar, kita tahu baha ke!ua tabel terhubung melalui %iel! nim4 yang a!a !i tabel mhs4 !an %iel! nim4 yang a!a !i tabel ambilmk4. Oleh karena itu !i !alam query SQ terutama pa!a bagian klausa 67&8& perlu a!anya perintah untuk menggambarkan hubungan tersebut. Query SQ untuk menampilkan !ata mahasisa "nim, nama# !ari mahasisa yang pernah mengambil matakuliah K01 a!alah sbb -ELECT mhs:nim, mhs:namamhs ;R.% mhs, ambilmk <=ERE mhs:nim > ambilmk:nim A? ambilmk:kodemk > 1%'!1
:erhatikan perintah ;mhs.nim < ambilmk.nim= pa!a query !i atas. :erintah tersebut !igunakan untuk merelasikan tabel mhs4 !engan ambilmk4 !imana ke!ua tabel terhubung oleh %iel! nim4 yang a!a !i masing>masing tabel. Sehingga hasil !ari query SQ !i atas a!alah
Selan)utnya misalkan kita ingin menampilkan !ata mahasisa "nim, nama# beserta nilainya !ari mahasisa yang pernah mengambil matakuliah bernama K5K**S ?4. agaimana query SQ nya3 OK- langkah pertama, kita tentukan !ulu tabel mana sa)a yang kita pilih. *ntuk menampilkan nim !an nama, kita butuh tabel mhs4. /ilai, kita butuh tabel ambilmk4. Se!angkan nama matakuliah K5K**S ?4 yang !igunakan sebagai syarat, kita !apatkan !ari tabel mk4. @a!i untuk query ini, kita butuh ketiga tabel semuanya. Setelah itu, kembali lagi kita lihat gambar relasi ketiga tabel !i atas. (abel mhs4 !an ambilmk4 !ihubungkan !engan %iel! nim4 yang a!a pa!a ke!uanya. Se!angkan tabel mk4 !an ambilmk4 terhubung oleh %iel! ko!emk4 yang )uga a!a pa!a ke!uanya. /ahselan)utnya kita bisa membuat query SQ nya -ELECT mhs:nim, mhs:namamhs, ambilmk:nilai ;R.% mhs, ambilmk, mk <=ERE mhs:nim > ambilmk:nim A? mk:kodemk > ambilmk:kodemk A? mk:namamk > 1'AL'0L0- $1
:erhatikan query SQ !i atas, perintah ;mhs.nim < ambilmk.nim 5/$ mk.ko!emk < ambilmk.ko!emk= menun)ukkan relasi ketiga tabel. Aunakan operator 5/$ bila rel asi tabelnya lebih !ari 1 buah. $an- ke!ua perintah relasi bisa !ibolak>balik ";mk.ko!emk < ambilmk.ko!emk 5/$ mhs.nim < ambilmk.nim=# karena si%at operasi 5/$ a!alah komutati%. 7asil !ari query tersebut a!alah
(rus- mungkin a!a yang bertanya lagi- bagaimana )ika query relasi tabelnya !i)alankan !i script :7:3 Ba- caranya sama sa)a, 5n!a tinggal )alankan query SQ untuk relasi tabel !i !alam script :7: nya. $alam hal ini relasi tabel tetap !itentukan oleh query SQ nya. Sebagai contoh, script :7: !i baah ini akan menampilkan hasil !ari query terakhir !i atas. @h msDlconnect(FdbhostF, FdbGserF, FdbassF) msDlselectdb(FdbnameF) HDGer > F-ELECT mhs:nim, mhs:namamhs, ambilmk:nilai ;R.% mhs, ambilmk, mk <=ERE mhs:nim > ambilmk:nim A? mk:kodemk > ambilmk:kodemk A? mk:namamk > 1'AL'0L0- $1F Hhasil > msDlDGer(HDGer) echo F@table border>11IF echo F@trI@tdI$%@JtdI@tdIama %hs@JtdI@tdIilai@JtdI@JtrIF Khile (Hdata > msDlfetcharra(Hhasil)) echo F@trI@tdIF:HdataM1nim1N:F@JtdI@tdIF:HdataM1namamhs1N:F@JtdI@tdIF: HdataM1nilai1N:F@JtdI@JtrIF
O echo F@JtableIF I
!an hasilnya-
$engan !emikian, saya ulangi lagi baha !alam hal ini relasi tabel !ilakukan !i !alam query SQ nya !an ti!ak !i :7: nya. Script :7: hanya men)alankan query, mem%etching !ata hasil query !an kemu!ian menampilkannya !i broser. OK- mu!ah>mu!ahan artikel ini berman%aat bagi 5n!a yang se!ang bela)ar merelasikan tabel !engan query SQ sekaligus men)alankannya !i :7:.