Free Ebook Tutorial from Rosihan Ari's Blog

Tutorial Javascript | Tutorial PHP | Tutorial AJAX | Tutorial CSS | Tutorial FPDF | Tutorial Wordpress | Tutorial Java SE


Ebook yang direkomendasikan untuk Anda
Kunjungi Toko Ebook RosihanAri.Net


Perintah SQL (SELECT) untuk Multi Tabel (Bag. 1)


June 30th, 2008 | by rosihanari | Cetak Artikel Cetak Artikel


GampSMS SMS Gateway

Pada artikel ini akan diberikan beberapa contoh perintah SQL yang diimplementasikan pada multi tabel. Adapun perintah SQL untuk manipulasi data pada satu tabel, saya yakin hal ini cukup mudah bagi Anda. Dalam contoh ini akan diambil studi kasus tentang pengambilan matakuliah mahasiswa.

Tabel-tabel yang dibuat pada studi kasus ini cukup sederhana saja untuk memudahkan pemahaman. Adapun tabel-tabel tersebut adalah:

mhs (
nim varchar(3),
namaMhs varchar(30),
primary key(nim)
)
mk (
kodeMK varchar(3),
namaMK varchar(30),
sks integer,
primary key(kodeMK)
)
ambilMK (
nim varchar(3),
kodeMK varchar(3),
nilai integer,
primary key(nim, kodeMK)
)

Dalam hal ini, field nim dan kodeMK pada tabel ambilMK merupakan foreign key. Apabila diperhatikan, tabel mhs dengan tabel ambilMK saling berelasi karena nim dalam tabel ambilMK berasal dari nim dalam tabel mhs (master tabel).

Demikian pula antara tabel mk dengan ambilMK. Kedua tabel ini juga berelasi karena kodeMK dalam tabel ambilMK berasal dari kodeMK dalam tabel mk.

Untuk record masing-masing tabel, misalkan diberikan berikut ini:

Tabel : mhs

nim    namaMhs
001    Joko
002    Amir
003    Budi

Tabel : mk

kodeMK    namaMK        sks
A01       Kalkulus      3
A02       Geometri      2
A03       Aljabar       3

Tabel : ambilMK

nim    kodeMK    nilai
001    A01         3
001    A02         4
001    A03         2
002    A02         3
002    A03         2
003    A01         4
003    A03         3

Selanjutnya misalkan akan dicari data-data sbb:

  1. Tampilkan nim dan nama mahasiswa yang mengambil Kalkulus (kodeMK = A01)
  2. Tampilkan nim, nama mahasiswa dan jumlah SKS matakuliah yang diambil untuk setiap mahasiswa
  3. Berapakah IPK mahasiswa bernama Budi (NIM: 003)
  4. Tampilkan nim, nama mahasiswa, dan IPK setiap mahasiswa

Untuk menjawab no. 1, kita harus cari dulu tabel mana yang terkait dengan query tersebut. Apabila kita akan mencari query tersebut berdasarkan nama matakuliah ‘Kalkulus’ maka tabel yang terkait adalah mhs (untuk menampilkan nim dan nama mahasiswa), mk (karena dalam tabel ini terdapat nama matakuliah), serta tabel ambilMK (karena tabel ini berisi data pengambilan matakuliah oleh mahasiswa).

Setelah menentukan tabel mana yang terkait dengan query, selanjutnya dapat dibuat statement SQL nya, yaitu

SELECT mhs.nim, mhs.namaMhs
FROM mhs, mk, ambilMK
WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
AND mk.namaMK = 'Kalkulus';

Maksud mhs.nim, maksudnya adalah menampilkan data nim yang berasal dari tabel mhs. Dapat pula Anda menuliskan SQL nya seperti ini

SELECT ambilMK.nim, mhs.namaMhs
FROM mhs, mk, ambilMK
WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
AND mk.namaMK = 'Kalkulus';

Hal ini dikarenakan untuk menampilkan nim dapat pula berasal dari tabel ambilMK.

Perhatikan bagian FROM dari kedua statement SQL di atas. Nama-nama tabel yang terkait dengan query dituliskan pada bagian FROM ini.

Selanjutnya apa maksud dari perintah mhs.nim = ambilMK.nim? Perintah ini digunakan untuk merelasikan tabel mhs dan ambilMK, dimana kedua tabel direlasikan melalui field nim di kedua tabel. Hal yang sama juga berlaku untuk perintah mk.kodeMK = ambilMK.kodeMK.

Sedangkan perintah mk.namaMK = ‘Kalkulus’ digunakan sebagai syarat pencarian data (menampilkan data mahasiswa yang mengambil matakuliah Kalkulus).

Apabila pencarian data mahasiswa yang mengambil Kalkulus ini berdasarkan kode matakuliah (A01), maka Anda tidak perlu menggunakan tabel mk, tapi cukup tabel mhs dan ambilMK saja. Hal ini dikarenakan kodeMK dapat diketahui dari tabel ambilMK. Sehingga perintah SQL nya

SELECT mhs.nim, mhs.namaMhs
FROM mhs, ambilMK
WHERE mhs.nim = ambilMK.nim AND ambilMK.kodeMK = 'A01';

