<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-34514228</id><updated>2011-06-12T19:08:37.003+07:00</updated><category term='Tutorial SQL'/><category term='Teknologi'/><title type='text'>SQL dan Ilmu Kesehatan</title><subtitle type='html'>Mari kita berbicara tentang database dan SQL di bidang ilmu kedokteran/kesehatan masyarakat serta hal-hal yang berkaitan.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34514228.post-2832710407385081344</id><published>2008-05-20T19:06:00.007+07:00</published><updated>2008-05-20T19:49:17.530+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teknologi'/><title type='text'>Games With A Purpose</title><content type='html'>Setelah membaca &lt;a href="http://www.roughtype.com/archives/2008/05/von_ahns_gwap.php"&gt;artikel&lt;/a&gt; di Rough Type (Nicholas G. Carr's Blog), tentang &lt;a href="http://gwap.com/gwap/"&gt;Gwap&lt;/a&gt; (singkatan dari &lt;span style="font-style: italic;"&gt;games with a purpose&lt;/span&gt;), game yang menghibur sekaligus &lt;span style="font-weight: bold;"&gt;mencerdaskan komputer&lt;/span&gt; (betul -  "mencerdaskan komputer", tidak salah), saya terinspirasi untuk untuk meniru modelnya sebagai tools untuk mengenali &lt;span style="font-style: italic;"&gt;symptom&lt;/span&gt; sebuah penyakit, mengenali &lt;span style="font-style: italic;"&gt;pattern&lt;/span&gt; (pola) tertentu dalam hasil lab, dll. Namun apa dan bagaimana masih belum saya pikirkan (atau mungkin sudah saya pikirkan tapi masih saya rahasiakan, hehe). Omong-omong meniru, ada sebuah &lt;span style="font-style: italic;"&gt;quote&lt;/span&gt; dari Einstein tentang tiru-meniru: "&lt;span style="font-style: italic;"&gt;The secret of creativity is knowing how to hide your sources&lt;/span&gt;". Jadi boleh dong?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-2832710407385081344?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/2832710407385081344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=2832710407385081344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/2832710407385081344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/2832710407385081344'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2008/05/gwap.html' title='Games With A Purpose'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-6076512068735972887</id><published>2008-05-20T09:44:00.002+07:00</published><updated>2008-05-20T10:04:09.400+07:00</updated><title type='text'>Ternyata Tidak Sendiri</title><content type='html'>Lama absen blogging, terakhir kali posting blog pada tanggal 17 Desember 2006. Mulai lagi pada tanggal 17 Mei 2008. Sudah lebih dari setahun lalu (kurang lebih 17 bulan). Tapi ternyata saya tidak sendirian, karena beberapa teman-teman saya juga:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://anisfuad.wordpress.com/"&gt;Anis Fuad&lt;/a&gt; (terakhir: 11 Februari 2007, mulai lagi: 12 April 2008, 14 bulan)&lt;/li&gt;&lt;li&gt;&lt;a href="http://harmiprasetyo.wordpress.com/"&gt;Harmi Prasetyo&lt;/a&gt; (terakhir 25 Mei 2007, mulai lagi: 11 Mei 2008, 12 bulan)&lt;/li&gt;&lt;li&gt;&lt;a href="http://informatika-kesehatan.blogspot.com/"&gt;Agus Mutamakin&lt;/a&gt; (terakhir: 19 September 2006, belum posting lagi, 20 bulan)&lt;/li&gt;&lt;/ul&gt; C'mon guys, semua sedang sibuk sendiri-sendiri ya? Salam buat semua ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-6076512068735972887?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/6076512068735972887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=6076512068735972887' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/6076512068735972887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/6076512068735972887'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2008/05/ternyata-tidak-sendiri.html' title='Ternyata Tidak Sendiri'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-2477875195175325117</id><published>2008-05-17T02:50:00.002+07:00</published><updated>2008-05-20T10:25:11.351+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>Implementasi Kode Wilayah</title><content type='html'>Pada &lt;a href="http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-2.html"&gt;Tutorial SQL terdahulu&lt;/a&gt; telah sedikit disinggung mengenai kode wilayah. Kode tersebut sebenarnya adalah standar kodifikasi wilayah yang resmi dikeluarkan oleh Pemerintah Indonesia melalui Biro Pusat Statistik, yang fungsinya antara lain sebagai dasar pelaporan berbagai indikator berbasis wilayah. Kodifikasi tersebut cukup lengkap, yaitu meliputi pembagian wilayah administratif mulai dari propinsi, kabupaten/kota, kecamatan hingga desa/kelurahan.&lt;br /&gt;&lt;br /&gt;Pembahasan kali ini akan difokuskan kepada bagaimana implementasi kode wilayah tersebut kedalam database dan model query yang bisa digunakan. Model implementasi ini penting sebagai landasan awal desain database untuk berbagai keperluan/kepentingan, terutama yang satu standar dengan bentuk pelaporan pada instansi-instansi pemerintah, supaya nantinya kita dapat memetik manfaat lebih dalam menggali informasi.&lt;br /&gt;&lt;br /&gt;Untuk itu, terlebih dahulu kita perlu melihat kodenya, kita ambil sedikit contoh:&lt;pre&gt;+-------------+-----------------+&lt;br /&gt;| kode        | nama_wilayah    |&lt;br /&gt;+-------------+-----------------+&lt;br /&gt;| 3400000000  | D I YOGYAKARTA  | &lt;&lt; propinsi&lt;br /&gt;| 3401000000  | KULON PROGO     | &lt;&lt; kabupaten&lt;br /&gt;| 3401010000  | TEMON           | &lt;&lt; kecamatan&lt;br /&gt;| 3401010001  | JANGKARAN       | &lt;&lt; kelurahan&lt;br /&gt;| 3401010002  | SINDUTAN        | &lt;&lt; kelurahan&lt;br /&gt;| 3401010003  | PALIHAN         | &lt;&lt; kelurahan&lt;br /&gt;| 3401010004  | GLAGAH          | &lt;&lt; kelurahan&lt;br /&gt;| 3403000000  | GUNUNG KIDUL    | &lt;&lt; kabupaten&lt;br /&gt;| 3403011000  | PURWOSARI       | &lt;&lt; kecamatan&lt;br /&gt;| 3403011001  | GIRIJATI        | &lt;&lt; kelurahan&lt;br /&gt;| 3403011002  | GIRIASIH        | &lt;&lt; kelurahan&lt;br /&gt;| 3403011003  | GIRICAHYO       | &lt;&lt; kelurahan&lt;br /&gt;| 3403011004  | GIRIPURWO       | &lt;&lt; kelurahan&lt;br /&gt;| 3403011005  | GIRITIRTO       | &lt;&lt; kelurahan&lt;br /&gt;| 3403020000  | PALIYAN         | &lt;&lt; kecamatan&lt;br /&gt;| 3100000000  | DKI JAKARTA     | &lt;&lt; propinsi&lt;br /&gt;| 3171000000  | JAKARTA SELATAN | &lt;&lt; kota&lt;br /&gt;| 3171010000  | JAGAKARSA       | &lt;&lt; kecamatan&lt;br /&gt;| 3171010001  | CIPEDAK         | &lt;&lt; kelurahan&lt;br /&gt;| 3171010002  | SRENGSENG SAWAH | &lt;&lt; kelurahan&lt;br /&gt;| 3171010003  | CIGANJUR        | &lt;&lt; kelurahan&lt;br /&gt;+-------------+-----------------+&lt;/pre&gt;Jika kita perhatikan, kode diatas merangkum struktur hirarki wilayah administratif dalam satu atribut numerik (angka) yang terdiri dari 10 digit dengan susunan sebagai berikut (mulai dari kiri ke kanan):&lt;ol&gt;&lt;li&gt;Diawali 2 digit kode propinsi.&lt;/li&gt;&lt;li&gt;Diikuti 2 digit kode kabupaten.&lt;/li&gt;&lt;li&gt;Diikuti 3 digit kode kecamatan.&lt;/li&gt;&lt;li&gt;Diikuti 3 digit kode desa.&lt;/li&gt;&lt;/ol&gt;Contoh 1 : 3171010003 melambangkan:&lt;pre&gt;   31 &lt;&lt; Propinsi DKI JAKARTA&lt;br /&gt;   71 &lt;&lt; Kota JAKARTA SELATAN&lt;br /&gt;  010 &lt;&lt; Kecamatan JAGAKARSA&lt;br /&gt;  003 &lt;&lt; Kelurahan CIGANJUR&lt;/pre&gt;Contoh 2 : 3400000000&lt;pre&gt;   34 &lt;&lt; Propinsi D I YOGYAKARTA&lt;br /&gt;   00 &lt;&lt; kota, kosong&lt;br /&gt;  000 &lt;&lt; kecamatan, kosong&lt;br /&gt;  000 &lt;&lt; kelurahan, kosong&lt;/pre&gt;Contoh 3 : 3171000000&lt;pre&gt;   31 &lt;&lt; Propinsi DKI JAKARTA&lt;br /&gt;   71 &lt;&lt; kota JAKARTA SELATAN&lt;br /&gt;  000 &lt;&lt; kecamatan, kosong&lt;br /&gt;  000 &lt;&lt; kelurahan, kosong&lt;/pre&gt;Dari ketiga contoh diatas, dapat kita lihat bagaimana struktur hirarki diperoleh/disusun dalam kodifikasi tersebut. Selanjutnya struktur tersebut akan kita manfaatkan dalam query-query.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;IMPLEMENTASI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Implementasi akan kita mulai dengan membuat sebuah tabel yang sederhana terlebih dahulu, yaitu tabel dengan 2 atribut, yaitu &lt;span style="font-weight:bold;"&gt;kode&lt;/span&gt; dan &lt;span style="font-weight:bold;"&gt;nama_wilayah&lt;/span&gt;:&lt;pre&gt;CREATE TABLE wilayah (&lt;br /&gt;   kode char(10) NOT NULL default '',&lt;br /&gt;   nama_wilayah char(100) NOT NULL default '',&lt;br /&gt;   PRIMARY KEY (kode)&lt;br /&gt;);&lt;/pre&gt;Kemudian kita isi dengan data contoh:&lt;pre&gt;INSERT INTO wilayah VALUES ('3400000000','D I YOGYAKARTA');&lt;br /&gt;INSERT INTO wilayah VALUES ('3401000000','KULON PROGO');&lt;br /&gt;INSERT INTO wilayah VALUES ('3401010000','TEMON');&lt;br /&gt;INSERT INTO wilayah VALUES ('3401010001','JANGKARAN');&lt;br /&gt;INSERT INTO wilayah VALUES ('3401010002','SINDUTAN');&lt;br /&gt;INSERT INTO wilayah VALUES ('3401010003','PALIHAN');&lt;br /&gt;INSERT INTO wilayah VALUES ('3401010004','GLAGAH');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403000000','GUNUNG KIDUL');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403011000','PURWOSARI');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403011001','GIRIJATI');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403011002','GIRIASIH');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403011003','GIRICAHYO');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403011004','GIRIPURWO');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403011005','GIRITIRTO');&lt;br /&gt;INSERT INTO wilayah VALUES ('3403020000','PALIYAN');&lt;br /&gt;INSERT INTO wilayah VALUES ('3100000000','DKI JAKARTA');&lt;br /&gt;INSERT INTO wilayah VALUES ('3171000000','JAKARTA SELATAN');&lt;br /&gt;INSERT INTO wilayah VALUES ('3171010000','JAGAKARSA');&lt;br /&gt;INSERT INTO wilayah VALUES ('3171010001','CIPEDAK');&lt;br /&gt;INSERT INTO wilayah VALUES ('3171010002','SRENGSENG SAWAH');&lt;br /&gt;INSERT INTO wilayah VALUES ('3171010003','CIGANJUR');&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;QUERY&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Selanjutnya akan kita lakukan test untuk mengetahui apakah desain tabel yang sederhana tersebut sudah cukup mampu mengakomodasi kebutuhan informasi kita.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Tampilkan propinsi:&lt;/span&gt;&lt;pre&gt;SELECT * FROM wilayah&lt;br /&gt;   WHERE kode LIKE '__00000000';&lt;/pre&gt;hasilnya:&lt;pre&gt;+------------+----------------+&lt;br /&gt;| kode       | nama_wilayah   |&lt;br /&gt;+------------+----------------+&lt;br /&gt;| 3400000000 | D I YOGYAKARTA | &lt;br /&gt;| 3100000000 | DKI JAKARTA    | &lt;br /&gt;+------------+----------------+&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;2. Tampilkan kota/kabupaten saja:&lt;/span&gt;&lt;pre&gt;SELECT * FROM wilayah&lt;br /&gt;   WHERE kode LIKE '____000000'&lt;br /&gt;   AND kode NOT LIKE '__00000000';&lt;/pre&gt;hasilnya:&lt;pre&gt;+------------+-----------------+&lt;br /&gt;| kode       | nama_wilayah    |&lt;br /&gt;+------------+-----------------+&lt;br /&gt;| 3401000000 | KULON PROGO     | &lt;br /&gt;| 3403000000 | GUNUNG KIDUL    | &lt;br /&gt;| 3171000000 | JAKARTA SELATAN | &lt;br /&gt;+------------+-----------------+&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;3. Tampilkan kecamatan saja:&lt;/span&gt;&lt;pre&gt;SELECT * FROM wilayah&lt;br /&gt;   WHERE kode LIKE '_______000'&lt;br /&gt;   AND kode NOT LIKE '____000000';&lt;/pre&gt;hasilnya:&lt;pre&gt;+------------+--------------+&lt;br /&gt;| kode       | nama_wilayah |&lt;br /&gt;+------------+--------------+&lt;br /&gt;| 3401010000 | TEMON        | &lt;br /&gt;| 3403011000 | PURWOSARI    | &lt;br /&gt;| 3403020000 | PALIYAN      | &lt;br /&gt;| 3171010000 | JAGAKARSA    | &lt;br /&gt;+------------+--------------+&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;4. Tampilkan desa/kelurahan saja:&lt;/span&gt;&lt;pre&gt;SELECT * FROM wilayah&lt;br /&gt;   WHERE kode NOT LIKE '0';&lt;/pre&gt;hasilnya:&lt;pre&gt;+------------+-----------------+&lt;br /&gt;| kode       | nama_wilayah    |&lt;br /&gt;+------------+-----------------+&lt;br /&gt;| 3401010001 | JANGKARAN       | &lt;br /&gt;| 3401010002 | SINDUTAN        | &lt;br /&gt;| 3401010003 | PALIHAN         | &lt;br /&gt;| 3401010004 | GLAGAH          | &lt;br /&gt;| 3403011001 | GIRIJATI        | &lt;br /&gt;| 3403011002 | GIRIASIH        | &lt;br /&gt;| 3403011003 | GIRICAHYO       | &lt;br /&gt;| 3403011004 | GIRIPURWO       | &lt;br /&gt;| 3403011005 | GIRITIRTO       | &lt;br /&gt;| 3171010001 | CIPEDAK         | &lt;br /&gt;| 3171010002 | SRENGSENG SAWAH | &lt;br /&gt;| 3171010003 | CIGANJUR        | &lt;br /&gt;+------------+-----------------+&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;5. Tampilkan desa/kelurahan yang berada di kecamatan JAGAKARSA saja:&lt;/span&gt;&lt;pre&gt;SELECT * FROM wilayah&lt;br /&gt;   WHERE kode LIKE '3171010%'&lt;br /&gt;   AND kode NOT LIKE '0';&lt;/pre&gt;hasilnya:&lt;pre&gt;+------------+-----------------+&lt;br /&gt;| kode       | nama_wilayah    |&lt;br /&gt;+------------+-----------------+&lt;br /&gt;| 3171010001 | CIPEDAK         | &lt;br /&gt;| 3171010002 | SRENGSENG SAWAH | &lt;br /&gt;| 3171010003 | CIGANJUR        | &lt;br /&gt;+------------+-----------------+&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;6. Berapa jumlah kelurahan di propinsi D I YOGYAKARTA:&lt;/span&gt;&lt;pre&gt;SELECT COUNT(*) FROM wilayah&lt;br /&gt;   WHERE kode LIKE '34%'&lt;br /&gt;   AND kode NOT LIKE '0';&lt;/pre&gt;hasilnya:&lt;pre&gt;+----------+&lt;br /&gt;| COUNT(*) |&lt;br /&gt;+----------+&lt;br /&gt;|        9 | &lt;br /&gt;+----------+&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;APLIKASI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sudah tergambar idenya? Kami kira tidak terlalu sulit bagaimana aplikasi praktisnya. Kita ambil contoh sebuah metode sederhana survei kasus-kasus penyakit x, dengan cukup menggunakan satu tabel untuk data kasus dengan struktur sebagai berikut:&lt;br /&gt;&lt;pre&gt;+--------------+----------+&lt;br /&gt;| Field        | Type     |&lt;br /&gt;+--------------+----------+&lt;br /&gt;| kasus_no     | int(10)  | &lt;&lt; nomor kasus&lt;br /&gt;| kode         | char(10) | &lt;&lt; kode wilayah&lt;br /&gt;+--------------+----------+&lt;/pre&gt;Berikut ini perintah untuk membuat tabel dan sekaligus mengisinya dengan contoh datanya:&lt;pre&gt;CREATE TABLE kasus (&lt;br /&gt;   kasus_no int(10) unsigned NOT NULL default '0',&lt;br /&gt;   kode char(10) NOT NULL default '',&lt;br /&gt;   PRIMARY KEY (kasus_no)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO kasus VALUES(1,'3171010003');&lt;br /&gt;INSERT INTO kasus VALUES(2,'3171010002');&lt;br /&gt;INSERT INTO kasus VALUES(3,'3171010001');&lt;br /&gt;INSERT INTO kasus VALUES(4,'3403011005');&lt;br /&gt;INSERT INTO kasus VALUES(5,'3403011004');&lt;br /&gt;INSERT INTO kasus VALUES(6,'3403011005');&lt;br /&gt;INSERT INTO kasus VALUES(7,'3403011003');&lt;br /&gt;INSERT INTO kasus VALUES(8,'3401010004');&lt;br /&gt;INSERT INTO kasus VALUES(9,'3171010003');&lt;br /&gt;INSERT INTO kasus VALUES(10,'3403011003');&lt;br /&gt;INSERT INTO kasus VALUES(11,'3403011005');&lt;br /&gt;INSERT INTO kasus VALUES(12,'3171010003');&lt;br /&gt;INSERT INTO kasus VALUES(13,'3401010004');&lt;br /&gt;INSERT INTO kasus VALUES(14,'3401010003');&lt;br /&gt;INSERT INTO kasus VALUES(15,'3401010001');&lt;br /&gt;INSERT INTO kasus VALUES(16,'3401010002');&lt;br /&gt;INSERT INTO kasus VALUES(17,'3401010003');&lt;br /&gt;INSERT INTO kasus VALUES(18,'3171010001');&lt;br /&gt;INSERT INTO kasus VALUES(19,'3401010003');&lt;br /&gt;INSERT INTO kasus VALUES(20,'3171010003');&lt;/pre&gt;Lalu segera kita coba hasilnya dengan query berikut:&lt;pre&gt;SELECT b.nama_wilayah as 'Wilayah',&lt;br /&gt;       COUNT(a.kasus_no) as 'Jumlah Kasus'&lt;br /&gt;   FROM kasus a&lt;br /&gt;   LEFT JOIN wilayah b USING(kode)&lt;br /&gt;   GROUP BY a.kode ORDER BY a.kode;&lt;/pre&gt;hasilnya:&lt;pre&gt;+-----------------+--------------+&lt;br /&gt;| Wilayah         | Jumlah Kasus |&lt;br /&gt;+-----------------+--------------+&lt;br /&gt;| CIPEDAK         |            2 |&lt;br /&gt;| SRENGSENG SAWAH |            1 | &lt;br /&gt;| CIGANJUR        |            4 | &lt;br /&gt;| JANGKARAN       |            1 | &lt;br /&gt;| SINDUTAN        |            1 | &lt;br /&gt;| PALIHAN         |            3 | &lt;br /&gt;| GLAGAH          |            2 | &lt;br /&gt;| GIRICAHYO       |            2 | &lt;br /&gt;| GIRIPURWO       |            1 | &lt;br /&gt;| GIRITIRTO       |            3 | &lt;br /&gt;+-----------------+--------------+&lt;/pre&gt;Kita coba lagi dengan query yang lain:&lt;pre&gt;SELECT b.nama_wilayah as Wilayah,&lt;br /&gt;       COUNT(a.kasus_no) as 'Jumlah Kasus'&lt;br /&gt;   FROM kasus a&lt;br /&gt;   LEFT JOIN wilayah b&lt;br /&gt;      ON b.kode = CONCAT(SUBSTRING(a.kode,1,2),'00000000')&lt;br /&gt;   GROUP BY b.kode&lt;br /&gt;   ORDER BY b.kode;&lt;/pre&gt;hasilnya:&lt;pre&gt;+----------------+--------------+&lt;br /&gt;| Wilayah        | Jumlah Kasus |&lt;br /&gt;+----------------+--------------+&lt;br /&gt;| DKI JAKARTA    |            7 | &lt;br /&gt;| D I YOGYAKARTA |           13 | &lt;br /&gt;+----------------+--------------+&lt;/pre&gt;Selanjutnya terserah Anda. Tentunya akan lebih menarik lagi jika struktur tabel kasus tersebut dilengkapi dengan atribut lain misalnya: waktu, jenis kelamin, usia, dll. Okay, sekian dan enjoy ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-2477875195175325117?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/2477875195175325117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=2477875195175325117' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/2477875195175325117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/2477875195175325117'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/11/implementasi-kode-wilayah.html' title='Implementasi Kode Wilayah'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-7339019513472895979</id><published>2006-12-17T05:17:00.000+07:00</published><updated>2006-12-17T10:07:36.039+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>INDEX</title><content type='html'>Setiap orang yang menggeluti SQL pasti akan bertemu dengan INDEX. Apa dan bagaimana yang dimaksud dengan INDEX? Dari hasil googling dengan keyword &lt;span style="font-weight:bold;"&gt;"define:index"&lt;/span&gt; (tanpa tanda petik) akan langsung ketemu banyak definisi dari INDEX yang tersebar di internet (catatan: &lt;span style="font-weight:bold;"&gt;"define:"&lt;/span&gt; adalah kata kunci spesial yang dapat digunakan untuk mencari berbagai definisi menggunakan &lt;a href='http://google.com'&gt;google&lt;/a&gt;), namun dari hasil yang banyak tersebut saya memilih definisi yang berikut ini:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;A special database object that lets you quickly locate particular records based on key column values. Indexes are essential for good database performance.&lt;/span&gt;&lt;br /&gt;&lt;a href='http://www.orafaq.com/glossary/faqglosi.htm'&gt;www.orafaq.com/glossary/faqglosi.htm&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;Ada 3 cara untuk membuat INDEX didalam database MySQL:&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Pada saat CREATE TABLE&lt;/span&gt;&lt;br /&gt;Kita dapat langsung menyisipkan syntax untuk membuat index, misalnya:&lt;pre&gt;CREATE TABLE person (&lt;br /&gt;   nomor_id int(10) unsigned NOT NULL default '0',&lt;br /&gt;   nama char(100) NOT NULL default '',&lt;br /&gt;   INDEX nomor_id_idx (nomor_id)&lt;br /&gt;);&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Dengan perintah CREATE INDEX&lt;/span&gt;&lt;br /&gt;Dengan cara ini, tabel pada mulanya di-CREATE tanpa INDEX, kemudian index dibuat belakangan dengan perintah CREATE INDEX:&lt;pre&gt;CREATE INDEX nomor_id_idx ON person (nomor_id);&lt;/pre&gt;Syntax-nya secara empiris dapat ditulis:&lt;pre&gt;CREATE INDEX nama_index ON nama_tabel (nama_kolom, ...);&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Dengan perintah ALTER TABLE&lt;/span&gt;&lt;br /&gt;Hampir mirip dengan CREATE INDEX, index ini dibuat belakangan, dengan perintah:&lt;pre&gt;ALTER TABLE person ADD INDEX nomor_id_idx (nomor_id);&lt;/pre&gt;Dan bentuk empirisnya:&lt;pre&gt;ALTER TABLE nama_tabel ADD INDEX nama_index (nama_kolom, ...);&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;Dari ketiga cara di atas, terserah kepada kita untuk menggunakan yang mana, semuanya sama saja.&lt;br /&gt;&lt;br /&gt;Sedangkan untuk menghapus index menggunakan perintah:&lt;pre&gt;ALTER TABLE nama_tabel DROP INDEX nama_index;&lt;/pre&gt;&lt;br /&gt;Setelah index dibuat, lalu bagaimana cara menggunakannya? Penggunaan index didalam query biasanya terjadi secara otomatis oleh database engine-nya, namun otomatisasi tersebut dapat kita arahkan atau kendalikan, yaitu dengan panduan atau patokan sebagai berikut: Yaitu index akan digunakan:&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Pada klausa WHERE&lt;/span&gt;&lt;br /&gt;Maka kemungkinan kita perlu untuk membuat index pada setiap kolom yang tersebut didalam klausa WHERE. Misalnya:&lt;pre&gt;SELECT * FROM person WHERE nama = 'John';&lt;/pre&gt;Jika jumlah record hanya sedikit, INDEX tidak begitu berpengaruh. Namun jika record sudah mencapai puluhan ribu bahkan ratusan ribu, maka kita perlu membuat INDEX untuk kolom nama:&lt;pre&gt;CREATE INDEX nama_idx ON person (nama(10));&lt;/pre&gt;Perintah diatas akan membuat index untuk kolom nama namun hanya menggunakan 10 karakter pertama saja. Dengan hanya 10 karakter saja, index menjadi lebih ramping dan dapat diakses lebih cepat. Teknik ini cukup optimal dibandingkan dengan membuat index seluruh panjang data kolom (100 karakter) yang mengakibatkan ukuran index menjadi sangat besar dan lambat. Namun untuk mengetahui ukuran optimalnya, apakah 10 atau 15 atau 50 karakter yang akan di-index, kita harus melihat karakteristik datanya, misalnya untuk nama orang - 10 karakter sudah cukup menjadi pembeda.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Pada klausa JOIN:&lt;/span&gt;&lt;pre&gt;SELECT a.id_pasien,b.nama&lt;br /&gt;FROM pasien a&lt;br /&gt;LEFT JOIN person b ON b.nomor_id = a.nomor_id&lt;/pre&gt;Maka kita perlu membuat index untuk kolom nomor_id pada tabel person (sudah kita buat untuk contoh awal). Mengapa yang perlu dibuat adalah index untuk kolom nomor_id pada tabel person, bukan pada tabel pasien? Karena pencarian berdasarkan kolom nomor_id hanya akan dilakukan pada tabel person saja, dan pencarian inilah yang akan menggunakan index (jika ada).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Pada klausa ORDER BY&lt;/span&gt;&lt;pre&gt;SELECT * FROM person ORDER BY nama;&lt;/pre&gt;Query tersebut akan mengurutkan hasil query berdasarkan nama. Sedangkan sifat alamiah dari index ialah berurutan, maka query tersebut akan sangat terbantu jika sudah ada index pada kolom tersebut.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Pada klausa GROUP BY&lt;/span&gt;&lt;pre&gt;SELECT COUNT(*) FROM person GROUP BY usia;&lt;/pre&gt;Hampir sama dengan ORDER BY, jika ada index pada kolom usia, maka proses query akan menggunakannya.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Dengan memahami karakteristik tersebut diatas maka barulah kita dapat merancang query yang optimal dan efisien. Terutama saya, pada query dengan JOIN, kadang kala saya lupa untuk membuat index, setelah query bertambah rumit baru dirasa lambat sekali. Kemudian setelah dibuat index untuk semua kolom yang tersebut didalam klausa JOIN, barulah query dapat selesai dalam waktu sekejap.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-7339019513472895979?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/7339019513472895979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=7339019513472895979' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/7339019513472895979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/7339019513472895979'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/12/index.html' title='INDEX'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-4211284519320900577</id><published>2006-11-21T18:45:00.000+07:00</published><updated>2006-11-25T09:16:18.998+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>Query dengan JOIN</title><content type='html'>Untuk apa kita perlu query join? Query join berfungsi untuk menggabungkan beberapa tabel menjadi sebuah tabel gabungan. Teknik menggabung tersebut adalah keunggulan dari basis data relasional (&lt;a href="http://en.wikipedia.org/wiki/RDBMS"&gt;RDBMS&lt;/a&gt;: Relational Database Management System), dimana data dapat disimpan dalam beberapa tabel kecil yang terpisah, bukannya satu tabel besar dengan banyak kolom. Pada dunia nyata pemrograman, query join sangat banyak dan hampir selalu digunakan, karena dengan itu sebenarnya kunci pengolahan data dengan SQL dan dari situ dapat dihasilkan informasi-informasi yang lebih bermakna dibandingkan dengan query satu tabel saja.&lt;br /&gt;&lt;br /&gt;Cara kerja join ialah dengan mencari kecocokan kolom tertentu pada sebuah tabel dengan kolom tertentu pada tabel lain, kemudian menampilkan hasilnya sebagai satu set data gabungan. Secara garis besar, terdapat 3 macam join, yaitu INNER JOIN, LEFT JOIN dan RIGHT JOIN. Namun, selain dari 3 macam tersebut, terdapat tambahan beberapa varian tergantung dari RDBMS yang digunakan.&lt;br /&gt;&lt;br /&gt;Sebagai contoh, kita akan men-join tabel pasien yang menyimpan informasi biodata pasien-pasien, dengan tabel symptom yang menyimpan data-data symptom yang diderita oleh pasien. Kedua tabel tersebut akan di-join berdasarkan kolom yang berisi nomor identitas pasien (id) yang terdapat pada kedua tabel.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE TABLE pasien (id int(10), nama char(30));&lt;br /&gt;INSERT INTO pasien (id,nama) VALUES ('1','John');&lt;br /&gt;INSERT INTO pasien (id,nama) VALUES ('2','Jane');&lt;br /&gt;INSERT INTO pasien (id,nama) VALUES ('3','Mike');&lt;br /&gt;INSERT INTO pasien (id,nama) VALUES ('4','Doel');&lt;br /&gt;&lt;br /&gt;CREATE TABLE symptom (id int(10), symptom char(30));&lt;br /&gt;INSERT INTO symptom (id,symptom) VALUES ('1','Demam');&lt;br /&gt;INSERT INTO symptom (id,symptom) VALUES ('2','Pusing');&lt;br /&gt;INSERT INTO symptom (id,symptom) VALUES ('3','Mual');&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;INNER JOIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dengan INNER JOIN &lt;span style="font-weight:bold;"&gt;hanya&lt;/span&gt; akan ditampilkan baris-baris yang satu sama lain memiliki kecocokan.&lt;br /&gt;&lt;br /&gt;Contoh:&lt;pre&gt;SELECT a.nama, b.symptom&lt;br /&gt;FROM pasien a &lt;br /&gt;INNER JOIN symptom b&lt;br /&gt;ON b.id = a.id;&lt;br /&gt;+------+---------+&lt;br /&gt;| nama | symptom |&lt;br /&gt;+------+---------+&lt;br /&gt;| John | Demam   | &lt;br /&gt;| Jane | Pusing  | &lt;br /&gt;| Mike | Mual    | &lt;br /&gt;+------+---------+&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;LEFT JOIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sebuah query dengan LEFT JOIN akan menampilkan &lt;span style="font-weight:bold;"&gt;semua baris&lt;/span&gt; dari tabel sebelah kiri (pertama/utama atau pasien) dengan gabungan dari tabel sebelah kanan (kedua atau symptom).&lt;br /&gt;&lt;br /&gt;Contoh:&lt;pre&gt;SELECT a.nama, b.symptom&lt;br /&gt;FROM pasien a&lt;br /&gt;LEFT JOIN symptom b&lt;br /&gt;ON b.id = a.id;&lt;br /&gt;+------+---------+&lt;br /&gt;| nama | symptom |&lt;br /&gt;+------+---------+&lt;br /&gt;| John | Demam   | &lt;br /&gt;| Jane | Pusing  | &lt;br /&gt;| Mike | Mual    | &lt;br /&gt;| Doel | NULL    | &lt;br /&gt;+------+---------+&lt;/pre&gt;Perbedaannya dengan INNER JOIN ialah, pada LEFT JOIN - seluruh baris dari tabel pertama akan ditampilkan meskipun tidak ada kecocokan baris pada tabel kedua. Lihat contoh diatas, pasien Doel tidak memiliki data symptom sehingga tertampil NULL (NULL disini menyatakan bahwa tidak ada data pada kolom tersebut). Selain itu, posisi tabel jadi mempunyai makna, yaitu tabel kiri atau pertama (ialah tabel sebelum 'LEFT JOIN') akan menjadi tabel utama yang diquery terlebih dahulu, baru kemudian dicarikan kecocokannya dengan tabel kanan atau kedua (ialah tabel setelah 'LEFT JOIN').&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RIGHT JOIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Query RIGHT JOIN hampir sama dengan LEFT JOIN, hanya saja posisinya terbalik, yaitu akan menampilkan semua baris dari tabel kanan (kedua) meskipun tidak ada kecocokan pada tabel kiri (pertama).&lt;br /&gt;&lt;br /&gt;Contoh:&lt;pre&gt;SELECT a.nama, b.symptom&lt;br /&gt;FROM pasien a&lt;br /&gt;RIGHT JOIN symptom b&lt;br /&gt;ON b.id = a.id;&lt;br /&gt;+------+---------+&lt;br /&gt;| nama | symptom |&lt;br /&gt;+------+---------+&lt;br /&gt;| John | Demam   | &lt;br /&gt;| Jane | Pusing  | &lt;br /&gt;| Mike | Mual    | &lt;br /&gt;+------+---------+&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; border:1px solid #777777; background-color:#ffffcc;"&gt;&lt;span style="font-weight:bold;"&gt;Tips dan Pengalaman Pribadi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jika ada yang bertanya dengan sebuah kasus, harus menggunakan join yang mana? Maka kita perlu melihat keperluan terlebih dahulu, selain itu optimasi juga perlu menjadi pertimbangan, intinya ialah ketiga macam join dapat digunakan. Namun, saya pribadi paling sering menggunakan LEFT JOIN dibanding jenis JOIN yang lain. Alasan saya ialah, query LEFT JOIN lebih fleksibel dan lebih mudah dioptimasi. Mari kita ambil contoh query dengan INNER JOIN diatas, dapat juga dihasilkan dengan query LEFT JOIN, dengan menambahkan klausa WHERE:&lt;pre&gt;SELECT a.nama, b.symptom&lt;br /&gt;FROM pasien a&lt;br /&gt;LEFT JOIN symptom b&lt;br /&gt;ON b.id = a.id&lt;br /&gt;WHERE b.symptom IS NOT NULL;&lt;/pre&gt;Atau pun query RIGHT JOIN diatas dihasilkan dengan model LEFT JOIN, hanya dengan membalik urutan tabel:&lt;pre&gt;SELECT a.nama, b.symptom&lt;br /&gt;FROM symptom b&lt;br /&gt;LEFT JOIN pasien a&lt;br /&gt;ON b.id = a.id;&lt;/pre&gt;Kemudian salah satu pertimbangan kecenderungan saya menggunakan LEFT JOIN ialah untuk optimasi. Contoh, misalnya kita dihadapkan pada tabel pasien dan tabel symptom, jika ada pertanyaan untuk menampilkan pasien dengan sebuah symptom tertentu, misalnya demam, maka saya akan menempatkan tabel symptom sebagai tabel utama, baru kemudian tabel pasien sebagai tabel kedua:&lt;pre&gt;SELECT a.id,b.nama&lt;br /&gt;FROM symptom a&lt;br /&gt;LEFT JOIN pasien b&lt;br /&gt;ON b.id = a.id&lt;br /&gt;WHERE a.symptom = 'Demam';&lt;/pre&gt;Bagaimana query tersebut lebih optimal? Penjelasannya begini: query tersebut akan mencari record-record dari tabel symptom yang memenuhi kriteria symptom = 'Demam', hal ini akan menghindari &lt;span style="font-style:italic;"&gt;full table scan&lt;/span&gt; (dengan catatan jika ada indeks berdasarkan symptom), selanjutnya akan dicari padanan id di tabel pasien. Sebagai catatan: &lt;span style="font-style:italic;"&gt;full tabel scan&lt;/span&gt; akan memakan sumber daya memori dan tenaga proses di CPU, membuat query menjadi sangat lambat terutama jika tabel memiliki jutaan record. Mengenai indeks pada tabel akan saya jelaskan pada kesempatan lain. &lt;br /&gt;&lt;br /&gt;Lalu bagaimana dengan RIGHT JOIN? Sebenarnya RIGHT JOIN dapat pula didayagunakan seperti LEFT JOIN, hanya masalah kebiasaan saja. Kadang-kadang saya juga menggunakan RIGHT JOIN untuk kasus tertentu demi alasan code readability atau simplicity.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-4211284519320900577?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/4211284519320900577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=4211284519320900577' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/4211284519320900577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/4211284519320900577'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/11/query-dengan-join.html' title='Query dengan JOIN'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-8196864661379533998</id><published>2006-09-26T03:55:00.001+07:00</published><updated>2006-09-26T03:55:56.371+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>Tutorial SQL Bagian 4</title><content type='html'>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:&lt;pre&gt;DELETE FROM pasien WHERE kelamin = 'L';&lt;/pre&gt;maksudnya: &lt;span style="font-style:italic;"&gt;hapuslah record-record pada tabel pasien yang mempunyai atribut kelamin = 'L' alias laki-laki.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Atau perintah:&lt;pre&gt;DELETE FROM pasien;&lt;/pre&gt;maksudnya: &lt;span style="font-style:italic;"&gt;hapuslah semua record pada tabel pasien.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ffcccc; border:1px solid #777777;font-size:0.9em;"&gt;Sebaiknya statement DELETE tidak dicoba dahulu karena data yang ada masih akan dibutuhkan untuk materi tutorial selanjutnya. Selain itu juga perlu dicatat, bahwa perintah DELETE tidak bisa di-undo atau dikembalikan, karena menilik dari &lt;span style="font-style:italic;"&gt;nature&lt;/span&gt;-nya bahwa database ada pada tingkat bawah (low level) atau dasar dari aplikasi yang lebih kompleks, maka fasilitas undo adalah tanggung jawab programmer aplikasi.&lt;/div&gt;&lt;br /&gt;Kita akan melanjutkan mengenai formulir laporan suspect flu burung (lihat &lt;a href="http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-3.html"&gt;Tutorial SQL Bagian 3&lt;/a&gt;, &lt;span style="font-style:italic;"&gt;Case Report Form&lt;/span&gt;). Formulir tersebut akan diwajibkan untuk diisi dengan data dari pasien yang memiliki salah satu atau lebih gejala/tanda berikut:&lt;ul&gt;&lt;li&gt;suhu tinggi&lt;/li&gt;&lt;li&gt;batuk&lt;/li&gt;&lt;li&gt;radang tenggorok&lt;/li&gt;&lt;li&gt;nafas tersengal&lt;/li&gt;&lt;li&gt;paparan langsung dengan unggas&lt;/li&gt;&lt;li&gt;paparan wilayah bekas tempat pemeliharaan unggas&lt;/li&gt;&lt;/ul&gt;Setelah formulir diisi lengkap, selanjutnya dimasukkan kedalam database (proses ini sering disebut &lt;span style="font-style:italic;"&gt;data entry&lt;/span&gt;). Pada praktek sesungguhnya untuk memasukkan data kedalam database biasanya digunakan aplikasi yang dibuat khusus untuk memasukkan data dalam jumlah banyak dengan cepat. Setelah data dianggap cukup banyak, baru kita bisa menggali informasi darinya. Tahap penggalian informasi ini adalah tahap yang sangat menarik dan merupakan tahap terakhir dari sebuah &lt;span style="font-style:italic;"&gt;surveillance&lt;/span&gt;. Metode penggalian lebih menarik jika dimulai dengan membuat sebuah pertanyaan, baru kemudian kita berpikir untuk menghasilkan query yang tepat untuk dapat menjawab pertanyaan itu. Mari kita coba pertanyaan-pertanyaan berikut ini:&lt;br /&gt;&lt;br /&gt;Pertama, &lt;span style="font-weight:bold;"&gt;kita akan mencari tahu berapa pasien yang memenuhi beberapa kriteria gejala&lt;/span&gt;, misalnya memiliki jawaban Ya pada gejala: suhu tinggi, batuk, radang tenggorok dan nafas tersengal.&lt;pre&gt;SELECT COUNT(*) as 'jumlah kasus' FROM pasien&lt;br /&gt;   WHERE suhu_tinggi = 'a' &lt;br /&gt;   AND batuk = 'a'&lt;br /&gt;   AND radang_tenggorok = 'a'&lt;br /&gt;   AND nafas_tersengal = 'a';&lt;/pre&gt;hasilnya:&lt;pre&gt;+--------------+&lt;br /&gt;| jumlah kasus |&lt;br /&gt;+--------------+&lt;br /&gt;|            1 |&lt;br /&gt;+--------------+&lt;/pre&gt;Berikutnya, &lt;span style="font-weight:bold;"&gt;berapa kasus yang mengalami kematian?&lt;/span&gt;&lt;pre&gt;SELECT COUNT(*) FROM pasien WHERE status_keluar = 'b';&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;Bagaimana penyebaran wilayah untuk kasus yang mengalami paparan langsung?&lt;/span&gt;&lt;pre&gt;SELECT b.nama_wilayah,COUNT(*) as 'jumlah kasus'&lt;br /&gt;   FROM pasien a&lt;br /&gt;   LEFT JOIN wilayah b USING(kode_wilayah)&lt;br /&gt;   WHERE a.paparan_langsung = 'a'&lt;br /&gt;   GROUP BY b.kode_wilayah;&lt;/pre&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Pada query diatas terdapat kata USING. Kita dapat menggunakan USING dalam JOIN jika nama kolom antara kedua tabel sama persis. Pada contoh tersebut, kolom kode_wilayah pada tabel pasien sama persis dengan kolom kode_wilayah pada tabel wilayah, sehingga penulisan perintahnya menjadi lebih sederhana dan mudah dipahami. Kemudahan tersebut seyogyanya dapat menjadi salah satu pertimbangan dalam desain-desain tabel selanjutnya.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dimana dan berapa terjadi kasus kematian?&lt;/span&gt;&lt;pre&gt;SELECT b.nama_wilayah,COUNT(*) as 'jumlah kasus'&lt;br /&gt;   FROM pasien a&lt;br /&gt;   LEFT JOIN wilayah b USING(kode_wilayah)&lt;br /&gt;   WHERE a.status_keluar = 'b'&lt;br /&gt;   GROUP BY b.kode_wilayah;&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;Berapa kasus yang terjadi pada bulan September 2006?&lt;/span&gt;&lt;pre&gt;SELECT COUNT(*) as 'jumlah kasus'&lt;br /&gt;   FROM pasien&lt;br /&gt;   WHERE DATE(gejala_dttm) &gt;= '2006-09-01'&lt;br /&gt;   AND DATE(gejala_dttm) &lt;= '2006-09-30';&lt;/pre&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Ada yang baru yaitu fungsi DATE(). Fungsi ini gunanya untuk mengekstrak informasi tanggal dari sebuah field atau input. Sebenarnya gejala_dttm adalah bertipe DATETIME, maka isinya adalah tanggal dan jam, sementara kita hanya memerlukan informasi tanggalnya saja untuk dijadikan operand dalam WHERE criteria.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Misalkan umur dibagi 2 segmen yaitu usia 30 tahun keatas dan usia dibawah 30 tahun, maka segmen mana yang memiliki jumlah kasus terbanyak?&lt;/span&gt;&lt;pre&gt;SELECT COUNT(*) FROM pasien WHERE umur &gt;= 30;&lt;br /&gt;SELECT COUNT(*) FROM pasien WHERE umur &lt; 30;&lt;/pre&gt;Atau dengan cara:&lt;pre&gt;(SELECT 'segmen 1',&lt;br /&gt;        COUNT(*) as 'jumlah kasus'&lt;br /&gt;     FROM pasien WHERE umur &gt;= 30)&lt;br /&gt;  UNION&lt;br /&gt;(SELECT 'segmen 2',&lt;br /&gt;        COUNT(*) as 'jumlah kasus'&lt;br /&gt;     FROM pasien WHERE umur &lt; 30)&lt;br /&gt;  ORDER BY 'jumlah kasus' DESC;&lt;/pre&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Ada kalanya kita tidak mungkin menjawab sebuah pertanyaan dengan satu query, maka solusinya dengan membuat beberapa query yang terpisah atau dapat digabung hasilnya dengan operator UNION. Perlu diperhatikan bahwa UNION mengharuskan jumlah kolom dan tipe kolom adalah sama antara kedua query yang digabung.&lt;br /&gt;&lt;br /&gt;Format untuk UNION adalah: (SELECT ...) UNION (SELECT ...).&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Manakah gejala yang mungkin menjadi penyebab utama kematian?&lt;/span&gt;&lt;pre&gt;Ups!!&lt;/pre&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dan seterusnya.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Masih banyak pertanyaan yang mungkin untuk diajukan. Kaitannya dengan misi utama sebuah &lt;span style="font-style:italic;"&gt;surveillance&lt;/span&gt;, 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.&lt;br /&gt;&lt;br /&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; border:1px solid #777777; background-color:#ffffcc;"&gt;&lt;span style="font-weight:bold;"&gt;Tips:&lt;/span&gt; untuk menguasai sebuah bahasa pemrograman, apakah itu C/C++, Javascript, dll, termasuk SQL, saya pribadi memiliki sebuah cara khusus, yaitu dengan sering meng-analisa contoh program. Cara ini bagi saya sangat efektif dan cepat, cukup dengan duduk beberapa jam saja. Banyak contoh program yang tersebar di internet dan bisa dilihat &lt;span style="font-style:italic;"&gt;query SQL&lt;/span&gt;-nya. Selain contoh program, kita juga bisa menemukan contoh query di milis-milis yang berhubungan dengan database yang menggunakan SQL, misalnya Oracle, MySQL, Ms SQL, dll. Sedangkan metode analisa yang saya gunakan ialah dengan memecah query menjadi bagian-bagian frase terkecil untuk di-peta-kan didalam pikiran. Contoh:&lt;pre&gt;SELECT a.nama,b.nama_wilayah&lt;br /&gt;   FROM pasien a&lt;br /&gt;   LEFT JOIN wilayah b USING(kode_wilayah)&lt;br /&gt;   ORDER BY a.nama,b.nama_wilayah;&lt;/pre&gt;Akan saya baca (peta-kan):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. SELECT:&lt;/span&gt; adalah perintah untuk mengambil data (&lt;span style="font-style:italic;"&gt;select the data&lt;/span&gt;, jika kita analogikan dalam bahasa Inggris).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. a.nama:&lt;/span&gt; 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').&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. b.nama_wilayah:&lt;/span&gt; ini adalah kolom 'nama_wilayah' dari tabel alias 'b', yaitu tabel 'wilayah' (lihat aliasnya di bagian JOIN).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. FROM pasien a:&lt;/span&gt; artinya SELECT ini akan diambil data dari tabel 'pasien' dan kita beri alias 'a'.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. LEFT JOIN wilayah b USING(kode_wilayah):&lt;/span&gt; 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'.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. ORDER BY a.nama,b.nama_wilayah:&lt;/span&gt; maksudnya ialah, urutkan (order) hasil query berdasarkan urutan 'a.nama', kemudian urutan 'b.nama_wilayah'.&lt;br /&gt;&lt;br /&gt;Query tersebut sama hasilnya dengan (perhatikan perbedaannya):&lt;pre&gt;SELECT pasien.nama,wilayah.nama_wilayah&lt;br /&gt;   FROM pasien&lt;br /&gt;   LEFT JOIN wilayah USING(kode_wilayah)&lt;br /&gt;   ORDER BY pasien.nama, wilayah.nama_wilayah;&lt;/pre&gt;sama dengan:&lt;pre&gt;SELECT pasien.nama,wilayah.nama_wilayah&lt;br /&gt;   FROM pasien, wilayah&lt;br /&gt;   WHERE wilayah.kode_wilayah = pasien.kode_wilayah&lt;br /&gt;   ORDER BY pasien.nama,wilayah.nama_wilayah;&lt;/pre&gt;(query yang kedua ini sering disebut STRAIGHT JOIN).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Catatan akhir:&lt;/span&gt; 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.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sekian.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-8196864661379533998?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/8196864661379533998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=8196864661379533998' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/8196864661379533998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/8196864661379533998'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-4.html' title='Tutorial SQL Bagian 4'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-1792587370482401831</id><published>2006-09-22T02:56:00.000+07:00</published><updated>2006-11-01T06:43:19.078+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>Tutorial SQL Bagian 3</title><content type='html'>&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Sebelum melanjutkan tutorial ini, sangat dianjurkan untuk menggunakan aplikasi database yang lebih serius. Kami menganjurkan untuk mendownload MySQL 5.0 beserta MySQL GUI Tools dari situs dev.mysql.com. Silakan ikuti petunjuknya, pilih yang sesuai dengan sistem operasi komputer Anda. Untuk seterusnya, perintah yang dicontohkan disini akan compatible dengan perintah MySQL.&lt;/div&gt;&lt;br /&gt;Pada tutorial SQL bagian ketiga ini kita akan melanjutkan pembuatan tabel untuk proyek surveillance of disease yang mengambil contoh kasus flu burung. Formulir dibawah ini adalah contoh &lt;span style="font-style:italic;"&gt;Case Report Form&lt;/span&gt; yang diambil dari &lt;span style="font-weight:bold;"&gt;www.hpa.org.uk&lt;/span&gt;, namun telah sangat disederhanakan supaya lebih memudahkan.&lt;br /&gt;&lt;div style='font-size:1em;padding:10px;margin:20px;border:4px solid #999999;'&gt;&lt;pre&gt;1. Sosio Demografi Pasien&lt;br /&gt;&lt;br /&gt;   a. Jenis Kelamin:&lt;br /&gt;&lt;br /&gt;      [] Laki       [] Perempuan   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;   b. Umur:                        c. Tanggal Lahir:&lt;br /&gt;&lt;br /&gt;      __ tahun __ bulan               __ - __ - ____  ( dd - mm - yyyy )&lt;br /&gt;&lt;br /&gt;   d. Alamat:&lt;br /&gt;&lt;br /&gt;      ___________________________________________________&lt;br /&gt;&lt;br /&gt;      ____________________ kota/kabupaten: ______________&lt;br /&gt;&lt;br /&gt;&lt;hr noshade='1' size='1'&gt;&lt;br /&gt;&lt;br /&gt;2. Gejala/Tanda:&lt;br /&gt;&lt;br /&gt;   a. Tanggal muncul gejala/tanda:&lt;br /&gt;&lt;br /&gt;      __ - __ - ____ ( dd - mm - yyyy )&lt;br /&gt;&lt;br /&gt;   b. Suhu tinggi, lebih dari 38 derajat celcius:&lt;br /&gt;    &lt;br /&gt;      [] Ya     [] Tidak   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;   c. Batuk:&lt;br /&gt;&lt;br /&gt;      [] Ya     [] Tidak   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;   d. Radang tenggorokan:&lt;br /&gt;&lt;br /&gt;      [] Ya     [] Tidak   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;   e. Nafas tersengal:&lt;br /&gt;&lt;br /&gt;      [] Ya     [] Tidak   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;&lt;hr noshade='1' size='1'&gt;&lt;br /&gt;&lt;br /&gt;3. Sejarah terpapar hewan/unggas:&lt;br /&gt;&lt;br /&gt;   Dalam 7 hari sebelum muncul gejala:&lt;br /&gt;&lt;br /&gt;      a. Apakah pasien pernah terpapar langsung dengan&lt;br /&gt;         hewan/unggas:&lt;br /&gt;&lt;br /&gt;         [] Ya     [] Tidak   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;      b. Pernahkah memasuki wilayah dimana hewan/unggas&lt;br /&gt;         dipiara atau pernah dipiara:&lt;br /&gt;&lt;br /&gt;         [] Ya     [] Tidak   [] Tidak diketahui&lt;br /&gt;&lt;br /&gt;&lt;hr noshade='1' size='1'&gt;&lt;br /&gt;&lt;br /&gt;4. Status Keluar&lt;br /&gt;&lt;br /&gt;   [] Sembuh    [] Meninggal  [] Tanpa tindak lanjut&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Kita akan mencoba mendesain tabel untuk item nomor 2,3 dan 4, yaitu dengan cara memodifikasi tabel pasien, menggunakan perintah ALTER TABLE. Untuk tipe data tanggal, kita menggunakan DATETIME. Sedangkan tipe data pilihan cukup menggunakan CHAR(1) saja, yang isinya satu huruf (a, b atau c) akan kita sepakati dengan a = Ya, b = Tidak dan c = tidak diketahui. Begitu pula untuk status keluar, kita sepakati dengan a = Sembuh, b = Meninggal dan c = Tanpa tindak lanjut. Maka kita modifikasi tabel dengan perintah berikut:&lt;pre&gt;ALTER TABLE pasien ADD COLUMN gejala_dttm DATETIME;&lt;br /&gt;ALTER TABLE pasien ADD COLUMN suhu_tinggi CHAR(1);&lt;br /&gt;ALTER TABLE pasien ADD COLUMN batuk CHAR(1);&lt;br /&gt;ALTER TABLE pasien ADD COLUMN radang_tenggorok CHAR(1);&lt;br /&gt;ALTER TABLE pasien ADD COLUMN nafas_tersengal CHAR(1);&lt;br /&gt;ALTER TABLE pasien ADD COLUMN paparan_langsung CHAR(1);&lt;br /&gt;ALTER TABLE pasien ADD COLUMN paparan_wilayah CHAR(1);&lt;br /&gt;ALTER TABLE pasien ADD COLUMN status_keluar CHAR(1);&lt;/pre&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Catatan: Tipe CHAR(1) sama dengan Tipe CHARACTER, panjang maksimum 1 karakter. Namun sebenarnya ada tipe data yang lebih cocok yaitu ENUM, tetapi untuk sementara ini kita menggunakan CHAR saja dulu.&lt;/div&gt;&lt;br /&gt;Perintah ALTER TABLE tersebut akan menambah kolom pada tabel pasien. Akan kita cek dengan perintah DESCRIBE:&lt;pre&gt;DESCRIBE pasien;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+------------------+-------------+&lt;br /&gt;| Field            | Type        |&lt;br /&gt;+------------------+-------------+&lt;br /&gt;| nama             | text        |&lt;br /&gt;| alamat           | text        |&lt;br /&gt;| kode_wilayah     | text        |&lt;br /&gt;| kelamin          | char(1)     |&lt;br /&gt;| umur             | smallint(6) |&lt;br /&gt;| gejala_dttm      | datetime    |&lt;br /&gt;| suhu_tinggi      | char(1)     |&lt;br /&gt;| batuk            | char(1)     |&lt;br /&gt;| radang_tenggorok | char(1)     |&lt;br /&gt;| nafas_tersengal  | char(1)     |&lt;br /&gt;| paparan_langsung | char(1)     |&lt;br /&gt;| paparan_wilayah  | char(1)     |&lt;br /&gt;| status_keluar    | char(1)     |&lt;br /&gt;+------------------+-------------+&lt;br /&gt;&lt;/pre&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Jika kita perhatikan pada kolom Type, ada perbedaan tipe untuk kelamin yaitu char(1) sedangkan pada tutorial pertama tertulis CHARACTER. Perbedaan ini tidak menjadi masalah, dikarenakan perbedaan dialek SQL antar aplikasi database.&lt;/div&gt;&lt;br /&gt;Sebagai tambahan, perintah ALTER TABLE juga dapat digunakan untuk menghapus kolom/field. Akan kita coba, sebelumnya kita tambahkan satu kolom dummy yang nanti bakal dihapus:&lt;pre&gt;ALTER TABLE pasien ADD COLUMN test_hapus CHAR(1);&lt;/pre&gt;&lt;br /&gt;hasilnya (dengan perintah DESCRIBE):&lt;pre&gt;+------------------+-------------+&lt;br /&gt;| Field            | Type        |&lt;br /&gt;+------------------+-------------+&lt;br /&gt;| nama             | text        |&lt;br /&gt;| alamat           | text        |&lt;br /&gt;| kode_wilayah     | text        |&lt;br /&gt;| kelamin          | char(1)     |&lt;br /&gt;| umur             | smallint(6) |&lt;br /&gt;| gejala_dttm      | datetime    |&lt;br /&gt;| suhu_tinggi      | char(1)     |&lt;br /&gt;| batuk            | char(1)     |&lt;br /&gt;| radang_tenggorok | char(1)     |&lt;br /&gt;| nafas_tersengal  | char(1)     |&lt;br /&gt;| paparan_langsung | char(1)     |&lt;br /&gt;| paparan_wilayah  | char(1)     |&lt;br /&gt;| status_keluar    | char(1)     |&lt;br /&gt;| test_hapus       | char(1)     |   &lt;--- ini akan kita hapus&lt;br /&gt;+------------------+-------------+&lt;/pre&gt;&lt;br /&gt;Caranya menghapus kolom:&lt;pre&gt;ALTER TABLE pasien DROP COLUMN test_hapus;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+------------------+-------------+&lt;br /&gt;| Field            | Type        |&lt;br /&gt;+------------------+-------------+&lt;br /&gt;| nama             | text        |&lt;br /&gt;| alamat           | text        |&lt;br /&gt;| kode_wilayah     | text        |&lt;br /&gt;| kelamin          | char(1)     |&lt;br /&gt;| umur             | smallint(6) |&lt;br /&gt;| gejala_dttm      | datetime    |&lt;br /&gt;| suhu_tinggi      | char(1)     |&lt;br /&gt;| batuk            | char(1)     |&lt;br /&gt;| radang_tenggorok | char(1)     |&lt;br /&gt;| nafas_tersengal  | char(1)     |&lt;br /&gt;| paparan_langsung | char(1)     |&lt;br /&gt;| paparan_wilayah  | char(1)     |&lt;br /&gt;| status_keluar    | char(1)     |&lt;br /&gt;+------------------+-------------+&lt;/pre&gt;Foila!!, sudah hilang lagi.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Berikutnya, kita akan menggunakan statement baru yaitu UPDATE. Dengan perintah UPDATE kita akan mengubah data pada record. Sebelumnya, akan kita cek dulu isi field yang telah kita tambahkan dengan perintah:&lt;pre&gt;SELECT nama,umur,gejala_dttm,suhu_tinggi&lt;br /&gt;FROM pasien;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+------+-------------+-------------+&lt;br /&gt;| nama   | umur | gejala_dttm | suhu_tinggi |&lt;br /&gt;+--------+------+-------------+-------------+&lt;br /&gt;| John   |   35 | NULL        | NULL        |&lt;br /&gt;| Jane   |   30 | NULL        | NULL        |&lt;br /&gt;| George |   30 | NULL        | NULL        |&lt;br /&gt;| Silvy  |   20 | NULL        | NULL        |&lt;br /&gt;| Tommy  |   25 | NULL        | NULL        |&lt;br /&gt;+--------+------+-------------+-------------+&lt;/pre&gt;&lt;br /&gt;Kemudian akan kita coba perintah UPDATE berikut:&lt;pre&gt;UPDATE pasien SET gejala_dttm = '2006-09-19 08:00:00', suhu_tinggi = 'a';&lt;/pre&gt;&lt;br /&gt;akan mengubah gejala_dttm = '2006-09-19 08:00:00' (jam 8 pagi, tanggal 19 September 2006) dan suhu_tinggi = 'a' (alias Ya, atau muncul suhu tinggi), dan perubahannya akan terjadi pada semua record pada tabel pasien (karena tidak ada WHERE criteria).&lt;br /&gt;&lt;br /&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Untuk memasukkan tanggal digunakan format seperti contoh, yaitu: tahun-bulan-tanggal&amp;lt;spasi&amp;gt;jam:menit:detik. Format ini bagi kita kurang biasa, namun bagi komputer akan sangat memudahkan untuk dibandingkan dan diurutkan dengan kecepatan sangat tinggi.&lt;/div&gt;&lt;br /&gt;Akan kita coba melihat hasilnya dengan perintah:&lt;pre&gt;SELECT nama,umur,gejala_dttm,suhu_tinggi&lt;br /&gt;FROM pasien;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+------+---------------------+-------------+&lt;br /&gt;| nama   | umur | gejala_dttm         | suhu_tinggi |&lt;br /&gt;+--------+------+---------------------+-------------+&lt;br /&gt;| John   |   35 | 2006-09-19 08:00:00 | a           |&lt;br /&gt;| Jane   |   30 | 2006-09-19 08:00:00 | a           |&lt;br /&gt;| George |   30 | 2006-09-19 08:00:00 | a           |&lt;br /&gt;| Silvy  |   20 | 2006-09-19 08:00:00 | a           |&lt;br /&gt;| Tommy  |   25 | 2006-09-19 08:00:00 | a           |&lt;br /&gt;+--------+------+---------------------+-------------+&lt;/pre&gt;&lt;br /&gt;Selanjutnya kita akan mencoba beberapa statement UPDATE dibawah ini. Silakan untuk mencobanya dan melihat hasilnya setiap selesai satu UPDATE.&lt;pre&gt;UPDATE pasien SET&lt;br /&gt;   batuk = 'a',&lt;br /&gt;   radang_tenggorok = 'a',&lt;br /&gt;   nafas_tersengal = 'b',&lt;br /&gt;   paparan_langsung = 'a',&lt;br /&gt;   paparan_wilayah = 'b',&lt;br /&gt;   status_keluar = 'a';&lt;br /&gt;&lt;br /&gt;UPDATE pasien SET paparan_wilayah = 'c' WHERE nama = 'John';&lt;br /&gt;&lt;br /&gt;UPDATE pasien SET nafas_tersengal = 'a',&lt;br /&gt;       status_keluar = 'b'&lt;br /&gt;WHERE nama = 'George';&lt;br /&gt;&lt;br /&gt;UPDATE pasien SET paparan_langsung = paparan_wilayah WHERE kelamin != 'L';&lt;/pre&gt;&lt;br /&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Cobalah untuk menarik garis logika dari perintah-perintah tersebut. SQL sebenarnya cukup mudah dipahami dikarenakan dialeknya mirip dengan bahasa Inggris biasa.&lt;/div&gt;&lt;br /&gt;Jika kita perhatikan statement UPDATE yang terakhir agak sedikit baru. Statement tersebut jika dibahasakan sama dengan perintah: &lt;span style="font-style:italic;"&gt;Pada tabel pasien, ubahlah kolom paparan_langsung menjadi sama isinya dengan paparan_wilayah, untuk record-record yang memiliki data kolom kelamin tidak sama dengan 'L' (atau laki-laki)&lt;/span&gt;. Mudah bukan?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-4.html"&gt;Bersambung.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-1792587370482401831?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/1792587370482401831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=1792587370482401831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/1792587370482401831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/1792587370482401831'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-3.html' title='Tutorial SQL Bagian 3'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-8153119032920205481</id><published>2006-09-20T13:55:00.000+07:00</published><updated>2006-09-20T13:56:20.746+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>Tutorial SQL Bagian 2</title><content type='html'>Setelah pada &lt;a href='http://iksql.blogspot.com/2006/09/sql-tutorial-1.html'&gt;tutorial sebelumnya&lt;/a&gt; kita membuat 2 tabel yaitu tabel pasien dan tabel wilayah, kali ini kita akan mencoba menggali informasi dari 2 tabel tersebut dengan query yang lebih canggih, yaitu JOIN:&lt;br /&gt;&lt;br /&gt;Pertama kita akan melakukan JOIN antara 2 tabel tersebut:&lt;br /&gt;&lt;pre&gt;SELECT pasien.nama,&lt;br /&gt;       pasien.alamat,&lt;br /&gt;       wilayah.nama_wilayah,&lt;br /&gt;       pasien.kelamin,&lt;br /&gt;       pasien.umur&lt;br /&gt;FROM pasien&lt;br /&gt;LEFT JOIN wilayah ON wilayah.kode_wilayah = pasien.kode_wilayah;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+---------------------+--------------+---------+------+&lt;br /&gt;| nama   | alamat              | nama_wilayah | kelamin | umur |&lt;br /&gt;+--------+---------------------+--------------+---------+------+&lt;br /&gt;| John   | Jl. Enau No. 99     | YOGYAKARTA   | L       |   35 |&lt;br /&gt;| Jane   | Jl. Melati No. 1    | YOGYAKARTA   | P       |   30 |&lt;br /&gt;| George | Jl. Mangga No. 33   | SLEMAN       | L       |   30 |&lt;br /&gt;| Silvy  | Jl. Bambu No. 11    | BANTUL       | P       |   20 |&lt;br /&gt;| Tommy  | Jl. Beringin No. 55 | BANTUL       | L       |   25 |&lt;br /&gt;+--------+---------------------+--------------+---------+------+&lt;/pre&gt;&lt;br /&gt;Dari hasil query tersebut dapat dilihat bahwa kita telah 'menterjemahkan' kode_wilayah yang kurang dapat dipahami menjadi nama_wilayah yang lebih terbaca oleh manusia. Proses yang terjadi sebenarnya ialah kita menggandengkan 2 query menjadi 1 dengan gandengan berupa field kode_wilayah pada kedua tabel:&lt;br /&gt;&lt;pre&gt;  ON wilayah.kode_wilayah = pasien.kode_wilayah&lt;/pre&gt;Untuk sementara akan kita tinggalkan dulu query JOIN, selanjutnya akan kita coba query dengan COUNT:&lt;br /&gt;&lt;pre&gt;SELECT COUNT(nama) AS jumlah FROM pasien;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+&lt;br /&gt;| jumlah |&lt;br /&gt;+--------+&lt;br /&gt;|      5 |&lt;br /&gt;+--------+&lt;/pre&gt;&lt;br /&gt;Kita ingin mengetahui jumlah pasien yang berusia 30 tahun keatas:&lt;br /&gt;&lt;pre&gt;SELECT COUNT(nama) AS jumlah&lt;br /&gt;   FROM pasien WHERE umur &gt;= 30;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+&lt;br /&gt;| jumlah |&lt;br /&gt;+--------+&lt;br /&gt;|      3 |&lt;br /&gt;+--------+&lt;/pre&gt;&lt;br /&gt;Selanjutnya kita mencoba query dengan GROUP BY. Dengan GROUP BY kita menggabungkan record/baris yang memiliki data yang sama pada field tertentu. Contoh berikut akan mencoba menggali informasi penyebaran pasien berdasarkan jenis kelamin:&lt;br /&gt;&lt;pre&gt;SELECT kelamin,COUNT(nama) AS jumlah&lt;br /&gt;   FROM pasien GROUP BY kelamin;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+---------+--------+&lt;br /&gt;| kelamin | jumlah |&lt;br /&gt;+---------+--------+&lt;br /&gt;| L       |      3 |&lt;br /&gt;| P       |      2 |&lt;br /&gt;+---------+--------+&lt;/pre&gt;&lt;br /&gt;Kemudian kita akan menggali informasi penyebaran pasien berdasarkan wilayah. Sebelumnya kita akan kembali melihat query JOIN di atas lalu kita modifikasi sedikit menjadi:&lt;br /&gt;&lt;pre&gt;SELECT wilayah.nama_wilayah,&lt;br /&gt;       COUNT(pasien.nama) AS jumlah&lt;br /&gt;FROM pasien&lt;br /&gt;LEFT JOIN wilayah ON wilayah.kode_wilayah = pasien.kode_wilayah&lt;br /&gt;GROUP BY wilayah.kode_wilayah;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------------+--------+&lt;br /&gt;| nama_wilayah | jumlah |&lt;br /&gt;+--------------+--------+&lt;br /&gt;| BANTUL       |      2 |&lt;br /&gt;| SLEMAN       |      1 |&lt;br /&gt;| YOGYAKARTA   |      2 |&lt;br /&gt;+--------------+--------+&lt;/pre&gt;&lt;br /&gt;Demikian tutorial SQL bagian kedua ini telah kita selesaikan. Sedikit demi sedikit kita mulai merasa bahwa mempelajari SQL sangat lah mudah. Dibawah ini kami sertakan sedikit tata bahasa (syntax) SQL, kaitannya dengan perintah-perintah SQL yang telah kita coba. Sampai jumpa lagi di tutorial SQL bagian ketiga.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-3.html"&gt;Bersambung.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr noshade='1' size='1'/&gt;&lt;br /&gt;STATEMENT: CREATE TABLE&lt;br /&gt;&lt;pre&gt;CREATE TABLE table_name (&lt;br /&gt;      field_name1 TYPE [(size)] [NOT NULL] [index1]&lt;br /&gt;   [, field_name2 TYPE [(size)] [NOT NULL] [index2]&lt;br /&gt;   [, ...]&lt;br /&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;table style='margin:0px' border='1'&gt;&lt;tr&gt;&lt;td style='font-weight:bold;'&gt;TYPE&lt;/td&gt;&lt;td style='font-weight:bold;'&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TEXT&lt;/td&gt;&lt;td&gt;Characters, zero to a maximum of 2.14 gigabytes.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CHARACTER&lt;/td&gt;&lt;td&gt;Characters, zero to 255 characters.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TINYINT&lt;/td&gt;&lt;td&gt;An integer value between 0 and 255.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SMALLINT&lt;/td&gt;&lt;td&gt;A short integer between – 32,768 and 32,767.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;INTEGER&lt;/td&gt;&lt;td&gt;A long integer between – 2,147,483,648 and 2,147,483,647.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FLOAT&lt;/td&gt;&lt;td&gt;A double-precision floating-point value.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;etc.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;STATEMENT: SELECT&lt;br /&gt;&lt;pre&gt;SELECT [table_name.]field_name1 [AS alias1]&lt;br /&gt;[, table_name.]field_name2 [AS alias2]&lt;br /&gt;[, ...]&lt;br /&gt;FROM table_name&lt;br /&gt;[WHERE where_definition ]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OPERATION: LEFT JOIN&lt;br /&gt;&lt;pre&gt;SELECT [ ... ]&lt;br /&gt;FROM table_name1&lt;br /&gt;LEFT JOIN table_name2&lt;br /&gt;ON table_name1.field_name1 COMPARISON_OPERATOR table_name2.field_name2&lt;br /&gt;[AND table_name1.field_name3 COMPARISON_OPERATOR table_name2.field_name4]&lt;br /&gt;[ ... ]&lt;/pre&gt;&lt;br /&gt;&lt;table style='margin-top:0px;' border='1'&gt;&lt;tr&gt;&lt;td style='font-weight:bold;'&gt;COMPARISON_OPERATOR&lt;/td&gt;&lt;td style='font-weight:bold;'&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;Equal.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;gt;&lt;/td&gt;&lt;td&gt;Greater than.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;lt;&lt;/td&gt;&lt;td&gt;Less than.&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td&gt;&amp;gt;=&lt;/td&gt;&lt;td&gt;Greater than or equal.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;lt;=&lt;/td&gt;&lt;td&gt;Less than or equal.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LIKE&lt;/td&gt;&lt;td&gt;Compare string pattern.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IN&lt;/td&gt;&lt;td&gt;Returns true if data is any of the values in the &amp;quot;IN&amp;quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2'&gt;etc.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;CLAUSE: GROUP BY&lt;br /&gt;&lt;pre&gt;SELECT fieldlist&lt;br /&gt;FROM table_name&lt;br /&gt;WHERE criteria&lt;br /&gt;[GROUP BY groupfieldlist]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;FUNCTION: COUNT&lt;br /&gt;&lt;pre&gt;SELECT COUNT(field_name) AS [alias]&lt;br /&gt;FROM table_name&lt;br /&gt;[WHERE ...]&lt;br /&gt;[GROUP BY ...]&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-8153119032920205481?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/8153119032920205481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=8153119032920205481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/8153119032920205481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/8153119032920205481'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-2.html' title='Tutorial SQL Bagian 2'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34514228.post-115840372721339588</id><published>2006-09-16T17:47:00.000+07:00</published><updated>2006-09-17T08:28:31.233+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial SQL'/><title type='text'>Tutorial SQL Bagian 1</title><content type='html'>SQL adalah singkatan dari &lt;span style="font-style: italic;"&gt;Structured Query Language&lt;/span&gt;, yang merupakan bahasa standar (&lt;span style="font-style:italic;"&gt;lingua franca&lt;/span&gt;) untuk mengolah database. Bagi Anda yang baru memulai mempelajari SQL dan kebetulan berkecimpung di bidang informasi kesehatan/ilmu kesehatan, tutorial ini kami sajikan dalam langkah-langkah yang praktis serta berkaitan langsung dengan kasus supaya mudah dipahami.&lt;br /&gt;&lt;br /&gt;Bagi Anda yang sudah cukup mahir menggunakan SQL, tutorial ini dapat pula digunakan sebagai penyegaran, selain itu juga dapat sebagai bahan renungan untuk pertimbangan alternatif desain database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Gambaran Singkat Mengenai Database&lt;/span&gt;&lt;br /&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:default;" src="http://photos1.blogger.com/blogger2/1332/4213/320/kolombaris.jpg" border="0" alt="table" /&gt;Apa dan bagaimanakah database itu? Database adalah sarana penyimpanan data (basis data). Data yang kita peroleh (semisal dari hasil penelitian/survei yang kita lakukan) akan disimpan di database dalam bentuk tabel. Di dalam database boleh terdapat banyak tabel untuk menyimpan informasi yang bermacam-macam. Tabel memiliki kolom dan baris. Kolom sering disebut dalam bahasa lain: column/field/attribute, sedangkan baris: row/record/tuple/relation (kami akan menggunakan bahasa-bahasa tersebut sepanjang tutorial ini).&lt;br /&gt;&lt;br /&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;Untuk mempraktekkan langkah-langkah dalam tutorial ini, Anda membutuhkan aplikasi komputer seperti Microsoft Access, MS SQL Server, MySQL, Oracle, dll, dan diharapkan sudah cukup mengenal penggunaan aplikasi tersebut sehingga kita bisa langsung kepada prakteknya. Contoh-contoh perintah SQL yang dibuat sepanjang tutorial ini juga dapat dicopy dan dipaste ke dalam aplikasi untuk langsung dicoba tanpa perlu mengetik terlalu banyak.&lt;/div&gt;&lt;br /&gt;Kita akan mengambil contoh kasus sebuah misi/proyek &lt;span style="font-style: italic;"&gt;surveillance of disease&lt;/span&gt; sepanjang tutorial ini.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Langkah 1 : Tabel Pasien&lt;/span&gt;&lt;br /&gt;Pertama kali, kita akan membuat tabel yang isinya adalah data sosio demografi pasien hasil survei. Tabel ini akan memiliki atribut : nama, alamat, kode_wilayah, kelamin dan umur. Untuk membuat tabel dengan SQL, kita gunakan perintah CREATE TABLE :&lt;pre&gt;&lt;br /&gt;CREATE TABLE pasien (&lt;br /&gt;   nama TEXT,&lt;br /&gt;   alamat TEXT,&lt;br /&gt;   kode_wilayah TEXT(10),&lt;br /&gt;   kelamin CHARACTER,&lt;br /&gt;   umur SMALLINT&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;Kemudian kita akan mengisinya dengan data menggunakan perintah INSERT :&lt;br /&gt;[catatan: untuk jenis kelamin L=laki-laki, P=perempuan]&lt;pre&gt;&lt;br /&gt;INSERT INTO pasien (nama,alamat,kode_wilayah,kelamin,umur)&lt;br /&gt;   VALUES ('John','Jl. Enau No. 99','3471000000','L','35');&lt;br /&gt;&lt;br /&gt;INSERT INTO pasien (nama,alamat,kode_wilayah,kelamin,umur)&lt;br /&gt;   VALUES ('Jane','Jl. Melati No. 1','3471000000','P','30');&lt;br /&gt;&lt;br /&gt;INSERT INTO pasien (nama,alamat,kode_wilayah,kelamin,umur)&lt;br /&gt;   VALUES ('George','Jl. Mangga No. 33','3404000000','L','30');&lt;br /&gt;&lt;br /&gt;INSERT INTO pasien (nama,alamat,kode_wilayah,kelamin,umur)&lt;br /&gt;   VALUES ('Silvy','Jl. Bambu No. 11','3402000000','P','20');&lt;br /&gt;&lt;br /&gt;INSERT INTO pasien (nama,alamat,kode_wilayah,kelamin,umur)&lt;br /&gt;   VALUES ('Tommy','Jl. Beringin No. 55','3402000000','L','25');&lt;/pre&gt;&lt;br /&gt;Kemudian kita akan sedikit bermain-main dengan data yang telah kita simpan di dalam tabel tadi. Kita akan melakukan query (mengambil data) dengan perintah SELECT:&lt;br /&gt;&lt;br /&gt;Tampilkan seluruh data pasien:&lt;br /&gt;&lt;pre&gt;SELECT * FROM pasien;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+---------------------+--------------+---------+------+&lt;br /&gt;| nama   | alamat              | kode_wilayah | kelamin | umur |&lt;br /&gt;+--------+---------------------+--------------+---------+------+&lt;br /&gt;| John   | Jl. Enau No. 99     | 3471000000   | L       |   35 |&lt;br /&gt;| Jane   | Jl. Melati No. 1    | 3471000000   | P       |   30 |&lt;br /&gt;| George | Jl. Mangga No. 33   | 3404000000   | L       |   30 |&lt;br /&gt;| Silvy  | Jl. Bambu No. 11    | 3402000000   | P       |   20 |&lt;br /&gt;| Tommy  | Jl. Beringin No. 55 | 3402000000   | L       |   25 |&lt;br /&gt;+--------+---------------------+--------------+---------+------+&lt;/pre&gt;&lt;br /&gt;Tampilkan yang berjenis kelamin laki-laki saja:&lt;br /&gt;&lt;pre&gt;SELECT * FROM pasien WHERE kelamin = 'L';&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+---------------------+--------------+---------+------+&lt;br /&gt;| nama   | alamat              | kode_wilayah | kelamin | umur |&lt;br /&gt;+--------+---------------------+--------------+---------+------+&lt;br /&gt;| John   | Jl. Enau No. 99     | 3471000000   | L       |   35 |&lt;br /&gt;| George | Jl. Mangga No. 33   | 3404000000   | L       |   30 |&lt;br /&gt;| Tommy  | Jl. Beringin No. 55 | 3402000000   | L       |   25 |&lt;br /&gt;+--------+---------------------+--------------+---------+------+&lt;/pre&gt;&lt;br /&gt;Tampilkan nama pasien yang berumur 30 tahun:&lt;br /&gt;&lt;pre&gt;SELECT nama FROM pasien WHERE umur = '30';&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+&lt;br /&gt;| nama   |&lt;br /&gt;+--------+&lt;br /&gt;| Jane   |&lt;br /&gt;| George |&lt;br /&gt;+--------+&lt;/pre&gt;&lt;br /&gt;Tampilkan kolom/field nama dan umur saja:&lt;br /&gt;&lt;pre&gt;SELECT nama,umur FROM pasien;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------+------+&lt;br /&gt;| nama   | umur |&lt;br /&gt;+--------+------+&lt;br /&gt;| John   |   35 |&lt;br /&gt;| Jane   |   30 |&lt;br /&gt;| George |   30 |&lt;br /&gt;| Silvy  |   20 |&lt;br /&gt;| Tommy  |   25 |&lt;br /&gt;+--------+------+&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Langkah 2 : Tabel Wilayah&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;+--------------+-----------------+&lt;br /&gt;| kode_wilayah | nama_wilayah    |&lt;br /&gt;+--------------+-----------------+&lt;br /&gt;| 3401000000   | KULON PROGO     |&lt;br /&gt;| 3402000000   | BANTUL          |&lt;br /&gt;| 3403000000   | GUNUNG KIDUL    |&lt;br /&gt;| 3404000000   | SLEMAN          |&lt;br /&gt;| 3471000000   | YOGYAKARTA      |&lt;br /&gt;+--------------+-----------------+&lt;/pre&gt;&lt;div style="padding:5px; margin-left:20px; margin-right:20px; background-color:#ccffcc; border:1px solid #777777;font-size:0.9em;"&gt;&lt;span style="font-weight:bold;"&gt;Ada pertanyaan:&lt;/span&gt;&lt;ol&gt;&lt;li&gt;Mengapa kita perlu kode wilayah?&lt;/li&gt;&lt;li&gt;Mengapa tidak langsung saja nama wilayah diikutkan sekalian dalam kolom alamat?&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight:bold;"&gt;Jawab:&lt;/span&gt;&lt;br /&gt;Kita bisa saja memasukkan nama wilayah didalam alamat, namun kita akan kesulitan nantinya pada saat mengolah data. Kesulitan itu timbul dikarenakan data menjadi kurang terstruktur (informasi wilayah bercampur dengan alamat). Selain itu, kode yang dimasukkan disini juga bukan asal dibuat, namun sudah dibakukan sebagai kode wilayah standar oleh pemerintah Indonesia melalui Biro Pusat Statistik. Keistimewaan yang kita peroleh nantinya dengan memasukkan wilayah dalam bentuk kode ialah kemudahan untuk bertukar data dengan institusi-institusi mau pun peneliti-peneliti yang lain yang menggunakan kode standar tersebut. Keunggulan lainnya ialah query menjadi lebih optimal dan cepat.&lt;/div&gt;&lt;br /&gt;Kita akan membuat tabel wilayah dengan perintah:&lt;br /&gt;&lt;pre&gt;CREATE TABLE wilayah (&lt;br /&gt;   kode_wilayah TEXT(10),&lt;br /&gt;   nama_wilayah TEXT(60)&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;Kemudian mengisinya dengan data menggunakan perintah:&lt;pre&gt;&lt;br /&gt;INSERT INTO wilayah (kode_wilayah,nama_wilayah)&lt;br /&gt;   VALUES('3401000000','KULON PROGO');&lt;br /&gt;INSERT INTO wilayah (kode_wilayah,nama_wilayah)&lt;br /&gt;   VALUES('3402000000','BANTUL');&lt;br /&gt;INSERT INTO wilayah (kode_wilayah,nama_wilayah)&lt;br /&gt;   VALUES('3403000000','GUNUNG KIDUL');&lt;br /&gt;INSERT INTO wilayah (kode_wilayah,nama_wilayah)&lt;br /&gt;   VALUES('3404000000','SLEMAN');&lt;br /&gt;INSERT INTO wilayah (kode_wilayah,nama_wilayah)&lt;br /&gt;   VALUES('3471000000','YOGYAKARTA');&lt;/pre&gt;&lt;br /&gt;Kita periksa data yang telah kita masukkan dengan perintah:&lt;br /&gt;&lt;pre&gt;SELECT * FROM wilayah;&lt;/pre&gt;&lt;br /&gt;hasilnya:&lt;pre&gt;+--------------+--------------+&lt;br /&gt;| kode_wilayah | nama_wilayah |&lt;br /&gt;+--------------+--------------+&lt;br /&gt;| 3401000000   | KULON PROGO  |&lt;br /&gt;| 3402000000   | BANTUL       |&lt;br /&gt;| 3403000000   | GUNUNG KIDUL |&lt;br /&gt;| 3404000000   | SLEMAN       |&lt;br /&gt;| 3471000000   | YOGYAKARTA   |&lt;br /&gt;+--------------+--------------+&lt;/pre&gt;&lt;br /&gt;Setelah ini, kita akan mencoba metode-metode penggalian informasi yang lebih canggih pada tutorial SQL bagian kedua.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://iksql.blogspot.com/2006/09/tutorial-sql-bagian-2.html'&gt;Bersambung.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34514228-115840372721339588?l=iksql.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iksql.blogspot.com/feeds/115840372721339588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34514228&amp;postID=115840372721339588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/115840372721339588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34514228/posts/default/115840372721339588'/><link rel='alternate' type='text/html' href='http://iksql.blogspot.com/2006/09/sql-tutorial-1.html' title='Tutorial SQL Bagian 1'/><author><name>Adiet</name><uri>http://www.blogger.com/profile/00872375695182926002</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
