Sistem Basis Danny Kriestanto, S.Kom., M.Eng SQL Introduction Setelah Membuat ERD dan Model Relasional, what s next? Bagaimana cara membangun entitas dan relationship tersebut agar dapat digunakan? Bagaimana cara memasukkan data-data ke dalam tabel? Bagaimana cara mengambil data-data yang sudah dimasukkan tadi? Jawabannya: gunakan SQL Structured Query Language Structured Query Language (SQL) merupakan bahasa komputer standar yang digunakan untuk komunikasi dengan sistem basis data relasional. Standarisasi SQL didefinisikan oleh American National Standard Institute (ANSI) dan International Standard Organization (ISO). SQL versi terakhir adalah SQL-99 Kategori Utama Bahasa SQL Secara umum, SQL hanya dibagi atas 2 bagian, yakni: DML ( Manipulation Language), yang memperbolehkan proses atau manipulasi obyek basis data. DDL ( Definition Language), yang mendukung definisi atau pembuatan dari obyek basis data seperti tabel, indeks, sequence, dan view. Meskipun pada kenyataannya, beberapa vendor basis data mempunyai lebih dari dua macam ini. Catatan: penggunaan SQL dalam kuliah ini menggunakan SQL yang digunakan pada Oracle. Definition Language DDL memiliki ciri khas tertentu, yaitu perintah-perintah yang menggunakan klausa/statement/pernyataan CREATE,, atau DROP. Sintaks DDL untuk pembuatan tabel: Definition CREATE TABLE nama_tabel ( Language - CREATE nama_kolom1 tipe_data_kolom1 opsi1, ); nama_kolom2 tipe_data_kolom2 opsi2, Dengan: nama_kolom adalah nama dari field yang akan dibuat Tipe_data_kolom adalah tipe data dari kolom tersebut Opsi memiliki beberapa kemungkinan, seperti: primary key, not null, dan lain sebagainya. Opsi dapat diletakkan di bawah, setelah menyebutkan semua nama_kolom dan tipe_data. 1
Definition Language - CREATE CREATE TABLE nama_tabel ( nama_kolom1 tipe_data_kolom1, ); nama_kolom2 tipe_data_kolom2,, PRIMARY KEY (nama_kolom), FOREIGN KEY (nama_kolom) REFERENCES nama_tabel (nama_kolom) Tipe Setiap DBMS memiliki nama tipe data masingmasing, namun secara umumnya ada beberapa tipe data yang wajib ada. String : Tipe data yang diapit oleh tanda petik tunggal atau petik ganda. Yang termasuk tipe data string adalah VARCHAR, VARCHAR2, dll. Numerik : berfungsi untuk menampung nilai numerik, seperti : NUMBER, FLOAT, INTEGER, dll Tanggal : Tanggal merupakan tipe data krusial yang wajib ada di setiap DBMS. Yang termasuk di antaranya adalah DATE, TIMESTAMP, dll. BLOB : Binary Large Object, yang digunakan untuk menampung data-data berukuran besar, seperti image, file, dsb. Setiap DBMS memiliki macam-macam tipe BLOB yang berbeda, termasuk ukuran data maksimum yang dapat ditampungnya. Pada beberapa DBMS ada juga tipe data lain seperti Boolean. String: contoh: Value CHAR(4) Storage Required VARCHAR(4) '' ' ' 4 bytes '' 1 byte 'ab' 'ab ' 4 bytes 'ab' 3 bytes 'abcd' 'abcd' 4 bytes 'abcd' 5 bytes 'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes Storage Required Oracle : CHAR: 1-2000 byte; VARCHAR/VARCHAR2 : 1 4000 byte Numerik: (MySQL) Type Storag e (Bytes) Minimum Value Maximum Value TINYINT 1-128 127 0 255 SMALLINT 2-32768 32767 0 65535 MEDIUMINT 3-8388608 8388607 0 16777215 INT 4-2147483648 2147483647 0 4294967295 BIGINT 8-92233720368547758 9223372036854775 07 808 0 18446744073709551 615 Numerik: (Oracle) Type Storage (Bytes) Minimum Value Maximum Value Bilangan Positif 1-22 byte -1 x 10-130 Sepanjang 38 digit 9,99 99 x 10 125 sepanjang 38 digit Bilangan Negatif 1 22 byte 1 x 10-130 sepanjang 38 digit 9.99...9 x 10 125 Sepanjang 38 digit Tanggal: (MySQL) secara default berukuran 1-8 byte Type Storage Zero Value (bytes) DATE 3 '0000-00-00' TIME 3 '00:00:00' DATETIME 8 '0000-00-00 00:00:00' TIMESTAMP 4 '0000-00-00 00:00:00' YEAR 1 0000 Tanggal: (Oracle) Secara default berukuran 7 Byte 2
BLOB: (MySQL) 2 16 2 byte BLOB: (Oracle) berukuran standar hingga maksimum 2 32 1 byte atau sekitar 4GB per record Keterangan: ada berbagai tipe variasi tipe data BLOB yang dapat digunakan sesuai kebutuhan. KEY pada Implementasi Tabel Setiap Key yang diciptakan pada tabel memiliki fungsi tersendiri. FOREIGN KEY Konsep tabel induk dan tabel anak, merujuk pada tabel lain yang memiliki PRIMARY KEY, untuk menjaga integrity constraint. INDEX KEY Untuk mempercepat pencarian. Efek samping: memperlambat proses INSERT, UPDATE, dan DELETE UNIQUE KEY Nilai tiap-tiap record/tupel hanya boleh ada satu. PRIMARY KEY Berfungsi ganda, yakni sebagai referensi dari FOREIGN KEY, sebagai INDEX KEY, dan juga sebagai UNIQUE KEY. Integrity Constraint Merupakan batasan-batasan yang diberikan pada skema basis data, tujuannya untuk menjaga konsistensi data. Klausa-klausa yang termasuk dalam constraint adalah: NOT NULL : kolom tidak boleh bernilai null UNIQUE : kolom hanya memiliki nilai tunggal PRIMARY KEY : identifikasi unik untuk setiap baris pada tabel FOREIGN KEY : hubungan kolom dengan kolom dari tabel referensi CHECK : memberikan suatu kondisi yang bernilai benar Definition Language - CREATE Contoh kasus (on board) slide 4 halaman 28 untuk tabel PEGAWAI dan KLIEN Catatan: Di tabel pegawai masih terdapat tupel nilai ganda, hilangkan redundansinya => primary key. Definition Language - CREATE PEGAWAI KLIEN PEGAWAI_KLIEN No_peg E38 Nama_peg Nina Tono Hadi Id_klien K05 K08 K02 K04 K10 K06 K24 K90 Nama_klien Martini Anton Sarmini Eka Andin Mitha Buyung Indah No_peg E38 E38 Id_klien K05 K08 K02 K04 K10 K06 K24 K90 Alter berfungsi untuk merubah/menambahi/menghapus sesuatu pada obyek yang telah dibuat. Misalnya: menambah kolom memodifikasi kolom memberikan nilai default pada kolom baru menghapus kolom Namun operasi tersebut tidak terbatas hanya pada tabel saja. 3
Perintah dasar untuk menambah kolom tabel: TABLE nama_tabel ADD COLUMN ( nama_kolom tipe_data [DEFAULT ekspresi], nama_kolom tipe_data [DEFAULT ekspresi], ); Perintah untuk modifikasi tabel TABLE nama_tabel MODIFY ( nama_kolom tipe_data [DEFAULT ekspresi] nama_kolom tipe_data [DEFAULT ekspresi] ); PERINTAH untuk menambah PRIMARY KEY TABLE nama_tabel ADD CONSTRAINT nama_kunci PRIMARY KEY (nama_kolom); Perintah untuk menambah foreign key. TABLE nama_tabel ADD CONSTRAINT nama_kunci FOREIGN KEY (nama_kolom_tabel_anak) REFERENCES nama_tabel_induk (nama_kolom_tabel_induk); Perintah untuk menghapus kolom: TABLE nama_tabel DROP (nama_kolom); Merubah nama tabel: RENAME nama_lama TO nama_baru; Menghapus tabel: DROP TABLE nama_tabel opsi; Pada Oracle, opsi terdiri atas perintah CASCADE DELETE dan PURGE CASCADE DELETE untuk ikut menghapus semua integrity constraint PURGE untuk menghapus tabel tanpa dapat di-undo (hilang selamanya) Ringkasan DDL CREATE CREATE SCHEMA / CREATE DATABASE CREATE TABLE CREATE VIEW SCHEMA / DATABASE TABLE VIEW DROP DROP SCHEMA DROP TABLE DROP VIEW CONSTRAINT, contoh: CREATE TABLE FOREIGN KEY REFERENCES TABLE ADD FOREIGN KEY REFERENCES TABLE DROP FOREIGN KEY Manipulation Language Pada dasarnya, perintah DML terdiri hanya atas 4 model dasar, yakni: SELECT, INSERT, UPDATE, DELETE. Namun pada Oracle, SELECT tidak termasuk dalam kategori ini, dan digantikan dengan perintah MERGE. Perintah-perintah ini ini dapat dipautkan dengan perintah dari bahasa pemrograman sehingga dapat dikerjakan lewat event tertentu (penekanan tombol, dsb.) Manipulation Language - INSERT INSERT merupakan perintah untuk memasukkan data ke dalam tabel. Sintaks dasarnya: INSERT INTO nama_tabel (nama_kolom1, nama_kolom2, ) VALUES (nilai1, nilai2, ); Jikalau nama_kolom yang akan di-insert urutannya telah sesuai dengan yang ada pada struktur tabel, nama_kolom tidak perlu disebutkan. Sehingga sintaksnya dapat diperpendek menjadi: INSERT INTO nama_tabel VALUES (nilai1, nilai2, ); Catatan: nilai yang tipe datanya string harus menggunakan tanda petik tunggal yang mengapit nilai tersebut. 4
Manipulation Language - UPDATE UPDATE digunakan untuk mengubah record/tupel yang telah di-insert sebelumnya. Jika tanpa menggunakan syarat, semua tupel akan diganti. Sintaks dasarnya: UPDATE nama_tabel SET nama_kolom = nilai [WHERE nama_kolom operator syarat]; Ada macam-macam tipe operator: Single value: =, <. >, <=, >= Multi value : IN, ALL, ANY Manipulation Language - DELETE Delete digunakan untuk menghapus tupel. Jika tanpa menggunakan syarat, semua data dalam tabel tersebut akan dihapus. Sintaks dasarnya: DELETE FROM nama_tabel [WHERE nama_kolom operator syarat;] Manipulation Language - SELECT Perintah ini digunakan untuk mengambil data dari dalam tabel. Merupakan perintah yang paling sering digunakan jika dibandingkan perintah-perintah SQL yang lain. Struktur dasar sintaks SELECT: SELECT [DISTINCT] nama_kolom1, nama_kolom2, FROM daftar_nama_tabel [WHERE nama_kolom operator syarat [AND/OR nama_kolom2 operator syarat ]] [GROUP BY nama_kolom] [HAVING fungsi_agregasi(nama_kolom) operator syarat] [ORDER BY nama_kolom ASC/DESC]; Ekspresi Aritmetika Operator Deskripsi + Penjumlahan - Pengurangan * Perkalian / Pembagian Urutan Pengerjaan: *, /, +, - Fungsi_agregasi akan dibahas nanti. Operator Perbandingan Operator Arti = Sama dengan > Lebih besar dari >= Lebih besar atau sama dengan < Kurang dari <= Kurang dari atau sama dengan <> Tidak sama dengan!= Tidak sama dengan ^= Tidak sama dengan BETWEEN AND Berada di antara 2 value IN( himpunan ) Yang cocok dengan salah satu yang terdapat dalam set LIKE Yang cocok dengan pola karakter tertentu IS NULL Jika value-nya merupakan nilai null Logika Kondisi Operator Arti AND OR NOT Menghasilkan TRUE apabila kedua komponen benar Menghasilkan TRUE apabila salah satu komponen benar Menghasilkan TRUE apabila kondisinya false 5
Tata Urutan Operator Dari sekian banyak operator yang telah disebutkan sebelumnya, tata urutan pengerjaannya dapat dilihat pada tabel berikut. Urutan Pengerjaan Operator 1 Operator aritmetika 2 Operator penggabungan 3 Operator perbandingan 4 IS [NOT] NULL, LIKE, [NOT] IN 5 [NOT] BETWEEN 6 Kondisi logika NOT 7 Kondisi logika AND 8 Kondisi logika OR 6