Perintah SQL untuk Mencari Siswa yang Belum Bayar SPP (studi kasus)
November 13th, 2008 | by rosihanari |
Cetak Artikel
Dalam sebuah artikel yang saya publish tentang SQL SELECT untuk multi tabel, ada seorang teman yang berkomentar sekaligus menanyakan seperti ini:
Ass, saya lg bwt data SPP siswa, gmnx caranya
cari siswa yang blm bayar SPP,
printah d SQL-nya gmana??duh bingung bgt..:)
He.. he.. he… tidak usah bingung mas Fyan (si komentator)… Dengan SQL kita bisa dengan mudah mencari siswa-siswa yang belum membayar SPP. Kalau SQL tidak bisa, ya… bisa-bisa database dengan SQL based gak laku lagi
just kidding…
OK… akan saya berikan sedikit penjelasan, semoga hal ini bisa menghilangkan kebingungan mas Fyan, sekaligus mudah-mudahan bisa menggairahkan kembali untuk lebih kreatif dalam mengembangkan aplikasi SPP nya.
Untuk menjawab problem yang dihadapi mas Fyan, kita harus mulai memikirkannya ketika merancang tabel-tabel di database. Untuk keperluan tersebut, kita harus buatkan tabel untuk menyimpan data semua siswa, katakanlah tabel ‘SISWA’ dan tabel untuk menyimpan data-data siswa yang sudah membayar SPP, katakanlah tabel ‘BAYARSPP’.
Untuk tabel ‘SISWA’ apa saja field-fieldnya? Tentu saja fieldnya terkait dengan data siswa, misalnya NIS (Nomor Induk Siswa), Nama Siswa, Alamat Siswa, No Telp, dll. Selanjutnya untuk tabel ‘BAYARSPP’ harus tersedia field untuk menyimpan NIS siswa yang sudah membayar SPP. Selain itu, harus tersedia pula field untuk menyimpan tanggal pembayaran (untuk keperluan tracking), field untuk menyimpan informasi bulan SPP yang dibayar, serta tahun bulan SPP yang dibayar. Kita tidak bisa hanya mengandalkan field tanggal pembayaran untuk mengetahui si siswa sudah membayar SPP bulan tertentu. Karena bisa jadi siswa membayar SPP tanggal 1 Januari 2009, padahal dia membayar untuk SPP bulan desember 2008.
Dari penjelasan di atas, kita bisa mulai susun tabel-tabelnya:
Perintah SQL untuk membuat tabel ‘SISWA’
CREATE TABLE `siswa` ( `nis` varchar(10), `namasiswa` varchar(30), `alamat` varchar(50), PRIMARY KEY (`nis`) );
dan berikut ini contoh data siswanya (tabel induk siswa)
INSERT INTO siswa VALUES
('10001', 'ROSIHAN ARI YUANA', 'SOLO'),
('10002', 'DWI AMALIA F', 'KUDUS'),
('10003', 'FAZA FAUZAN', 'SOLO'),
('10004', 'NADA HASANAH', 'SOLO'),
('10005', 'MUH. AHSANI TAQWIM', 'SOLO');
Berikutnya kita buat pula tabel ‘BAYARSPP’
CREATE TABLE `bayarspp` ( `nis` varchar(10), `tglbyr` date, `byrbln` int(11), `byrthn` varchar(4), PRIMARY KEY (`nis`,`byrbln`,`byrthn`) );
Field ‘byrbln’ digunakan untuk menyimpan data terkait dengan bulan SPP yang mau dibayarkan. Field ‘byrthn’ terkait dengan tahun SPP yang dibayarkan, sedangkan ‘tglbyr’ menyimpan informasi tanggal berapa si siswa membayar.
Berikut ini contoh data pembayaran SPP siswa
INSERT INTO bayarspp VALUES
('10001', '2008-01-10', 1, '2008'),
('10002', '2008-01-12', 1, '2008'),
('10003', '2008-01-10', 1, '2008'),
('10001', '2008-02-09', 2, '2008'),
('10003', '2008-02-13', 2, '2008');
Untuk record pertama, kita bisa mengetahui bahwa siswa ber NIS ’10001′ telah membayar SPP untuk bulan 1 (Januari) tahun 2008 pada tanggal 10/01/2008. Sedangkan untuk record yang lain, cara membacanya sama.
Nah… kembali ke pertanyaan inti mas Fyan, bagaimana perintah SQL untuk mencari siswa yang belum membayar SPP pada bulan tertentu? Nah… dengan struktur tabel di atas, kita bisa membuat SQL nya dengan mudah. Konsepnya adalah dengan mencari terlebih dahulu NIS dari siswa yang sudah membayar SPP pada bulan tertentu (dalam hal ini menggunakan tabel ‘BAYARSPP’), misalkan hasil query ini diberi nama X. Selanjutnya, kita cari NIS yang ada dalam tabel ‘SISWA’ yang NIS nya tidak terdapat dalam hasil X tadi. Ketemu dah hasilnya…
Sebagai contoh, berikut ini adalah perintah SQL untuk menampilkan NIS dan NAMA SISWA yang belum membayar SPP bulan Januari 2008.
SELECT nis, namasiswa FROM siswa WHERE nis NOT IN (SELECT nis FROM bayarspp WHERE byrbln = 1 AND byrthn = '2008');
Dari query SQL di atas, akan tampak NIS dan NAMA SISWA yang belum membayar SPP bulan Januari 2008 yaitu
NIS NAMA SISWA 1004 NADA HASANAH 1005 MUH. AHSANI TAQWIM
Wah… anak-anakku dijadikan contoh siswa yang belum bayar SPP nih
maaf ya nak… ini cuman contoh kok. Ayahmu akan berusaha bayar SPP tepat waktu
OK demikian mas Fyan, mudah-mudahan ini yang dimaksud oleh Anda. Semoga ada manfaatnya.
| Baca Juga Artikel Terkait |
Kata kunci: query - SQL - subquery -




