Kamis, 27 Desember 2012


STRUCTURED QUERY LANGUAGE (SQL)

A. Pengenalan SQL

Structured Query Languages (SQL) pertama kali diterapkan pada sistem R (sebuah proyek riset pada laboratorium riset San Jose, IBM). Kini SQL juga dijumpai pada berbagai platform, dari mikrokomputer hingga mainframe. SQL dapat digunakan baik secara berdiri sendiri maupun dilekatkan pada bahasa-bahasa lain seperti C dan Delphi. SQL juga telah menjadi bagian dari sejumlah DBMS, seperti Oracle, Sybase, MySQL dan Informix.

B. Element SQL

Elemen dasar SQL:
Pernyataan:  perintah SQL yang meminta sesuatu tindakan kepada DBMS. SQL memiliki kira-kira 30 pernyataan diantaranya: 
- ALTER : Mengubah struktur table
- COMMIT : Mengakhiri sebuah eksekusi transaksi
- CREATE : Menciptakan table, indeks atau pandangan
- DELETE : Menghapus baris pada tabel
- DROP : Menghapus tabel, indeks atau pandangan
- GRAND : Menugaskan hak terhadap basis data kepada pengguna atau grup pengguna
- INSERT : Menambahkan sebuah baris pada tableREVOKE : Membatalkan hak terhadap basis data
- ROLLBACK : Mengembalikan ke keadaan semula sekiranya suatu transaksi gagal dilaksanakan
- SELECT : Memilih baris dan kolom pada tabel
- UPDATE : Mengubah nilai pada sebuah baris

Nama digunakan sebagai identitas bagi objek-objek pada DBMS. Contoh objek pada DBMS adalah tabel, kolom dan pengguna.
Tipe Data Setiap data memiliki tipe data. Berikut ini adalah tipe data dalam MySQL :
1. Tipe data untuk numerik : TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL(M,D)
2. Tipe data string : CHAR(n), VARCHAR(n), TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, ENUM, SET SET.
3. Tipe data tanggal dan jam : DATE, TIME, DATETIME. 

Konstanta menyatakan nilai yang tetap. 
Ekspresi: segala sesuatu yang menghasilkan nilai. Ekspresi digunakan untuk menghitung nilai.
Aggregate Functions (Fungsi Agregat)
Fungsi adalah sebuah subprogram yang menghasilkan suatu nilai jika dipanggil. Fungsi agregat adalah fungsi standar di dalam SQL, suatu fungsi yang digunakan untuk melakukan summary, fungsi statistik standar yang dikenakan pada suatu tabel atau query.
- AVG(ekspresi) : untuk mencari rata-rata nilai dalam suatu kolom
- COUNT(x) : untuk menghitung jumlah record (baris) dari suatu kolom dari suatu tabel. X adalah nama kolom yang ingin dicari jumlah barisnya.
- MAX(ekspresi) : untuk mencari nilai terbesar dari suatu kolom dari suatu tabel.
- MIN(ekspresi) : untuk mencari nilai terkecil dari suatu kolom dari suatu table.
- SUM(ekspresi) : untuk mendapatkan nilai total dari suatu kolom pada suatu tabel.

C. PERNYATAAN SQL

1. DDL(Data Definition Language)
DDL merupakan kelompok perintah yang berfungsi untuk mendefinisikan atribut-atribut basis data, tabel, atribut(kolom), batasan-batasan terhadap suatu atribut, serta hubungan antar tabel. Yang termasuk dalam kelompok DDL ini adalah CREATE, ALTER, dan DROP.

2.    DML(Data Manipulation Language)
DML adalah kelompok perintah yang berfungsi untuk memanipulasi data dalam basis data, misalnya untuk pengambilan, penyisipan, pengubahan dan penghapusan data. Perintah yang termasuk dalah kategori DML adalah : INSERT, DELETE, UPDATE dan SELECT.

3.    DCL




OPTIMASI QUERY

A. Optimasi pada Perintah SQL
Index pada database digunakan untuk meningkatkan kecepatan akses data. Pada saat query dijalankan, index mencari data dan menentukan nilai ROWID yang membantu menemukan lokasi data secara fisik di disk. Akan tetapi penggunaan index yang tidak tepat, tidak akan meningkatkan unjuk kerja dalam hal ini kecepatan akses data.

Misal digunakan index yang melibatkan tiga buah kolom yang mengurutkan kolom menurut nama, fakultas dan NIM dari tabel mahasiswa, sebagai berikut :

CREATE INDEX idx_nama_fakultas_nim ON mahasiswa(nama, fakultas, nim) TABLESPACE INDX;

Kemudian user melakukan query sebagai berikut :

SELECT * FROM mahasiswa WHERE fakultas=’teknik’;

Pada saat melakukan query ini, index tidak akan digunakan karena kolom pertama (nama) tidak digunakan dalam klausa WHERE. Jika user sering melakukan query ini, maka kolom index harus diurutkan menurut fakultas.

SELECT * FROM mahasiswa WHERE nim BETWEEN 5302411050 AND 5302411105;

Query ini akan melakukan “scan” terhadap sedikit data block jika tabel mahasiswa diatas diurutkan berdasarkan kolom nim.

Alternatif yang lain, bisa digunakan perintah untuk membuat tabel lain yang memiliki urutan yang berbeda dari tabel asal, seperti perintah SQL berikut :

CREATE TABLE mahasiswa_urut AS SELECT * FROM mahasiswa ORDER BY nim;

Pada SQL diatas, tabel mahasiswa_urut berisi data yang sama dengan tabel mahasiswa hanya datanya terurut berdasarkan kolom nim.

B. Faktor Lain yang Berpengaruh Terhadap Kecepatan Akses Data
1. Optimasi Aplikasi
Dalam pembuatan aplikasi, yang perlu mendapat perhatian adalah apakah akses terhadap data sudah efisien. Efisien dalam hal penggunaan obyek yang mendukung kecepatan akses, seperti index atau cluster. Kemudian juga bagaimana cara database didesain.

Apakah desain database sudah melakukan normalisasi data secara tepat. Kadangkala normalisasi sampai level yang kesekian, tidak menjamin suatu desain yang efisien. Untuk membuat desain yang lebih tepat, kadang setelah melakukan normalisasi perlu dilakukan denormalisasi. Misalnya tabel yang hubungannya one-toone dan sering diakses bersama lebih baik disatukan dalam satu tabel.

2. Cluster dan Index
Cluster adalah suatu segment yang menyimpan data dari tabel yang berbeda dalam suatu struktur fisik disk yang berdekatan. Konfigurasi ini bermanfaat untuk akses data dari beberapa tabel yang sering di-query. Penggunaan cluster secara tepat dilaksanakan setelah menganalisa tabel-tabel mana saja yang sering di-query secara bersamaan menggunaan perintah SQL join.

Jika aplikasi sering melakukan query dengan menggunakan suatu kolom yang berada pada klausa WHERE, maka harus digunakan index yang melibatkan kolom tersebut. Penggunaan index yang tepat bergantung pada jenis nilai yang terdapat dalam kolom yang akan diindex. Dalam RDBMS Oracle, index B-Tree digunakan untuk kolom yang mengandung nilai yang cukup bervariasi, sedangkan untuk nilai yang tidak memiliki variasi cukup banyak, lebih baik menggunakan index bitmap.


Query Lanjutan
Subquery
Subquery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL Statement yang lain. Untuk penulisan subquery pada SQL (SELECT select_list FROM table);

Penggunaan Subquery
Subquery ini digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui. Subquery terdapat banyak kolom yang merupakan tiap baris dari main query dibandingkan dengan nilai dari subquery multiple-row dan multiple-column.
Tipe Perbandingan Pada Subquery:
             a.       Perbandingan Berpasangan
             b.      Perbandingan Tidak Berpasangan

Penggunaan Subquery dalam Klausa From
Query ini dikenal juga dengan istilah inline view, karena tidak membentuk object database. Contoh penggunaan query pada from : (SELECT department_id, REDS(salary) salavg FROM employees GROUP BY department_id)

Ekspresi Scalar Subquery
Ekspresi scalar subquery merupakan subquery yang mengembalikan hanya satu nilai kolom dari satu baris. Contoh penggunaannya dengan ekspresi Case : (SELECT department_id FROM departments WHERE location_id = 1800).
Contoh penggunaanya dengan klausa ORDER BY : (SELECT department_name FROM departments WHERE e.department_id = d.department_id);

Korelasi Subquery
Korelasi Subquery digunakan untuk pemrosesan baris per baris. Tiap-tiap subquery dijalankan sekali untuk setiap baris dari outer query.

Proses dari Korelasi
Proses dari korelasi itu sendiri bagaiman mengambil baris dari outer query kemudian menjalankan inner query untuk quality atau disquality baris kandidat selanjutnya menggunakan nilai dari inner querry quality atau disquality baris kandidat dan kembali lagi ke awal. Cara penulisan korelasi subquery : (SELECT column1, column2 FROM table2 WHERE expr1 = expr2);

Penggunaan Operator Exist Dan Non Exist
Operator EXISTS dan NOT EXIST digunakan untuk menguji keberadaan dari baris dalam himpunan hasil dari subquery.

Penggunaan Klausa With
Dalam menggunakan klausa WITH, kita dapat menggunakan blok query yang sama dalam statement SELECT pada saat terjadi lebih dari sekali dalam complex query.