SQL DML 2 | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: SQL DML 2

Wednesday, April 1, 2026

SQL DML 2

Basis Data SQL Lanjutan RMIK D3 Sem. 4

SQL DML Lanjutan: JOIN, GROUP BY & Query Laporan Morbiditas

Dari dua tabel terpisah hingga laporan morbiditas siap lapor ke Kemenkes — kuasai JOIN, COUNT, SUM, AVG, dan GROUP BY dengan analogi nyata yang bikin kamu bilang: "Oh, segini doang?"

5
Operator JOIN
4
Fungsi Agregat
3
Studi Kasus Nyata
1
Laporan Nasional

Bayangin kamu kerja di puskesmas. Ada dua buku besar di mejamu: satu berisi data pasien (nama, NIK, alamat), satu lagi berisi data diagnosa (kode ICD-10, tanggal periksa, nama dokter). Pertanyaannya: gimana cara tahu pasien mana yang kena diagnosa apa? Kalau dijawab manual, kamu bakalan lembur sampai pagi. Tapi kalau kamu tahu SQL DML Lanjutan—khususnya JOIN, GROUP BY, dan fungsi agregat—jawabannya cuma butuh tiga detik. Serius.

Di artikel ini, kita bahas tuntas konsep JOIN (INNER & LEFT), fungsi agregat COUNT, SUM, AVG, klausa GROUP BY, hingga cara menyusun query laporan morbiditas yang siap digunakan untuk pelaporan data nasional. Semua dikemas dengan analogi konkret, contoh tabel rekam medis, dan sintaks SQL yang bisa langsung kamu coba. Siap?

💡
Fakta Menarik

Berdasarkan Permenkes No. 24 Tahun 2022 tentang Rekam Medis, setiap fasilitas pelayanan kesehatan wajib melaporkan data morbiditas menggunakan kode ICD-10. Artinya, query SQL yang kamu pelajari hari ini benar-benar dipakai di dunia nyata untuk pelaporan ke Kemenkes! Baca Permenkes No. 24/2022 →

1. Apa Itu JOIN? Analogi Dua Buku Besar

JOIN adalah perintah SQL yang menggabungkan baris-baris dari dua tabel atau lebih berdasarkan kolom kunci yang saling berhubungan. Menurut Date (2004) dalam bukunya An Introduction to Database Systems, JOIN merupakan operasi fundamental dalam aljabar relasional yang memungkinkan kita mengekstrak informasi dari beberapa relasi sekaligus.[1]

Analoginya gini: tabel pasien itu kayak KTP—identitas dasar. Tabel kunjungan itu kayak buku agenda dokter. JOIN = menyandingkan KTP dengan buku agenda supaya kita tahu siapa yang datang kapan dan kenapa.

Tabel: pasien (kiri) & kunjungan (kanan)
id_pasien nama_pasien id_kunjungan id_pasien (FK) kode_icd tgl_kunjungan
P001 Rina Wulandari K001 P001 J06.9 2024-01-10
P002 Budi Santoso K002 P001 A09 2024-01-15
P003 Siti Rahayu K003 P003 J18.9 2024-01-18
P004 Dian Permata — (belum kunjungan)

1a. INNER JOIN — "Hanya yang Cocok"

INNER JOIN mengembalikan baris yang memiliki pasangan di kedua tabel. Ibarat ajang kencan: hanya pasangan yang match saja yang maju ke babak selanjutnya. Pasien P004 (Dian Permata) tidak akan muncul karena belum ada kunjungan.

SQL — INNER JOIN
SELECT
  p.id_pasien,
  p.nama_pasien,
  k.kode_icd,
  k.tgl_kunjungan
FROM pasien p
INNER JOIN kunjungan k
  ON p.id_pasien = k.id_pasien;
📊 Hasil Query:

Hanya 3 baris yang muncul: P001 (2×), P003 (1×). P002 (Budi) dan P004 (Dian) tidak muncul karena P002 ada di kunjungan tapi kita lihat data di atas—sesuai FK. P004 tidak muncul sama sekali karena tidak punya kunjungan.

1b. LEFT JOIN — "Semua dari Kiri, Meski Jomblo"

LEFT JOIN mengembalikan semua baris dari tabel kiri (pasien), ditambah baris yang cocok dari tabel kanan (kunjungan). Kalau tidak ada pasangan di kanan, kolom dari tabel kanan akan berisi NULL. Berguna banget untuk menemukan pasien yang belum pernah berkunjung!

SQL — LEFT JOIN
SELECT
  p.id_pasien,
  p.nama_pasien,
  k.kode_icd,
  k.tgl_kunjungan
FROM pasien p
LEFT JOIN kunjungan k
  ON p.id_pasien = k.id_pasien;