Thanks vert much,,,, blognya keren sekale,,, hehe..
pak,,,
gimana cara merelasikan database di sql server ke bahasa pemrograman C++…
klo cara cetak dari C++ yag sudah dibuat program gimana pak??
maksih pak,,
saya baru nyoba php nyari2 pengetahuan sukurnya nympe sini
makasih bwt ilmunya mas, semangat bwt update terus biar anak negri bisa majuin negrinya
cayo!!!
Ass.wr.wb..
Pak ari makasi atas semua tutorialnya..
sangat berguna bagi saya untuk dapat mengerti tentang php-mysql..
Buat Pak ari Jaya Terus..
mas rosihan, saya mau nanya dong. gimana rancangan database untuk kebutuhan barang dari suatu materi pelajaran.
misalkan :
materi CISCO
kebutuhan : komputer (1buah), router (1buah), kabel LAN (2buah) dll.
rancangan database awal saya :
tabel barang
kdBarang (pk)
namaBarang
jumlah
tabelMateri
idMateri (pk1)
kdMateri (pk2)
kdBarang (fk)
klo nampilin data, tanpa jumlah kebutuhan barang, saya bisa mas. tapi untuk nampilin data dengan jumlah kebutuhannya saya masih buntu.
bisa bantu mas? terimakasih sebelumnya
@gutasaputra: bedanya idMateri dengan kdMateri apa ya? yang jelas untuk setiap materi kan bisa jadi ada beberapa barang yang terlibat. Jadi pertama kita buat tabel Materi dulu sebagai master. Kemudian, kita buat juga tabel Barang sebagai master. Setiap barang dikasih kode barang sendiri. Kemudian buat satu tabel lagi yang merelasikan Materi dengan barang yang dibutuhkan.
dalam kasus saya, saya ingin mencari murid dalam kelas tertentu berdasarkan nama dan nis. syntax yang saya tulis begini:
$li_query=mysql_query(“select * from nilai where nama like ‘%$cari%’ or nis like ‘%$cari%’ and kelas=’$kelas’ order by nama”);
itu malah menampilkan murid dalam semua kelas. setelah membaca artikel ini, saya merubah syntaxnya jadi begini:
$li_query=mysql_query(“select * from nilai where nama like ‘%$cari%’ or nis like ‘%$cari%’ in (select * from nilai where kelas=’$kelas’) order by nama”);
hasilnya malah error, apakah ada yang salah dari syntax diatas?
@amy sidra: yang salah pada bagian yang sy bold ini mas
$li_query=mysql_query(“select * from nilai where nama like ‘%$cari%’ or nis like ‘%$cari%’ in (select * from nilai where kelas=’$kelas’) order by nama”);
harusnya sebelum IN itu ada nama field nya.
[...] by Imran Syarif | Bila Anda merupakan pengunjung setia blog ini, maka Anda akan pernah mendapatkan artikel yang hampir sama beberapa waktu yang lalu. Namun perbedaan artikel berikut ini adalah bagaimana cara menampilkan data [...]