Jumat, 28 Desember 2012

SQL


SQL (STRUCTURED QUERY LANGUAGE)

SQL merupakan salah satu bahasa pemograman yang dipergunakan untuk memanipulasi basis data yang dapat digunakan untuk bahasa pemrograman php, java, C, C++, dll. SQL juga merupakan salah satu DBMS yang saat ini banyak digunakan pada operasi basis data danembedded (ditempelkan) di hampir semua bahasa pemrograman yang mendukung basis data relasional. SQL mempunyai beberapa element penting seperti:
1.       Pernyataan adalah perintah yang dikirimkan ke DBMS, terdapat 30 pernyataan. Adapun pernyataan yang sering digunakan pada SQL adalah: Create, Insert, Update, Delete, Drop, Alter, Commmit, Select, Grant, Revoke, Rollback. Contoh untuk membuat sebuah database, maka menggunakan perintah: Create database nama_database.
2.        Nama digunakkan untuk memberi identitas sperti kolom, baris , tabel, pengguna.
3.       Tipe data digunakan untuk memberi jenis data yang dapat disimpan seperti int , text, varchar, date, dll. Macam-macam tipe data dibagi menjadi:
·         Tipe data Numerik: int, float, double, dll.
·         Tipe data String: text, char, varchar, enum, dll.
·         Tipe data jam dan tanggal : date, time , datetime, dll.
4.             Konstanta menyatakan nilai yang tetap.
5.              Ekspresi merupakan sesuatu yang menghasilkan nilai, dan digunakan untuk menghitung nilai.
6.             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


SQL dapat dibedakan menjadi 3 jenis yaitu:
1.       Data Definition Language (DDL), dapat diartikan sebagai perintah yang digunakan untuk mendefinisikan (menciptakan, tambah/mengubah/hapus) sturktur data/table.
2.       Data manipulation language (DML), dapat diartikan sebagai perintah yang digunakan untuk memanipulasi database (melihat, menenusuri, filtering, summarize, perhitungan, dll).
3.       Data Control Language (DCL), digunakan untuk mengedalikan database.

Optimasi Query


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 5302412345 AND 5302411090;
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



QUERY LANJUTAN
SUBQUERY
Subquery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL Statement yang lain. Untuk penulisan subquery pada SQL.
Pada gambar diatas, subquery (inner query) dijalankan sekali sebelum main query. Kemudian hasil dari subquery digunakan oleh main query (outer query).

PENGGUNAAN QUERY
Subquery mengembalikan nilai ke main query. Subquery digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown values). Berikut ini diberikan contoh penggunaan subquery.
SELECT last_name
FROM mahasiswa
WHERE salary > ( SELECT salary FROM MAHASISWA WHERE mahasiswa_id=60);

Query diatas akan menampilkan nama pegawai yang gajinya lebih dari pegawai dengan nomer pegawai 149. Sebelumnya, gaji dari pegawai dengan nomer pegawai 149 tidak diketahui, untuk itu kita tempatkan sebagai subquery agar nilai yang tidak diketahui tersebut dapat diketahui dan pada ilustrasi gambar diatas nilai gaji dari pegawai 149 adalah 10500.

SUBQUERY BANYAK KOLOM
Pada subquery dengan banyak kolom, tiap baris dari main query dibandingkan dengan nilai dari subquery multiple-row dan multiple-column. Berikut ini contoh pembandingan dengan banyak kolom dan baris :

PEMBANDINGAN KOLOM
Pembandingan kolom dalam subquery banyak kolom dapat berupa :
1. Pembandingan berpasangan (Pairwise Comparison SubQuery)
contoh pembandingan berpasangan untuk menampilkan detail dari data mahasiswa yang mengambil mata kuliah dan dosen yang sama dengan yang dimiliki oleh nomer mahasiswa 20.


SELECT mahasiswa_id, makul_id, dosen_id FROM mahasiswa WHERE (makul_id, dosen_id) IN
(SELECT makul_id, dosen_id FROM
mahasiswa WHERE mahasiswa_id IN (20,29))
AND mahasiswa_id NOT IN (20,29);

2. Pembandingan tidak berpasangan (NonPairwise Comparison SubQuery)
Berikut contoh pembandingan tidak berpasangan untuk menampilkan detail dari data mahasiswa yang mengambil mata kuliah dan dosen yang sama dengan mahasiswa dengan nomer mahasiswa 157 dan 168 dan dosen yang sama dengan mahasiswa yang memiliki nomer pegawai 157 atau 168.
SELECT mahasiswa_id, makul_id, dosen_id
FROM mahasiswa WHERE makul_id IN
(SELECT makul_id FROM mahasiswa
WHERE mahasiswa_id IN (157,168))
AND dosen_id IN
(SELECT dosen_id FROM mahasiswa
WHERE mahasiswa_id IN (157,168))
AND mahasiswa_id NOT IN(157,168);
PENGGUNAAN QUERY DALAM KLAUSA FROM

Query bisa diletakkan di dalam klausa FROM untuk membentuk tabel temporer. Query semacam ini dikenal juga dengan istilah inline view, karena tidak membentuk object database.
Berikut ini contoh penggunaan Query dalam klausa FROM.
SELECT nama_mhs, nilai_uas, nilai_uts,FROM mahasiswa WHERE nilai_uas > nilai_uts;
Query diatas menampilkan nama mahasiswa, nilai uas, dan nilai uts, yang nilai UASnya lebih besar dari nilai UTS

EKSPRESI SCALAR SUBQUERY

Ekspresi scalar subquery adalah subquery yang mengembalikan hanya satu nilai kolom dari satu baris.
Contoh : penggunaan scalar subquery dalam ekspresi CASE :
SELECT mahasiswa_id, nama_mhs,(CASE WHEN makul_id = THEN 'SBD' ELSE 'Statistika' END) location FROM mahasiswa;
Contoh : penggunaan scalar subquery dalam klausa ORDER BY :
SELECT mahasiswa_id, mana_mhs FROM mahasiswa ORDER BY SELECT nama_dosen FROM dosen WHERE mahasiswa_id=dosen_id;

KORELASI SUBQUERY

Korelasi SubQuery digunakan untuk pemrosesan baris per baris. Tiap-tiap subquery dijalankan sekali untuk setiap baris dari outer query.
Prosesnya sebagai berikut :



Proses korelasi dimulai dengan mengambil baris dari outer query, kemudian inner query dijalankan dengan menggunakan nilai baris kandidat, kemudian nilai dari inner query digunakan untuk melakukan kualifikasi atau mendiskualifikasi baris kandidat.
Berikut ini cara penulisan dari Korelasi SubQuery :
SELECT column1, column2, ... FROM table1 outer WHERE column1 operator (SELECT colum1, column2 FROM table2 WHERE expr1 = outer.expr2);
Korelasi Subquery juga dapat digunakan untuk meng-update baris pada satu table berdasarkan pada baris dari table yang lain, korelasi seperti itu dinamakan dengan Korelasi Update.
Berikut cara penulisan Korelasi Update :
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
Korelasi Subquery juga dapat digunakan untuk menghapus baris pada satu table berdasarkan pada baris dari table yang lain, korelasi seperti itu dinamakan dengan Korelasi Delete.

Berikut cara penulisan Korelasi Delete :
DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);

PENGGUNAAN OPERATOR EXIST DAN NOT EXIST

Operator EXISTS dan NOT EXIST digunakan untuk menguji keberadaan dari baris dalam himpunan hasil dari subquery.
·         Jika ditemukan, maka pencarian tidak dilanjutkan dalam inner query dan kondisi ditandai TRUE.
·         Jika tidak ditemukan, maka : Kondisi ditandai FALSE dan kondisi pencarian dilanjutkan dalam inner query.

Berikut penggunaan operator EXISTS untuk mencari pegawai yang memiliki sedikitnya satu orang bawahan.

PENGGUNAAN KLAUSA WITH
Dengan menggunakan klausa WITH, kita dapat menggunakan blok query yang sama dalam statement SELECT pada saat terjadi lebih dari sekali dalam complex query. Klausa WITH mendapatkan hasil dari blok query dan menyimpannya dalam tablespace temporer kepunyaan user. Klausa WITH dapat meningkatkan performansi.

Kamis, 20 Desember 2012

Tambahan (VIEW Pada mysql)


VIEW Pada mysql

Ø  View adalah perintah query yang disimpan pada database dengan suatu nama tertentu, sehingga bisa digunakan setiap saat untuk melihat data tanpa menuliskan ulang query tersebut.
Ø  Views merupakan suatu tampilan tabel virtual.
Ø  Views dapat digunakan untuk mempermudah kita dalam pembuatan laporan atau tampilan database yang diinginkan dengan cepat.

Membuat dan Mendefinisikan Views
  ·         Kita dapat membuat view dengan perintah CREATE VIEW. Berikut adalah syntax lengkapnya :
·         Kita menggunakan opsi OR REPLACE jika kita ingin mengganti view dengan nama yang sama dengan perintah tersebut.
  ·         Jika tidak maka perintah CREATE VIEW akan menghasilkan error jika nama view yang ingin dibuat sudah ada sebelumnya.
Keterangan :
o   View_name = nama view
o   Column_list = daftar kolom dari hasil query select..pada badan view. Jumlah kolom pada daftar nama kolom ini harus sama dengan hasil dari query select.
o   Select_statement = query SQL select yang akan dilakukan
Contoh Penggunaan :
o   Kita akan membuat view dari table customer dari training dengan nama view“dt_cust".  Perintahnya adalah sebagai berikut :
CREATE VIEW dt_cust
AS (SELECT nama,alamat,instansi FROM customer ORDER BY nama)
  • Eksekusi perintah berikut untuk memastikan view telah dibuat :
            SELECT * FROM information_schema.views WHERE table_name = 'dt_cust';
Tampilan :


  • Terakhir, query view tersebut untuk melihat hasilnya :
Tampilan :

Mengubah View

Ø  View yang sudah dibuat, dapat diubah dengan perintah ALTER. Berikut ini contoh untuk mengubah view yang sudah ada:


     Menghapus View
  • View yang sudah dibuat, dapat dihapus dengan perintah DROP. Berikut ini bentuk umum dan contoh perintah untuk menghapus view.
                   Contoh : 

Query SQL


                 


Sub Query Pada SQL


              SubQuery AQL digunakan untuk menyelesaikan masalah yang nilainya tidak diketahui pada suatu tabel database.

Contoh :

Diketahui : tabel mahasiswa, tabel ambilMK dan tabel MK
Diketahui : tabel mahasiswa, tabel ambilMK dan tabel MK

Mahasiswa
Nim
Nama


Ambil.MK
Nim
KodMK
Nilai

kodeMK
A01
A02
A03




Permasalahan:
Ambil nama mahasiswa yang nilainya paling tinggi dari tabel diatas dengan kode 'A02'

Penyelesaian :

SELECT mahasiswa.namaMhs, ambilMK.nilai
FROM mahasiswa, ambilMK
WHERE mahasiswa.nim=ambilMK.nim
AND ambilMK.kodeMK='A02'
AND ambilMK.nilai=(select max(nilai) FROM ambilMK WHERE kodeMK='A02');

Keterangan :
SELECT mahasiswa.namaMhs, ambilMK.nilai
FROM mahasiswa, ambilMK
WHERE mahasiswa.nim=ambilMK.nim
AND ambilMK.kodeMK='A02'
AND ambilMK.nilai=
Syntaq diatas merupakan Query, sedangkan subQuerynya :
 (select max(nilai) FROM ambilMK WHERE kodeMK='A02')