-- P004 (Dian) akan muncul dengan kode_icd = NULL
-- Sangat berguna untuk laporan pasien "tidak aktif"
🎯
Tips Pro

Kapan pakai INNER vs LEFT JOIN? Gunakan INNER JOIN ketika kamu hanya mau data yang benar-benar terhubung (misal: laporan kunjungan aktif). Gunakan LEFT JOIN ketika kamu perlu audit data—termasuk pasien yang belum punya kunjungan, atau obat yang belum pernah diresepkan. Pilihan JOIN yang salah bisa bikin laporan kamu kehilangan data penting!

2. GROUP BY & Fungsi Agregat: COUNT, SUM, AVG

Kalau JOIN adalah cara menggabungkan data, maka GROUP BY adalah cara merangkum data. Bayangkan kamu punya 1.000 baris data kunjungan. Tanpa GROUP BY, kamu lihat satu per satu. Dengan GROUP BY, kamu bisa langsung tahu: "Bulan Januari ada berapa kunjungan per diagnosa?"

Menurut Connolly & Begg (2015) dalam Database Systems: A Practical Approach to Design, Implementation, and Management, fungsi agregat adalah fungsi yang menerima sekumpulan nilai sebagai input dan menghasilkan satu nilai tunggal sebagai output.[2]

🔢
COUNT()
Menghitung jumlah baris (atau nilai non-NULL). Contoh: berapa kali pasien berkunjung.
COUNT(*) atau COUNT(kolom)
SUM()
Menjumlahkan nilai numerik. Contoh: total biaya pelayanan per bulan.
SUM(biaya_tindakan)
📉
AVG()
Menghitung rata-rata. Contoh: rata-rata usia pasien per diagnosa.
AVG(usia_pasien)
📈
MAX/MIN
Nilai tertinggi/terendah. Contoh: pasien termuda/tertua yang dirawat.
MAX(usia), MIN(usia)

Cara Kerja GROUP BY — Step by Step

1
Tentukan kolom yang mau dikelompokkan

Misalnya: ingin melihat data per kode_icd, maka GROUP BY kode_icd.

2
Pilih fungsi agregat yang relevan

Untuk laporan frekuensi → COUNT(*). Untuk total biaya → SUM(biaya). Untuk rata-rata usia → AVG(usia).

3
Tambahkan HAVING untuk filter hasil agregat

WHERE dipakai sebelum GROUP BY (filter baris). HAVING dipakai sesudah GROUP BY (filter hasil agregat). Misal: hanya tampilkan diagnosa dengan ≥ 5 kunjungan.

SQL — GROUP BY + COUNT + HAVING
SELECT
  k.kode_icd,
  COUNT(*) AS jumlah_kunjungan,
  AVG(p.usia) AS rata_rata_usia,
  SUM(k.biaya_tindakan) AS total_biaya
FROM kunjungan k
INNER JOIN pasien p ON k.id_pasien = p.id_pasien
GROUP BY k.kode_icd
HAVING COUNT(*) >= 5
ORDER BY jumlah_kunjungan DESC;
⚡ Insight Penting

WHERE vs HAVING: Jangan sampai kebalik! WHERE memfilter baris sebelum pengelompokan—tidak bisa memakai hasil fungsi agregat. HAVING memfilter hasil setelah GROUP BY—dan ini yang bisa memakai COUNT, SUM, AVG. Urutan eksekusi SQL: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Hafal ini, hidupmu akan lebih mudah! 😄

3. Query Laporan Morbiditas: Dari Database ke Kemenkes

Ini bagian yang bikin SQL terasa meaningful banget buat kamu sebagai calon perekam medis. Laporan morbiditas adalah laporan tentang frekuensi penyakit (kesakitan) di suatu wilayah dalam periode tertentu. Di Indonesia, laporan ini disampaikan menggunakan format standar dan dikirim ke Dinas Kesehatan serta Kemenkes.

Berdasarkan Keputusan Menteri Kesehatan Nomor 129/Menkes/SK/II/2008 tentang Standar Pelayanan Minimal Rumah Sakit, data morbiditas merupakan salah satu indikator kinerja layanan yang wajib dilaporkan secara periodik.[3] Format pelaporan nasional mengacu pada Sistem Informasi Rumah Sakit (SIRS) yang dikelola oleh Kemenkes RI.

📋 Studi Kasus: Laporan 10 Besar Penyakit Puskesmas

Puskesmas X butuh laporan "10 Besar Penyakit" bulan Januari 2024 dalam format kode ICD-10. Data ada di tiga tabel: pasien, kunjungan, dan diagnosa_icd (nama diagnosa). Kita butuh JOIN + GROUP BY + ORDER BY + LIMIT.

SQL — Laporan 10 Besar Penyakit
-- Laporan 10 Besar Penyakit Puskesmas X
-- Januari 2024 (format SIRS Kemenkes)
SELECT
  d.kode_icd,
  d.nama_diagnosa,
  COUNT(k.id_kunjungan) AS total_kasus,
  SUM(CASE WHEN p.jenis_kelamin = 'L' THEN 1 ELSE 0 END) AS kasus_laki,
  SUM(CASE WHEN p.jenis_kelamin = 'P' THEN 1 ELSE 0 END) AS kasus_perempuan,
  ROUND(AVG(p.usia), 1) AS rata_usia
FROM kunjungan k
INNER JOIN pasien p
  ON k.id_pasien = p.id_pasien
INNER JOIN diagnosa_icd d
  ON k.kode_icd = d.kode_icd
WHERE
  k.tgl_kunjungan BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY
  d.kode_icd, d.nama_diagnosa
ORDER BY
  total_kasus DESC
LIMIT 10;
🔍 Breakdown Query di Atas
CASE WHEN Trik keren untuk menghitung kasus laki-laki dan perempuan dalam satu query—tidak perlu query terpisah.
ROUND(AVG, 1) Membulatkan rata-rata usia ke 1 desimal—lebih rapi untuk laporan formal.
BETWEEN Filter rentang tanggal—lebih bersih dibanding pakai dua kondisi AND terpisah.
LIMIT 10 Membatasi output ke 10 diagnosa teratas—sesuai format "10 Besar Penyakit" laporan puskesmas.

4. Pelaporan Data Nasional: SIRS, SIKDA, dan Alur Datanya

Query yang kamu buat tadi tidak hidup dalam vakum. Ada sistem yang lebih besar di atasnya. Indonesia memiliki beberapa platform pelaporan data kesehatan nasional yang relevan dengan profesimu sebagai RMIK:

Sistem Pelaporan Data Kesehatan Nasional Indonesia
Sistem Kepanjangan Fungsi Utama Data Morbiditas
SIRS Sistem Informasi Rumah Sakit Pelaporan data RS ke Kemenkes secara online ✅ Ya (RL 2.1)
SIKDA Sistem Informasi Kesehatan Daerah Pelaporan dari puskesmas ke Dinkes Kab/Kota ✅ Ya (LB1)
SEHAT Sistem Elektronik Kesehatan (platform baru) Integrasi nasional data kesehatan (pengganti SIRS) ✅ Terintegrasi
INA-CBGs Indonesian Case Based Groups Penentuan tarif klaim BPJS berdasar diagnosis ⚡ ICD-10 based

Menurut Rustiyanto (2010) dalam Statistik Rumah Sakit untuk Pengambilan Keputusan, kualitas pelaporan morbiditas sangat bergantung pada ketepatan pengkodean diagnosis dan kelengkapan entri data di sistem informasi rumah sakit.[4] Di sinilah peran SQL sebagai alat query dan validasi data menjadi sangat krusial.

Query Validasi Sebelum Pelaporan Nasional

Sebelum data dikirim ke sistem nasional, kamu perlu memvalidasi kelengkapan data. Ini query yang wajib kamu jalankan:

SQL — Validasi Data Morbiditas
-- 1. Cari kunjungan tanpa kode ICD (data tidak valid)
SELECT
  k.id_kunjungan,
  p.nama_pasien,
  k.tgl_kunjungan,
  k.kode_icd
FROM kunjungan k
LEFT JOIN pasien p ON k.id_pasien = p.id_pasien
WHERE k.kode_icd IS NULL
   OR k.kode_icd = '';

-- 2. Hitung persentase kelengkapan data per bulan
SELECT
  DATE_FORMAT(tgl_kunjungan, '%Y-%m') AS bulan,
  COUNT(*) AS total_kunjungan,
  SUM(CASE WHEN kode_icd IS NOT NULL
           AND kode_icd <> ''
           THEN 1 ELSE 0 END) AS lengkap,
  ROUND(
    SUM(CASE WHEN kode_icd IS NOT NULL
             AND kode_icd <> ''
             THEN 1 ELSE 0 END) * 100.0
    / COUNT(*), 2
  ) AS persen_kelengkapan
FROM kunjungan
GROUP BY bulan
ORDER BY bulan;
🚀
Tips Karir RMIK

Di dunia kerja, kemampuan membuat query validasi data sebelum pelaporan nasional adalah skill yang sangat dicari. Banyak rumah sakit membutuhkan staf rekam medis yang tidak hanya bisa entry data, tapi juga bisa "berbicara dengan database". Kalau kamu mahir SQL untuk SIRS dan INA-CBGs, nilai tawar di pasar kerja kamu langsung naik kelas! 💼

5. Ringkasan: Kapan Pakai Apa?