Ketiga statement SQL di atas akan menghasilkan hasil yang sama yaitu

NIM    namaMhs
001    Joko
003    Budi

Selanjutnya akan dijawab pertanyaan no. 2. Seperti halnya langkah penyelesaian pertanyaan no. 1, langkah pertama harus kita tentukan dulu tabel apa saja yang terkait dengan query. Dalam hal ini kita akan menggunakan tabel mhs, mk dan ambilMK. Tabel mhs untuk menampilkan nim dan nama mahasiswa. Tabel mk digunakan karena di dalamnya terdapat data SKS. Sedangkan tabel ambilMK digunakan karena berisi data yang menunjukkan pengambilan matakuliah mahasiswa.

Perintah SQL untuk pertanyaan no. 2 adalah

SELECT mhs.nim, mhs.namaMhs, sum(mk.sks) as jumlahSKS
FROM mhs, mk, ambilMK
WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
GROUP BY ambilMK.nim

atau

SELECT mhs.nim, mhs.namaMhs, sum(mk.sks) as jumlahSKS
FROM mhs, mk, ambilMK
WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
GROUP BY mhs.nim

Untuk mencari jumlah SKS setiap mahasiswa, kita menggunakan perintah sum(mk.sks). Supaya perintah ini bisa jalan, maka harus ditambahkan perintah GROUP BY mhs.nim atau GROUP BY ambilMK.nim. Hal ini dikarenakan proses penjumlahan sks harus dilakukan pada setiap kelompok data. Maksudnya apa ya?
Perhatikan perintah SQL berikut ini

SELECT mhs.nim, mhs.namaMhs, mk.sks
FROM mhs, mk, ambilMK
WHERE mhs.nim = ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK

Perintah di atas akan menampilkan nim, nama mahasiswa serta sks setiap mata kuliah yang diambil. Hasilnya adalah

NIM    namaMhs        SKS
001    Joko               3
001    Joko               2
001    Joko               3
002    Amir               2
002    Amir               3
003    Budi               3
003    Budi               3

Untuk pertanyaan no. 2 ini, seharusnya akan tampil hasil berikut

NIM    namaMhs        jumlahSKS
001    Joko              8
002    Amir              5
003    Budi              6

Sehingga supaya mendapatkan hasil seperti di atas, kita akan menjumlahkan setiap SKS yang diambil mahasiswa, berdasarkan kelompok mahasiswa, dalam hal ini dikelompokkan berdasarkan NIM. Mengapa tidak dikelompokkan berdasarkan nama mahasiswa? Wah bisa gawat kalau ini terjadi, karena ada kemungkinan  nama mahasiswa yang sama. Oleh karena itu harus ada perintah GROUP BY mhs.nim

Untuk pembahasan nomor yang lain akan dilanjutkan pada tutorial yang lain.




Share ke Facebook Share ke Twitter
Baca Juga Artikel Terkait
Mencari Duplikasi Data dengan SQL

Kata kunci:


Ada 28 komentar dalam artikel ini.



  1. Ivan says:

    asp.net nya dong pak?

  2. Dicky Nh says:

    Alhamdulillah ada pencerahan, mas klo contoh script phpnya bagaimana ya ?

  3. Dicky Nh says:

    Almadulillah ada pencerahan, mas saya masih belajar, klo script phpnya seperti apa ya ?

  4. sony says:

    saya mo nanya nih, gimana perintah di sql tuk gabung lebih satu tabel yg saya miliki perintah sqlnya namun masih error
    perintah sql yg saya gunakan adalah
    select DataObat.NamaObat, sum(ObatKeluar.JPS), sum(ObatMasuk.JPS) Group by DataObat.NamaObat

    artikel2 banyak membantu bagi pemula seperti saya, btw aplikasinya saya buat menggunakan Delphi 7….tq…majulah indonesia..aminnn

  5. Abu Nawas says:

    mas mau tanya..
    kalau script sql diatas di jadikan php gimana ya?
    saya bingung tentang tata letak titik komanya :)
    thanks

  6. khael says:

    mas mau nanya..
    saya mempunyai 2 tabel yang berelasi yaitu tabel tujuan dengan pegawai
    didalam tabel pegawai fieldnya: nip,nama,n satuan biaya yang isinya(a,b,c,d)
    n di tabel tujuan fieldnya: tujuan,a,b,c,d
    pada field a,b,c,d mempunyai jumlah biaya yang berbeda
    nah gimana memanggil data bila tujuan jogja n satuanx a n tujuan jogja satuan biayanya c??
    makasih



 

Komentar/pertanyaan Anda!

Mohon maaf, komentar/pertanyaan yang menggunakan email palsu atau komentar bernada negatif, cemooh, umpatan, cacian atau sejenisnya secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil

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

Mohon maaf jika seandainya ada beberapa pertanyaan Anda yang tidak direspon atau ditanggapi mengingat banyaknya komentar yang masuk dan keterbatasan kemampuan/ilmu saya dalam menjawab pertanyaan satu persatu. Saya harap Anda bisa memahami dan memakluminya.

Semua komentar atau pertanyaan yg masuk tidak akan langsung tampil di halaman ini, karena akan dimoderasi dahulu.


*