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.