Fitur SQL Kegunaan di RMIK Kapan Digunakan Output Laporan
INNER JOIN Gabungkan data pasien dengan kunjungan aktif Laporan kunjungan, tagihan BPJS Hanya data yang cocok di kedua tabel
LEFT JOIN Audit pasien belum kunjungan/belum terdiagnosa Validasi kelengkapan data Semua baris tabel kiri + NULL jika tidak cocok
GROUP BY Rekap per diagnosa, per bulan, per poli Semua laporan berkategori Ringkasan terkelompok
COUNT(*) Hitung frekuensi penyakit (morbiditas) 10 Besar Penyakit, LB1 Puskesmas Jumlah kasus
SUM() Total biaya, total hari rawat Laporan keuangan, RL 3.4 Total nilai numerik
AVG() Rata-rata LOS (Length of Stay), rata-rata usia Indikator kinerja RS (BOR, LOS, TOI) Nilai rata-rata
🏥
Insight: Transformasi Digital Kesehatan Indonesia

Kemenkes RI sedang mendorong implementasi Platform SATUSEHAT sebagai tulang punggung interoperabilitas data kesehatan nasional. Setiap fasilitas kesehatan akan terhubung real-time. Artinya, SQL yang kamu pelajari hari ini adalah fondasi dari sistem yang akan kamu gunakan sepanjang karir. Tidak ada kata "ini cuma teori"—ini skill hidup! Cek lebih lanjut di satusehat.kemkes.go.id →

🎓 Kesimpulan

Kita sudah menempuh perjalanan panjang hari ini—dari dua tabel sederhana hingga query laporan morbiditas nasional. Poin-poin utama yang wajib kamu bawa pulang:

  • INNER JOIN untuk data yang pasti terhubung; LEFT JOIN untuk audit kelengkapan data.
  • GROUP BY + COUNT/SUM/AVG = senjata utama laporan morbiditas dan statistik rumah sakit.
  • WHERE ≠ HAVING: WHERE untuk filter baris, HAVING untuk filter hasil agregat. Jangan kebalik!
  • Data morbiditas untuk SIRS, SIKDA, dan SATUSEHAT semuanya berbasis query SQL yang kamu pelajari hari ini.

SQL bukan mata kuliah yang harus kamu hafal—SQL adalah alat yang harus kamu pahami. Semakin sering praktik langsung di MySQL Workbench atau HeidiSQL, semakin natural query-query ini di jari kamu. Dan ingat: setiap laporan yang kamu hasilkan nanti bisa membantu pengambilan keputusan klinis yang nyata. That's the real power of database.

💬

Bagaimana, Ada yang Masih Bikin Bingung?

Drop pertanyaanmu di kolom komentar di bawah! Mau nanya soal perbedaan JOIN, cara debug query yang error, atau minta contoh kasus lain buat tugasmu—semua boleh. Kalau artikel ini nambah wawasanmu, share ke teman sekelas—siapa tahu mereka juga lagi berjuang dengan materi yang sama! 🙌

💬 Tulis Komentar
📤 Share Artikel
🔔 Subscribe Blog
#SQL #JOIN #GROUPBY #BasisData #RMIK #LaporanMorbiditas #SIRS #ICD10 #SistemInformasi #KuliahBasisData

📚 Referensi

  1. Date, C.J. (2004). An Introduction to Database Systems (8th ed.). Addison-Wesley. ISBN: 978-0321197849.
  2. Connolly, T., & Begg, C. (2015). Database Systems: A Practical Approach to Design, Implementation, and Management (6th ed.). Pearson Education. ISBN: 978-0132943260.
  3. Kementerian Kesehatan RI. (2008). Keputusan Menteri Kesehatan No. 129/Menkes/SK/II/2008 tentang Standar Pelayanan Minimal Rumah Sakit. Jakarta: Kemenkes RI.
  4. Rustiyanto, E. (2010). Statistik Rumah Sakit untuk Pengambilan Keputusan. Yogyakarta: Graha Ilmu. ISBN: 978-9797562793.
  5. Kementerian Kesehatan RI. (2022). Peraturan Menteri Kesehatan No. 24 Tahun 2022 tentang Rekam Medis. Jakarta: Kemenkes RI. Tersedia di: peraturan.bpk.go.id
  6. Silberschatz, A., Korth, H.F., & Sudarshan, S. (2020). Database System Concepts (7th ed.). McGraw-Hill Education. ISBN: 978-0078022159.
📌 META DESCRIPTION (155 karakter):

Pelajari SQL DML lanjutan: INNER JOIN, LEFT JOIN, GROUP BY, COUNT, SUM, AVG, hingga query laporan morbiditas untuk pelaporan SIRS nasional. Panduan lengkap D3 RMIK.

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux