Bayangkan kamu petugas rekam medis, lalu atasan meminta: "Tolong, daftar pasien hipertensi bulan ini beserta dokter yang menanganinya." Nama pasien ada di satu tabel, diagnosis di tabel lain, dokter di tabel ketiga. Menyalin manual? Itu bukan kerja cerdas, apalagi kalau datanya ribuan baris.
Di sinilah JOIN SQL jadi penyelamat. Perintah ini menyambungkan beberapa tabel menjadi satu hasil utuh dalam sekali SELECT. Artikel 15 dari 16 seri Kuliah Basis Data ini membantu kamu, mahasiswa D3 RMIK semester 3, memahami cara kerja JOIN SQL, membaca hasilnya, lalu memilih query yang tepat untuk kebutuhan informasi tertentu. Kita mulai dari pertanyaan paling mendasar: kenapa data kesehatan sengaja dipecah ke banyak tabel?
Mengapa JOIN SQL Dibutuhkan pada Data Rekam Medis?
Kalau kamu pernah melihat ruang filing atau bagian pendaftaran, kamu tahu informasi pasien tidak ditulis dalam satu lembar. Identitas ada di kartu pasien, jadwal praktik ada di buku dokter, dan kode penyakit ada di katalog ICD-10. Basis data bekerja serupa: data dipecah ke beberapa tabel agar tidak ada informasi yang tersimpan berulang (Elmasri & Navathe, 2016). Nama dokter cukup ditulis sekali di tabel dokter, bukan disalin ke ribuan baris kunjungan.
Konsekuensinya, satu pertanyaan sering membutuhkan data dari beberapa tabel sekaligus. JOIN SQL berperan seperti petugas yang mencocokkan nomor rekam medis dari satu berkas ke berkas lain. Silberschatz dkk. (2019) menjelaskan bahwa operasi join menggabungkan baris-baris berhubungan dari dua relasi menjadi satu. Satu hal penting: JOIN SQL hanya bekerja di dalam SELECT, jadi ia menampilkan gabungan data tanpa mengubah isi tabel.
Kita pakai kasus sebuah klinik pratama dengan empat tabel berikut sebagai bahan latihan sepanjang artikel:
Anatomi JOIN SQL: Kunci Penghubung dan Klausa ON
Setiap JOIN SQL punya tiga bagian: tabel mana yang digabung, jenis JOIN-nya, dan kondisi pencocokan di klausa ON. Kondisi itu hampir selalu mempertemukan primary key (PK) di satu tabel dengan foreign key (FK) di tabel lain. Pada contoh kita, id_pasien adalah PK di tabel pasien dan FK di tabel kunjungan. Tanpa kunci penghubung, database tidak tahu baris mana yang berpasangan.
SELECT kolom_yang_dibutuhkan
FROM tabel_A
[jenis] JOIN tabel_B
ON tabel_A.kunci = tabel_B.kunci;
Contoh pertama: tampilkan nama pasien beserta tanggal kunjungan dan kode diagnosisnya.
Perhatikan dua hal. Siti muncul dua kali karena memang dua kali berkunjung. Dewi tidak muncul sama sekali karena belum punya kunjungan. Itulah perilaku dasar JOIN SQL jenis INNER JOIN: hanya baris yang berpasangan yang ikut tampil.
pasien AS p) agar query lebih ringkas. Awali setiap kolom dengan alias tabelnya, misalnya p.nama, supaya jelas asal datanya dan tidak ambigu ketika dua tabel punya kolom bernama sama.INNER JOIN vs LEFT JOIN: Dua Jenis JOIN SQL yang Paling Sering Dipakai
Analogi gampangnya: INNER JOIN seperti daftar hadir yang hanya mencatat orang yang datang. LEFT JOIN seperti daftar undangan lengkap, dengan kolom "hadir" yang dibiarkan kosong untuk tamu yang tidak datang. Dokumentasi resmi MySQL dan PostgreSQL sama-sama menjelaskan kedua jenis ini sebagai bagian inti sintaks JOIN (Oracle, 2026; PostgreSQL Global Development Group, 2026).
| Aspek | INNER JOIN | LEFT JOIN |
|---|---|---|
| Baris yang tampil | Hanya yang berpasangan di kedua tabel | Semua baris tabel kiri, plus pasangannya bila ada |
| Data tanpa pasangan | Hilang dari hasil | Tetap tampil dengan nilai NULL |
| Contoh di RMIK | Laporan kunjungan lengkap dengan nama dokter | Daftar semua pasien terdaftar, termasuk yang belum pernah berkunjung |
| Risiko salah baca | Mengira data tanpa pasangan tidak ada | Mengira NULL berarti data rusak |
Sekarang kita tampilkan semua pasien, termasuk yang belum pernah berkunjung:
- Tidak penting (hanya ingin kunjungan yang tercatat) → INNER JOIN.
- Penting (ingin tahu siapa yang belum punya kunjungan) → LEFT JOIN, lalu tambahkan
WHERE k.id_kunjungan IS NULLuntuk menyaring pasien tanpa kunjungan.
ON. Tanpa pencocokan kunci, setiap baris pasien dipasangkan dengan semua baris kunjungan: 3 pasien × 3 kunjungan = 9 baris, dan sebagian besar pasangan itu palsu. Dalam laporan rekam medis, hasil seperti ini menyesatkan.Langkah Menyusun Query JOIN SQL dari Kebutuhan Informasi
Kesalahan paling umum mahasiswa adalah langsung mengetik query sebelum jelas apa yang ditanyakan. Balik urutannya: mulai dari kebutuhan informasi, baru ke sintaks. Kasus kita: "Tampilkan nama pasien, nama dokter, dan nama diagnosis untuk kunjungan pasien hipertensi (I10) pada September 2026, urut berdasarkan tanggal."
pasien, nama dokter dari dokter, diagnosis dari diagnosis, tanggal dari kunjungan.FROM kunjungan, lalu sambungkan satu per satu.WHERE untuk kode I10 dan rentang tanggal, ORDER BY untuk urutan, lalu cocokkan hasilnya dengan data asli.Menganalisis Hasil JOIN SQL Sebelum Kamu Memercayainya
Query yang berjalan tanpa error belum tentu benar. Dalam laporan morbiditas, satu baris ganda saja bisa membuat jumlah kasus membengkak. Biasakan memeriksa hasil JOIN SQL dengan empat pertanyaan ini:
- Jumlah baris. Apakah sesuai perkiraanmu? Bandingkan dengan
COUNT(*)di tabel sumber. - Nilai NULL. Kalau memakai LEFT JOIN, NULL wajar muncul untuk data tanpa pasangan. Kalau memakai INNER JOIN, NULL patut dicurigai.
- Baris ganda. Satu pasien muncul berkali-kali itu wajar bila kunjungannya banyak. Kalau satu kunjungan yang sama muncul ganda, periksa kunci di klausa ON.
- Uji sampel. Ambil satu pasien, lalu cocokkan hasilnya secara manual dengan tabel asal.
Sekarang uji kemampuanmu. Tentukan jenis JOIN SQL untuk tiga kebutuhan informasi berikut, lalu cocokkan dengan jawabannya:
| Kebutuhan informasi | Pilihan query | Alasan |
|---|---|---|
| Laporan kunjungan lengkap dengan nama dokter | INNER JOIN | Hanya data yang berpasangan yang dilaporkan |
| Semua pasien terdaftar beserta tanggal kunjungannya | LEFT JOIN (pasien ke kunjungan) | Pasien tanpa kunjungan tetap tampil |
| Pasien yang belum pernah berkunjung | LEFT JOIN + IS NULL | Menyaring baris yang tidak punya pasangan |
Kamu sekarang punya pegangan untuk menjawab kebutuhan informasi dari data yang tersebar. Poin utamanya:
- JOIN SQL menyambungkan tabel lewat kunci penghubung (PK dan FK) di klausa ON, tanpa mengubah isi tabel.
- INNER JOIN menampilkan data yang berpasangan, sedangkan LEFT JOIN mempertahankan semua baris tabel kiri.
- Susun query dari kebutuhan informasi: kolom hasil, tabel asal, jalur kunci, jenis JOIN, lalu filter.
- Selalu periksa jumlah baris, NULL, dan duplikasi sebelum memercayai hasil.
Menguasai JOIN SQL berarti kamu bisa mengubah tabel-tabel terpisah menjadi informasi yang siap dipakai untuk laporan. Pada artikel terakhir, kita akan merangkai semua konsep basis data dari rancangan sampai query.
- Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.
- Silberschatz, A., Korth, H. F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill Education.
- Kementerian Kesehatan Republik Indonesia. (2022). Peraturan Menteri Kesehatan Nomor 24 Tahun 2022 tentang Rekam Medis.
- Oracle Corporation. (2026). MySQL 8.0 Reference Manual: JOIN Clause. https://dev.mysql.com/doc/refman/8.0/en/join.html
- PostgreSQL Global Development Group. (2026). PostgreSQL Documentation: Joins Between Tables. https://www.postgresql.org/docs/current/tutorial-join.html
No comments:
Post a Comment