20 September 2006

Tutorial SQL Bagian 2

Setelah pada tutorial sebelumnya 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:

Pertama kita akan melakukan JOIN antara 2 tabel tersebut:

SELECT pasien.nama,
pasien.alamat,
wilayah.nama_wilayah,
pasien.kelamin,
pasien.umur
FROM pasien
LEFT JOIN wilayah ON wilayah.kode_wilayah = pasien.kode_wilayah;

hasilnya:
+--------+---------------------+--------------+---------+------+
| nama | alamat | nama_wilayah | kelamin | umur |
+--------+---------------------+--------------+---------+------+
| John | Jl. Enau No. 99 | YOGYAKARTA | L | 35 |
| Jane | Jl. Melati No. 1 | YOGYAKARTA | P | 30 |
| George | Jl. Mangga No. 33 | SLEMAN | L | 30 |
| Silvy | Jl. Bambu No. 11 | BANTUL | P | 20 |
| Tommy | Jl. Beringin No. 55 | BANTUL | L | 25 |
+--------+---------------------+--------------+---------+------+

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:
  ON wilayah.kode_wilayah = pasien.kode_wilayah
Untuk sementara akan kita tinggalkan dulu query JOIN, selanjutnya akan kita coba query dengan COUNT:
SELECT COUNT(nama) AS jumlah FROM pasien;

hasilnya:
+--------+
| jumlah |
+--------+
| 5 |
+--------+

Kita ingin mengetahui jumlah pasien yang berusia 30 tahun keatas:
SELECT COUNT(nama) AS jumlah
FROM pasien WHERE umur >= 30;

hasilnya:
+--------+
| jumlah |
+--------+
| 3 |
+--------+

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:
SELECT kelamin,COUNT(nama) AS jumlah
FROM pasien GROUP BY kelamin;

hasilnya:
+---------+--------+
| kelamin | jumlah |
+---------+--------+
| L | 3 |
| P | 2 |
+---------+--------+

Kemudian kita akan menggali informasi penyebaran pasien berdasarkan wilayah. Sebelumnya kita akan kembali melihat query JOIN di atas lalu kita modifikasi sedikit menjadi:
SELECT wilayah.nama_wilayah,
COUNT(pasien.nama) AS jumlah
FROM pasien
LEFT JOIN wilayah ON wilayah.kode_wilayah = pasien.kode_wilayah
GROUP BY wilayah.kode_wilayah;

hasilnya:
+--------------+--------+
| nama_wilayah | jumlah |
+--------------+--------+
| BANTUL | 2 |
| SLEMAN | 1 |
| YOGYAKARTA | 2 |
+--------------+--------+

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.

Bersambung.




STATEMENT: CREATE TABLE
CREATE TABLE table_name (
field_name1 TYPE [(size)] [NOT NULL] [index1]
[, field_name2 TYPE [(size)] [NOT NULL] [index2]
[, ...]
)

TYPEDescription
TEXTCharacters, zero to a maximum of 2.14 gigabytes.
CHARACTERCharacters, zero to 255 characters.
TINYINTAn integer value between 0 and 255.
SMALLINTA short integer between – 32,768 and 32,767.
INTEGERA long integer between – 2,147,483,648 and 2,147,483,647.
FLOATA double-precision floating-point value.
etc.


STATEMENT: SELECT
SELECT [table_name.]field_name1 [AS alias1]
[, table_name.]field_name2 [AS alias2]
[, ...]
FROM table_name
[WHERE where_definition ]


OPERATION: LEFT JOIN
SELECT [ ... ]
FROM table_name1
LEFT JOIN table_name2
ON table_name1.field_name1 COMPARISON_OPERATOR table_name2.field_name2
[AND table_name1.field_name3 COMPARISON_OPERATOR table_name2.field_name4]
[ ... ]

COMPARISON_OPERATORDescription
=Equal.
>Greater than.
<Less than.
>=Greater than or equal.
<=Less than or equal.
LIKECompare string pattern.
INReturns true if data is any of the values in the "IN"
etc.


CLAUSE: GROUP BY
SELECT fieldlist
FROM table_name
WHERE criteria
[GROUP BY groupfieldlist]


FUNCTION: COUNT
SELECT COUNT(field_name) AS [alias]
FROM table_name
[WHERE ...]
[GROUP BY ...]

No comments: