Tutorial SQL Bagian 4
Mengawali tutorial bagian ke empat ini kita akan mengenal satu perintah SQL yaitu DELETE. Fungsi dari perintah DELETE mungkin langsung bisa ditebak, yaitu untuk menghapus record pada tabel. Contoh:
DELETE FROM pasien WHERE kelamin = 'L';maksudnya: hapuslah record-record pada tabel pasien yang mempunyai atribut kelamin = 'L' alias laki-laki.
Atau perintah:
DELETE FROM pasien;maksudnya: hapuslah semua record pada tabel pasien.
Kita akan melanjutkan mengenai formulir laporan suspect flu burung (lihat Tutorial SQL Bagian 3, Case Report Form). Formulir tersebut akan diwajibkan untuk diisi dengan data dari pasien yang memiliki salah satu atau lebih gejala/tanda berikut:
- suhu tinggi
- batuk
- radang tenggorok
- nafas tersengal
- paparan langsung dengan unggas
- paparan wilayah bekas tempat pemeliharaan unggas
Pertama, kita akan mencari tahu berapa pasien yang memenuhi beberapa kriteria gejala, misalnya memiliki jawaban Ya pada gejala: suhu tinggi, batuk, radang tenggorok dan nafas tersengal.
SELECT COUNT(*) as 'jumlah kasus' FROM pasienhasilnya:
WHERE suhu_tinggi = 'a'
AND batuk = 'a'
AND radang_tenggorok = 'a'
AND nafas_tersengal = 'a';
+--------------+Berikutnya, berapa kasus yang mengalami kematian?
| jumlah kasus |
+--------------+
| 1 |
+--------------+
SELECT COUNT(*) FROM pasien WHERE status_keluar = 'b';Bagaimana penyebaran wilayah untuk kasus yang mengalami paparan langsung?
SELECT b.nama_wilayah,COUNT(*) as 'jumlah kasus'
FROM pasien a
LEFT JOIN wilayah b USING(kode_wilayah)
WHERE a.paparan_langsung = 'a'
GROUP BY b.kode_wilayah;
Dimana dan berapa terjadi kasus kematian?
SELECT b.nama_wilayah,COUNT(*) as 'jumlah kasus'Berapa kasus yang terjadi pada bulan September 2006?
FROM pasien a
LEFT JOIN wilayah b USING(kode_wilayah)
WHERE a.status_keluar = 'b'
GROUP BY b.kode_wilayah;
SELECT COUNT(*) as 'jumlah kasus'
FROM pasien
WHERE DATE(gejala_dttm) >= '2006-09-01'
AND DATE(gejala_dttm) <= '2006-09-30';
Misalkan umur dibagi 2 segmen yaitu usia 30 tahun keatas dan usia dibawah 30 tahun, maka segmen mana yang memiliki jumlah kasus terbanyak?
SELECT COUNT(*) FROM pasien WHERE umur >= 30;Atau dengan cara:
SELECT COUNT(*) FROM pasien WHERE umur < 30;
(SELECT 'segmen 1',
COUNT(*) as 'jumlah kasus'
FROM pasien WHERE umur >= 30)
UNION
(SELECT 'segmen 2',
COUNT(*) as 'jumlah kasus'
FROM pasien WHERE umur < 30)
ORDER BY 'jumlah kasus' DESC;
Format untuk UNION adalah: (SELECT ...) UNION (SELECT ...).
Manakah gejala yang mungkin menjadi penyebab utama kematian?
Ups!!Pertanyaan ini agak susah untuk dijawab dengan SQL, namun bukan tidak mungkin. Caranya tidak akan kami jelaskan disini karena bisa sangat panjang, lagipula datanya kurang dan tidak realistis jika digunakan sebagai basis untuk menarik sebuah kesimpulan besar semacam itu. Garis besarnya sebenarnya sama dengan yang digunakan dalam aplikasi-aplikasi pengolahan data statistik seperti SPSS, S-Plus, R, atau yang lain, yaitu kita harus melakukan uji masing-masing variabel gejala yang menunjukkan korelasi dengan variabel kematian.
Dan seterusnya.
Masih banyak pertanyaan yang mungkin untuk diajukan. Kaitannya dengan misi utama sebuah surveillance, maka pertanyaan tidak akan cukup sampai disini, terlebih ilmu dan kasus yang terjadi terus berkembang. Salah satu pertanyaan yang cukup populer saat ini ialah yang berkaitan dengan sistem informasi geografis mengenai penyebaran penyakit dan timbulnya wabah. Tidak berlebihan kiranya jika kami berharap untuk bisa membahasnya dengan lebih detil pada kesempatan lain. Harapan kami, semoga tutorial ini dapat sedikit membantu. Terima kasih.
SELECT a.nama,b.nama_wilayahAkan saya baca (peta-kan):
FROM pasien a
LEFT JOIN wilayah b USING(kode_wilayah)
ORDER BY a.nama,b.nama_wilayah;
1. SELECT: adalah perintah untuk mengambil data (select the data, jika kita analogikan dalam bahasa Inggris).
2. a.nama: ini adalah kolom/atribut 'nama' dari tabel 'a'. Manakah tabel 'a'? Kita cari di klausul FROM atau JOIN yang nama/aliasnya 'a', yaitu tabel 'pasien' (FROM pasien a: maksudnya tabel 'pasien', diberi alias 'a').
3. b.nama_wilayah: ini adalah kolom 'nama_wilayah' dari tabel alias 'b', yaitu tabel 'wilayah' (lihat aliasnya di bagian JOIN).
4. FROM pasien a: artinya SELECT ini akan diambil data dari tabel 'pasien' dan kita beri alias 'a'.
5. LEFT JOIN wilayah b USING(kode_wilayah): artinya ialah gabungkan (join) tabel sebelumnya (tabel 'pasien') dengan tabel 'wilayah', dengan kolom gabungan yaitu 'kode_wilayah'. Proses LEFT JOIN bisa diilustrasikan begini: setelah SELECT mendapatkan data dari tabel 'pasien', maka kemudian dicari padanan data dari tabel 'wilayah' berdasarkan kesamaan pada kolom 'kode_wilayah'.
6. ORDER BY a.nama,b.nama_wilayah: maksudnya ialah, urutkan (order) hasil query berdasarkan urutan 'a.nama', kemudian urutan 'b.nama_wilayah'.
Query tersebut sama hasilnya dengan (perhatikan perbedaannya):
SELECT pasien.nama,wilayah.nama_wilayahsama dengan:
FROM pasien
LEFT JOIN wilayah USING(kode_wilayah)
ORDER BY pasien.nama, wilayah.nama_wilayah;
SELECT pasien.nama,wilayah.nama_wilayah(query yang kedua ini sering disebut STRAIGHT JOIN).
FROM pasien, wilayah
WHERE wilayah.kode_wilayah = pasien.kode_wilayah
ORDER BY pasien.nama,wilayah.nama_wilayah;
Catatan akhir: dari semua itu, yang terpenting ialah bagaimana kita membaca sebuah query lalu melogikanya, mencari titik-titik logisnya, akhirnya kita memahami, yang kemudian berhasil kepada bertambahnya kemampuan kita menggunakan bahasa SQL.
Sekian.