Modul MySQL 2010

24
1 MODUL PRAKTIKUM BASIS DATA MySQL 5.1.30 Oleh : Wiwik Suharso, S.Kom 132315176 19760906 2005011003 JURUSAN TEKNIK INFORMATIKA F A K U L T A S T E K N I K UNIVERSITAS MUHAMMADIYAH JEMBER 2010

Transcript of Modul MySQL 2010

Page 1: Modul MySQL 2010

1

MODUL PRAKTIKUM BASIS DATA

MySQL 5.1.30

Oleh :

Wiwik Suharso, S.Kom

132315176 19760906 2005011003

JURUSAN TEKNIK INFORMATIKA

F A K U L T A S T E K N I K

UNIVERSITAS MUHAMMADIYAH JEMBER

2010

Page 2: Modul MySQL 2010

2

MODUL I

BAHASA SQL – DDL

Materi : Database, Table, Relationship, Studi Kasus Perpustakaan

MySQL merupakan software sistem manajemen basis data (Database Management

System) yang popular. MySQL bersifat open source. Website MySQL www.mysql.com

menyediakan informasi terkini tentang MySQL.

Pengelolaan database dapat dilakukan dengan menggunakan perintah-perintah SQL

(Struktur Query Language), bahasa yang khusus digunakan dalam basis data relasional.

Perintah-perintah SQL dikelompokkan menjadi :

1. DDL (Data Definition Language)

DDL berisi perintah-perintah bahasa SQL untuk pembuatan objek database,

table, index, pengaturan relationship, dan melakukan perubahan dalam

menentukan struktur penyimpanan data.

2. DML (Data Manipulation Language)

DML berisi perintah-perintah bahasa SQL untuk melakukan manipulasi dan

pengambilan data pada suatu basis data, yang mencerminkan operasi dasar

dari suatu basis data berupa penyisipan atau penambahan data baru (insert),

penghapusan data (delete), pengubahan data (update), dan menampilkan data

kembali dalam berbagai cara, gaya dan kebutuhan (select)

3. DCL (Data Control Language)

DCL berisi perintah-perintah bahasa SQL untuk melakukan pengaturan

terhadap keamanan dan pengontrolan basis data.

Keamanan dalam basis data diwujudkan dalam pemberian atau pencabutan

hak akses pemakai (user privileges) pada berbagai tingkatan pengguna (admin,

supervisor, user) pada akses database, table, dan field. Sedangkan pengontrolan

dalam basis data diwujudkan dalam perintah untuk penguncian (lock) suatu

data pada suatu simpul saat suatu perubahan dilakukan, mengesahkan

(commit) atau membatalkan (rollback) suatu perintah pemasukan data.

User dapat menggunakan MySQL melalui tampilan grafis (GUI) milik Xampp. Dalam

GUI user dapat menggunakan perpaduan fitur-fitur siap pakai pada Xampp (GUI)

dengan pemberian perintah SQL pada tab SQL (SQL).

1. Memulai MySQL

Secara default, MySQL diaktifkan dengan user root, host 127.0.0.1, dan privileges

all privileges. 127.0.0.1 merupakan IP Address localhost, dimana sistem MySQL

berada. Setiap orang dapat mengaktifkan sistem MySQL dengan status user

sebagai administrator, hal ini sangat tidak aman.

Page 3: Modul MySQL 2010

3

- Pastikan pada Xampp Control Panel Application running Apache dan MySQL

- Membuka browser, dan pada bagian URL ketikkan http://localhost/xampp/

- Klik phpMyAdmin untuk mengaktifkan MySQL

2. Membuat Database

Pemberian nama database tidak diperbolehkan menggunakan spasi atau karakter

khusus lainnya, dan tidak boleh hanya angka.

GUI – Pada kotak ciptakan database baru, Masukkan nama database

Tekan tombol Ciptakan

SQL – Pada tab SQL, berikan perintah CREATE DATABASE <nama_database>

Tekan tombol Go

3. Menghapus Database

Adakalanya database dihapus karena tidak diperlukan lagi. Penghapusan suatu

database, mengakibatkan penghapusan semua tabel, data, dan relasi didalamnya.

GUI – Pada tab Database, berikan centang untuk database yang akan dihapus

Tekan tombol Hapus

SQL – Pada tab SQL, berikan perintah DROP DATABASE <nama_database>

Tekan tombol Go

4. Membuat Table

Pemberian nama table tidak diperbolehkan menggunakan spasi atau karakter

khusus lainnya. Setiap tabel mempunyai field-field yang masing-masing harus

ditentukan tipe datanya. Tipe data menyatakan jenis data, ukuran data, dan

jangkauan nilai yang diperbolehkan. MySQL mempunyai tipe data sebagai berikut :

Tipe data untuk bilangan

Tipe Data Keterangan

TINYINT Ukuran 1 byte. Bilangan bulat terkecil, dengan jangkauan bilangan bertanda: -128 sampai dengan 127 dan untuk yang tidak bertanda : 0 sampai dengan 255. Bilangan tak bertanda ditandai dengan tanda UNSIGNED

SMALLINT Ukuran 2 byte. Bilangan bulat dengan jangkauan bilangan bertanda : -32768 sampai dengan 32767 dan untuk yang tidak bertanda : 0 sampai dengan 65535.

MEDIUMINT Ukuran 3 byte. Bilangan bulat dengan jangkauan bilangan bertanda : -8388608 sampai dengan 8388607 dan untuk bertanda : 0 sampai dengan 16777215

INT Ukuran 4 byte. Bilangan bulat dengan jangkauan bilangan

Page 4: Modul MySQL 2010

4

bertanda : - 2147483648 sampai dengan 2147483647 dan

untuk yang tidak bertanda : 0 sampai dengan 4294967295

INTEGER Ukuran 4 byte. Sinonim dari INT

BIGINT Ukuran 8 byte. Bilangan bulat terbesar dengan jangkauan bilangan bertanda : -9223372036854775808 sampai dengan 9223372036854775807 dan untuk yang tidak bertanda : 0 sampai dengan 18446744073709551615

FLOAT Ukuran 4 byte. Bilangan pecahan presisi tunggal dengan jangkauan nilai 1.175494351E-38 (tanpa nilai 0) sampai dengan 6.402823466E+38

DOUBLE Ukuran 8 byte. Bilangan pecahan presisi ganda dengan jangkauan nilai 2.2250738580720E-308 (tanpa nilai 0) sampai dengan 1.7976931348623157E+308

DOUBLE PRECISION Ukuran 8 byte. Bilangan pecahan berpresisi ganda

REAL Ukuran 8 byte. Sinonim dari DOUBLE

DECIMAL(M,D) Ukuran M byte. Bilangan pecahan. Misalnya DECIMAL(5,2) dapat digunakan untuk menyimpan bilangan -99,99 sampai dengan 99,99

NUMERICAL(M,D) Ukuran M byte. Sinonim dari DECIMAL. Misalnya NUMERICAL(5,2) dapat digunakan untuk menyimpan bilangan -99,99 sampai dengan 99,99

Tipe data untuk tanggal dan jam

Tipe Data Keterangan

DATETIME Ukuran 8 byte. Kombinasi tanggal dan jam, dengan format “YYYY-MM-DD hh:mm:ss”, jangkauan dari ‘100-01-01 00:00:00’ sampai dengan ‘9999-12-31 23:59:59’

DATE Ukuran 3 byte. Tanggal dengan format “YYYY-MM-DD”, jangkauan dari ‘1000-01-01’ sampai dengan ‘9999-12-31’

TIMESTAMP Ukuran 4 byte. Kombinasi tanggal dan jam dengan format “YYYYMMDDhhmmss”, jangkauan ‘19700101000000’ sampai dengan tahun 2037

TIME Ukuran 3 byte. Waktu dengan format “hh:mm:ss”, jangkauan nilai dari ‘-838:59:59’ sampai dengan ‘838:59:59’

YEAR Ukuran 1 byte. Data tahun antara 1901 sampai dengan 2155

Tipe data untuk karakter dan lain-lain

Tipe Data Keterangan

CHAR(M) Ukuran M byte,1 ≤ M ≤ 255 . Data string dengan panjang yang tetap. CHAR(1) cukup ditulis dengan CHAR.

VARCHAR(M) Ukuran L=1 byte dengan L ≤ M dan 1 ≤ M ≤ 255 . Data string dengan panjang bervariasi, tergantung datanya

TINYBLOB, TINYTEXT

L+1 byte, dengan L < 28 . Tipe TEXT atau BLOB dengan panjang maksimum 255 karakter

BLOB,TEXT L+2 byte, dengan L < 216 . Tipe TEXT atau BLOB dengan panjang

Page 5: Modul MySQL 2010

5

maksimum 65535 karakter

MEDIUMBLOB, MEDIUMTEXT

L+3 byte, dengan L < 224 . Tipe TEXT atau BLOB dengan panjang maksimum 16777215 karakter

LONGBLOB, LONGTEXT

L+4 byte, dengan L < 232 . Tipe TEXT atau BLOB dengan panjang maksimum 4294967295 karakter

ENUM(‘nilai1’, ’nilai2’,…)

Ukuran 1 atau 2 byte tergantung jumlah enumerasinya (maksimum 65535 nilai)

SET(‘nilai1’, ‘nilai2’, …)

1, 2, 3, 4 atau 8 byte, tergantung jumlah anggota himpunan (maksimum 64 anggota)

GUI – Pilih database yang akan diaktifkan

Pada kotak ciptakan tabel baru, Masukkan nama tabel dan jumlah field

Tekan tombol Go

Mengisi struktur tabel pada kotak isian yang tersedia

Tekan tombol Simpan

SQL – Pada tab SQL, berikan perintah

USE <nama_database>

CREATE TABLE <nama_table> (

<field1> <tipedata1> [<aturanField1>],

<field2> <tipedata2> [<aturanField2>],

...

<fieldn> <tipedatan> [<aturan_fieldn>],

[<aturanTabel] )

Tekan tombol Go

aturanFieldn berisi aturan untuk field yang bersangkutan, [] bersifat optional, dan

dapat berupa :

AUTO_INCREMENT Khusus field dengan tipe integer, kenaikan 1 setiap record

PRIMARY KEY Khusus field yang akan dijadikan sebagai kunci utama

NOT NULL Field tersebut tidak boleh kosong, harus diisi

DEFAULT <nilai> Jika tidak diisi, maka nilai default yang diberikan

UNSIGNED Bilangan tersebut tidak memiliki nilai negatif, hanya positif

ZEROFILL Menempatkan angka 0 didepan bilangan

Sedangkan aturanTabel berisi aturan untuk tabel yang bersangkutan. Jika aturan lebih

dari satu, maka dibatasi oleh tanda koma, dapat berupa :

PRIMARY KEY (<fields>)

FOREIGN KEY (<fields >) REFERENCES <nama_tabel> (<fields>)

[ON DELETE <aturanDelete>] [ON UPDATE <aturanUpdate>]

[ON INSERT <aturanInsert>]

Page 6: Modul MySQL 2010

6

Khusus untuk aturanTabel yang diberi nama_aturan, diberikan perintah :

CONSTRAINT <nama_aturan> <aturanTabel>

Pemberian aturanTabel disamping untuk mengatur batasan (constraint) untuk tabel

yang bersangkutan seperti primary key dan unique, juga mengatur atau menentukan

hubungan (relations) dengan tabel lain seperti :

- FOREIGN KEY yang merujuk ke primary key dari tabel lain

- <aturanDelete> dapat terdiri dari salah satu dari cascade, restrict, ignore

Cascade : penghapusan record di parent table, akan diikuti oleh penghapusan

record-record yang terelasi pada child table

Restrict : mencegah proses penghapusan record di parent table, jika record

tersebut berelasi dengan record-record pada child table

Ignore : mengabaikan referensi

- <aturanUpdate> dapat terdiri dari salah satu dari cascade, restrict, ignore

Cascade : pembaharuan record di parent table, akan diikuti oleh

pembaharuan record-record yang terelasi pada child table

Restrict : mencegah proses pembaharuan record di parent table, jika record

tersebut berelasi dengan record-record pada child table

Ignore : mengabaikan referensi

- <aturanInsert> dapat terdiri dari salah satu dari restrict, ignore

Restrict : mencegah proses penambahan record baru di child table, jika data

yang dimasukkan pada kolom foreign key child table tersebut tidak

terdapat pada parent table

Ignore : mengabaikan referensi

Dalam kenyataannya, sampai dengan MySQL 5.1.30 aturan referential (referential

integrity constraint) belum berfungsi sebagaimana mestinya. Hal ini menyebabkan user

harus mengaturnya pada level aplikasi dengan memberikan code/script yang sesuai,

dan bukan pada level database.

5. Menghapus Table

Adakalanya tabel dihapus karena tidak diperlukan lagi. Penghapusan suatu tabel,

mengakibatkan penghapusan semua field, data, dan relasi yang melekat pada tabel

tersebut.

GUI – Pilih database, dimana tabel berada

Pada tab Struktur, tekan tombol Hapus (û) pada tabel yang bersangkutan

SQL – Pada tab SQL, berikan perintah DROP TABLE <nama_tabel>

Tekan tombol Go

Page 7: Modul MySQL 2010

7

6. Memodifikasi Struktur Table

Melakukan perubahan pada struktur tabel dapat dilakukan dengan menambah

field baru, menghapus sebagian field lama, dan merubah nama field, tipe data, dan

nama tabel.

GUI – Pilih tabel, dimana struktur tabelnya akan dimodifikasi

Pada tab Struktur, pilih field yang bersangkutan

Tekan tombol Hapus (û), atau ubah (!) dan lakukan modifikasi

SQL – Pada tab SQL, berikan perintah ALTER TABLE <namatabel> <modifikasi>

Menambah field :

ALTER TABLE <namatabel> ADD <namafield> <tipedatabaru>

Menghapus field :

ALTER TABLE <namatabel> DROP COLUMN <namafield>

Merubah nama field :

ALTER TABLE <namatabel> CHANGE <namafieldlama> <namafieldbaru>

<tipedata>

Merubah Tipe Data :

ALTER TABLE <namatabel> MODIFY <namafield> <tipedatabaru>

Mengganti nama tabel :

ALTER TABLE <namatabellama> RENAME <namatabelbaru>

7. Menentukan Relationship

Pengaturan terhadap relasi antara satu tabel dengan tabel lain yang berhubungan

sangat diperlukan untuk menjaga konsistensi record-record data antara dua buah

tabel atau penerapan aturan referential secara ketat terhadap modifikasi data

sehingga dapat meminimalkan kesalahan modifikasi yang sangat mungkin

dilakukan oleh user.

GUI – Pilih tabel child table, dimana foreign key berada

Pada tab Struktur, tekan teks Tampilan relasi

Pada tampilan Link, pasangkan foreign key dari child table ke primary key

dari parent table

Tekan tombol Simpan

Untuk melihat visualisasi dari relationship, Pilih database, dan tab Designer

• Pengaturan relations juga dapat dilakukan langsung pada tab Designer

SQL – Pembuatan relationship terjadi saat pembuatan tabel child table dengan

perintah SQL dengan pemberian aturanTable seperti foreign key, dan

cascade, restrict, ignore pada on delete, on update, on insert

Page 8: Modul MySQL 2010

8

Studi Kasus Perpustakaan Universitas :

Beberapa asumsi yang digunakan :

- Perpustakaan mempunyai anggota terdiri dari dosen, karyawan, dan

mahasiswa yang mempunyai kuota jumlah peminjaman buku yang berbeda.

- Perpustakaan mengelola koleksi buku yang diklasifikan dalam berbagai tipe

koleksi, dan berasal dari berbagai penerbit dan pengarang.

- Perpustakaan memberikan layanan peminjaman dan pengembalian koleksi

buku kepada para anggota.

Diberikan suatu database relationship sebagai berikut :

Diberikan sekumpulan perintah SQL untuk mengimplementasikannya :

create database dbPerpus;

use dbperpus;

create table tbJenisAnggota(

idJenisAnggota smallint auto_increment not null primary key,

JenisAnggota varchar(25) not null unique,

PinjamPerHari smallint

)

Page 9: Modul MySQL 2010

9

create table tbAnggota(

idAnggota char(3), Nama varchar(50), idJnsAnggota smallint,

Alamat varchar(50), JK enum('P','W'), TglLahir date,

primary key(idAnggota),

foreign key(idJnsAnggota) references tbJenisAnggota(idJenisAnggota)

on delete restrict on update cascade

)

create table tbPengarang(

idPengarang smallint auto_increment not null primary key,

Nama varchar(25) not null, Alamat varchar(25) not null,

JK enum('P','W'), TglLahir date )

create table tbTipeKoleksi(

idTipeKoleksi smallint auto_increment not null primary key,

TipeKoleksi varchar(25) not null unique, LamaPinjam smallint )

create table tbPenerbit(

idPenerbit smallint auto_increment not null primary key,

Nama varchar(25) not null, Alamat varchar(25) not null,

Telepon varchar(15) )

create table tbKoleksi(

idKoleksi char(5), Judul varchar(50), idTipeKoleksi smallint not null,

idPengarang smallint not null, idPenerbit smallint not null,

Keterangan varchar(50), Harga int, DendaPerHari int,

primary key(idKoleksi),

constraint refKolTipe foreign key(idTipeKoleksi) references

tbTipeKoleksi(idTipeKoleksi) on delete restrict on update cascade,

constraint refKolPengarang foreign key(idPengarang) references

tbPengarang(idPengarang) on delete restrict on update cascade,

constraint refKolPenerbit foreign key(idPenerbit) references

tbPenerbit(idPenerbit) on delete restrict on update cascade

)

create table tbPeminjaman(

idPinjam smallint auto_increment not null, TglPinjam date,

idKoleksi smallint not null, idAnggota smallint not null,

TglHarusKembali date, TglKembali date, BayarDenda int,

primary key(idPinjam,TglPinjam),

constraint refPinKol foreign key(idKoleksi) references tbKoleksi(idKoleksi)

on delete restrict on update cascade,

constraint refPinAnggota foreign key(idAnggota) references

tbAnggota(idAggota)

on delete restrict on update cascade

)

Page 10: Modul MySQL 2010

10

MODUL II

BAHASA SQL - DML

Materi : Insert, Update, Delete, Select, Studi Kasus Perpustakaan

Setelah objek database, tabel, dan penentuan aturan referential selesai dibuat, maka selanjutnya bagaimana melakukan pengisian data, perbaikan data, penghapusan data, pengambilan dan pencarian kembali data.

1. Memasukkan Data (Insert)

INSERT INTO <nama_tabel> [ (field1, field2, …) ] VALUES (nilai1, nilai2, ...) | SELECT

<namaTabel> adalah tabel yang akan diisi data.

[(field1, field2, …)] adalah field-field di dalam tabel yang akan diisi data nilai sesuai

urutannya. Bersifat optional, karena pengisian data untuk semua field boleh tidak

menyertakan field.

(nilai1 ,nilai2, …) adalah nilai tunggal yang akan diisikan sesuai dengan tipe data

field yang akan menampung. Jika nilai yang akan diisikan berasal dari tabel lain

atau hasil query dari tabel lain, maka digunakan perintah SELECT dengan

ketentuan jumlah kolom dan tipe datanya sama.

Contoh : INSERT INTO tbPenerbit VALUES (1, 'PT. Ilmu', 'Jl Karimata', '59911111'); INSERT INTO tbPenerbit (IdPenerbit, Nama) VALUES (2, 'PT. Graha Ilmu');

2. Memperbaiki Data (Update)

UPDATE <nama_tabel> SET <field1>=<nilai1> [,<field2>=<nilai2> [,…]] [WHERE kondisi] <nama_tabel> adalah tabel yang akan diperbaiki datanya. <Field1> adalah nama field dalam tabel yang akan diubah. Nilai1 adalah data yang akan dimasukkan ke dalam field1. field2 dan nilai2 adalah nama field dan datanya, dan seterusnya. Kondisi adalah kriteria data dalam tabel yang akan diperbaiki. Contoh : UPDATE tbKoleksi SET Harga=Harga*1.1; UPDATE tbKoleksi SET Keterangan = 'Buku TA' WHERE idTipeKoleksi=4;

3. Menghapus Data (Delete)

DELETE FROM <nama_tabel> [WHERE kondisi]

<nama_tabel> adalah nama tabel yang akan dihapus datanya. Kondisi adalah kriteria data dalam tabel yang akan dihapus.

Page 11: Modul MySQL 2010

11

Contoh :

DELETE FROM tbPeminjaman ; DELETE FROM tbKoleksi WHERE idTipeKoleksi=4 ;

4. Manampilkan Data (Select)

SELECT [DISTINCT] <select_list> FROM <table_source> [WHERE <search_condition>] [GROUP BY <group_by_expression>] [HAVING <search_condition>] [ORDER BY <order_expression> [ASC | DESC] ]

Perintah select merupakan perintah untuk mencari atau menampilkan data secara

keseluruhan atau sebagian sesuai dengan kriteria baik dalam satu tabel maupun

dalam banyak tabel. Perintah ini digunakan untuk menghasilkan informasi dalam

berbagai cara, gaya dan kebutuhan dalam bentuk pelaporan.

Perintah select secara bertahap dapat dijelaskan sebagai berikut :

SELECT [DISTINCT] <select_list> SELECT merupakan perintah untuk menampilkan data, [DISTINCT] bersifat optional

untuk menghilangkan duplikasi data dari hasil query (hasil query yang sama

ditampilkan sekali), <select_list> berisi daftar field-field yang datanya akan

ditampilkan. Jika lebih dari satu field, maka dipisahkan koma.

FROM <table_source> FROM merupakan perintah untuk menunjukkan asal dari sumber data.

<table_source> berisi daftar tabel atau view yang menjadi sumber data. Jika

melibatkan lebih dari satu tabel, maka dipisahkan oleh koma.

[WHERE <search_condition>] WHERE merupakan perintah untuk melakukan penyaringan data (filter) sesuai kriteria dalam <search_condition>, dan juga digunakan untuk merelasikan satu

tabel dengan tabel lain untuk menghasilkan query atau view yang melibatkan banyak tabel. Jika melibatkan lebih dari satu <search_condition>, dapat dihubungkan dengan operator AND atau OR sesuai kebutuhan. Untuk tujuan filter, pada <search_condition> dapat digunakan (1) operasi perbandingan (= < <= >= > <> is ), (2) operasi pendekatan pola (LIKE) dengan simbol % menyatakan sembarang karakter tak terhingga, dan _ menyatakan satu karakter tunggal. (3) operasi pembandingan dengan sekumpulan nilai dengan perintah IN dan NOT IN.

Page 12: Modul MySQL 2010

12

[GROUP BY <group_by_expression>] GROUP BY digunakan untuk pengelompokan data fungsi-fungsi agregate. Fungsi

agregate merupakan fungsi yang digunakan untuk summary atau akumulasi nilai

dari setiap baris record pada tabel atau view.

Fungsi agregate terdiri dari (1) COUNT(*) untuk mendapatkan jumlah baris, (2)

SUM(kolom) untuk mendapatkan hasil penjumlahan kolom, (3) MAX(kolom) untuk

mendapatkan nilai tertinggi, (4) MIN(kolom) untuk mendapatkan nilai terendah,

(5) AVG(kolom) untuk mendapatkan nilai rata-rata.

<group_by_expression> berisi daftar field yang akan dijadikan sebagai dasar dalam

pengelompokan. Field-field dalam <group_by_expression> harus sama dengan

field-field yang dinyatakan dalam SELECT selain fungsi aggregate.

[HAVING <search_condition>] HAVING digunakan untuk penyaringan data (filter) yang hanya menggunakan fungsi-fungsi aggregate. [ORDER BY <order_expression> [ASC | DESC] ] ORDER BY digunakan untuk pengurutan berdasarkan field-field tertentu dalam

<order_expression>. Pengurutan dilakukan menaik (ASC) atau menurun (DESC).

Contoh : SELECT ... FROM

a. Menampilkan keseluruhan field

SELECT * FROM tbAnggota;

SELECT idAnggota, Nama, idJnsAnggota, Alamat, JK, TglLahir FROM

tbAnggota;

b. Menampilkan kolom-kolom tertentu

SELECT Nama, JK, Alamat FROM tbAnggota ; # field tabel

SELECT 1, Nama, Alamat FROM tbAnggota ; # konstanta

SELECT UPPER(nama), alamat FROM tbAnggota ; # fungsi

c. Menggunakan distinct untuk menghilangkan duplikasi

SELECT DISTINCT idAnggota FROM tbPeminjaman ;

d. Mengubah judul kolom (nama alias field)

SELECT Nama AS NmAnggota, Alamat AS AlamatAnggota FROM tbAnggota ;

e. Menyertakan nama table, alias tabel

SELECT tbAnggota.Nama, tbAnggota.Alamat FROM tbAnggota ;

SELECT A.Nama, A.Alamat FROM tbAnggota A ; #table

SELECT AP.Nama, AP.Alamat FROM vwAnggotaPria AP ; #view

SELECT A.Nama, J.JenisAnggota FROM tbAnggota A, tbJenisAnggota J;

Page 13: Modul MySQL 2010

13

Contoh : SELECT ... FROM ... WHERE untuk Filter

a. Menggunakan operasi perbandingan

SELECT * FROM tbAnggota WHERE JK=’P’;

SELECT * FROM tbAnggota WHERE year(TglLahir) > 1985

SELECT * FROM tbAnggota WHERE JK="P" AND month(TglLahir)=1

SELECT * FROM tbPeminjaman WHERE TglKembali IS NULL

b. Menggunakan operasi pendekatan pola

SELECT * FROM tbAnggota WHERE Nama LIKE "A%"

SELECT * FROM tbAnggota WHERE Nama LIKE "__a%"

SELECT * FROM tbKoleksi WHERE Judul LIKE "%pemrograman%"

c. Menggunakan operasi IN dan NOT IN

SELECT * FROM tbKoleksi WHERE idTipeKoleksi IN (1, 2) ;

SELECT * FROM tbAnggota WHERE idJnsAnggota NOT IN (2, 3) ;

SELECT * FROM tbAnggota WHERE idAnggota NOT IN (SELECT DISTINCT

idAnggota FROM tbPeminjaman) ;

SELECT * FROM tbKoleksi WHERE idKoleksi IN (SELECT idKoleksi

FROM tbPeminjaman WHERE TglKembali is NULL) ;

Contoh : SELECT ... FROM ... WHERE untuk Relasi

a. Mengambil informasi pada dua tabel tanpa kondisi tambahan

SELECT KL.idKoleksi, KL.Judul, PG.Nama

FROM tbKoleksi KL, tbPengarang PG

WHERE KL.idPengarang=PG.idPengarang

b. Mengambil informasi dari dua tabel atau lebih dengan kondisi tambahan

SELECT KL.idKoleksi, KL.Judul, KL.Harga

FROM tbKoleksi KL, tbPeminjaman PJ, tbAnggota AG

WHERE PJ.idKoleksi=KL.idKoleksi AND PJ.idAnggota=AG.idAnggota

AND AG.idAnggota = ‘101’ ORDER BY KL.Judul

Contoh : SELECT ... FROM ... WHERE ... GROUP BY

a. Menggunakan fungsi-fungsi agregate

SELECT COUNT(*) FROM tbAnggota ;

SELECT MIN(year(TglLahir)) FROM tbAnggota ;

b. Menggunakan Group By

SELECT JK, COUNT(*) FROM tbAnggota

GROUP BY JK;

Page 14: Modul MySQL 2010

14

SELECT idPenerbit, AVG(Harga) FROM tbKoleksi

GROUP BY idPenerbit ;

SELECT idPenerbit, AVG(Harga) FROM tbKoleksi

WHERE Harga >=50000

GROUP BY idPenerbit ;

Contoh : SELECT ... FROM ... WHERE ... GROUP BY ... HAVING

SELECT idPenerbit, COUNT(*) FROM tbKoleksi

GROUP BY idPenerbit

HAVING COUNT(*)>10

Contoh : SELECT ... FROM ... ORDER BY

SELECT * FROM tbAnggota WHERE JK=’P’

ORDER BY idAnggota;

5. Manampilkan Data (Select – Joining)

Perintah pada Select-Joining dimaksudkan untuk menggabungkan beberapa data

pada beberapa tabel dalam berbagai gaya dan kebutuhan. Penggabungan tersebut

melibatkan semua data yang ada pada masing-masing tabel. Oleh karenya, tidak

menggunakan WHERE, GROUP BY, HAVING, ORDER BY.

SELECT [DISTINCT] <select_list> FROM <table_source_utama> INNER JOIN | STRAIGHT_JOIN | LEFT JOIN | RIGHT JOIN | NATURAL RIGHT JOIN <table_join> ON <kondisi>

Diberikan suatu data awal sebagai berikut :

tbKoleksi

tbTipeKoleksi

Page 15: Modul MySQL 2010

15

Perintah-perintah yang biasa digunakan yaitu :

• Inner Join

Contoh : SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi

FROM tbKoleksi KL

INNER JOIN tbTipeKoleksi TP ON KL.idTipeKoleksi=TP.idTipeKoleksi

• Straight Join

Identik dengan Join Contoh SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi

FROM tbKoleksi KL

STRAIGHT_JOIN tbTipeKoleksi TP ON KL.idTipeKoleksi=TP.idTipeKoleksi

• Left (outer) Join

Left outer join akan menampilkan tabel di sebelah kanannya dengan NULL jika tidak terdapat hubungan dengan tabel di sebelah kiri.

Contoh : SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi

FROM tbKoleksi KL

LEFT JOIN tbTipeKoleksi TP ON KL.idTipeKoleksi=TP.idTipeKoleksi

Page 16: Modul MySQL 2010

16

• Right (outer) Join

Kebalikan dengan left outer join, jika data di sebelah kanan tabel tidak dapat menemukan hubungannya dengan tabel disebelah kiri, akan ditampilkan NULL. Contoh : SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi

FROM tbKoleksi KL

RIGHT JOIN tbTipeKoleksi TP ON KL.idTipeKoleksi=TP.idTipeKoleksi

• Natural (Right|Left (Outer)) Join

Contoh : SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi

FROM tbKoleksi KL

NATURAL RIGHT JOIN tbTipeKoleksi TP

• Cross Join

Contoh : SELECT * FROM tbKoleksi CROSS JOIN tbTipeKoleksi

Page 17: Modul MySQL 2010

17

MODUL III

BAHASA SQL – DDL,DML – Advance

Materi : View, Store Procedure, Trigger

Setelah objek database, tabel, aturan referential, dan manipulasi data selesai dipahami dan dipraktekkan, maka selanjutnya mengenal fitur-fitur pengembangan yang akan menjadikan database dapat berguna secara optimal (powerfull).

1. Membuat View

View menyimpan sebagian data yang memenuhi kondisi atau kriteria tertentu, sumber datanya berasal dari tabel-tabel dalam sebuah database. Oleh karenanya, jika pada tabel-tabel sumber terdapat modifikasi maka data-data yang ditampilkan/tersimpan dalam view juga akan berubah mengikuti perubahan data pada tabel-tabel sumber tersebut. Hal ini dapat dipahami karena view tidak menyimpan data secara fisik, tetapi virtual. Table (Physic) View (Virtual)

CREATE VIEW <nama_view> AS <ekspresi_Query>; CREATE VIEW merupakan perintah untuk membuat view. <nama_view> adalah nama dari view yang akan dibuat untuk menyimpan hasil query dari tabel-tabel. <ekspresi_Query> adalah perintah select dan kondisi query yang ditentukan sama seperti halnya pada saat kita melakukan perintah select dengan menggunakan kondisi (criteria) tertentu. Contoh : Membuat view dengan nama Anggota_Dosen yang menyimpan data anggota

yang mempunyai idJenisAnggota 1, perintah yang diberikan :

CREATE VIEW Anggota_Dosen AS

SELECT * FROM tbAnggota WHERE idJenisAnggota=1;

Dengan pola dan pengertian yang sama, diberikan contoh lain :

CREATE VIEW Koleksi_Jogiyanto AS

SELECT * FROM tbKoleksi WHERE idPengarang=1;

CREATE VIEW AnggotaPria(idAnggota, Nama) AS SELECT idAnggota, Nama

FROM tbAnggota WHERE kota='Jember';

Filter berdasarkan Kondisi

Dilakukan Query=>hasil query

Page 18: Modul MySQL 2010

18

Sebagai suatu tabel virtual, view akan memiliki kolom-kolom yang sesuai dengan nama-nama kolom yang ada pada ekspresi query. View merupakan alias yang berupa isi sebagian suatu tabel atau gabungan beberapa tabel yang disederhanakan proses pembacaannya. Contoh : Membuat View dengan nama KoleksiDipinjamAnggota yang menyimpan data-data koleksi yang dipinjam oleh anggota tertentu, diberikan perintah :

CREATE VIEW KoleksiDipinjamAnggota AS

SELECT KL.idKoleksi, KL.Judul, KL.Harga

FROM tbKoleksi KL, tbPeminjaman PJ, tbAnggota AG

WHERE PJ.idKoleksi=KL.idKoleksi AND PJ.idAnggota=AG.idAnggota

AND AG.idAnggota = ‘101’ ORDER BY KL.Judul

Pembuatan view seringkali berhubungan dengan masalah keamanan agar pengakses data tidak perlu mengetahui secara fisik ada di mana data tersebut berada dan apa criteria yang digunakan untuk membuat view tersebut, sehingga sebagian pemakai hanya diberikan akses hanya kepada view. Contoh : Penggunaan

SELECT * FROM Anggota_Dosen ;

SELECT * FROM Koleksi_Jogiyanto ;

SELECT * FROM AnggotaPria ;

SELECT * FROM KoleksiDipinjamAnggota;

2. Membuat Store Procedure

Store procedure adalah pernyataan SQL yang dapat disimpan didalam server. Sekali store prosedur tersebut dijalankan, maka clien tidak perlu membuat lagi tetapi cukup memanggil store procedure yang sudah ada. CREATE

[DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body

CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body

proc_parameter: [ IN | OUT | INOUT ] param_name type

func_parameter: param_name type

type: Any valid MySQL data type

Page 19: Modul MySQL 2010

19

characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string'

routine_body: Valid SQL procedure statement

Secara default, rutin dihubungkan dengan sebuah database default. Untuk menghubungkan rutin secara eksplisit dengan databases yang diberikan, sebutkan nama databasenya seperti db_name.sp_name ketika menciptakan rutin. Secara default, masing-masing parameter adalah parameter IN. Untuk menentukan parameter lainnya, gunakan kata kunci OUT atau INOUT sebelum nama parameter. RETURNS hanya digunakan untuk fungsi. Hal itu mengindikasikan tipe kembalian dari fungsi, dan fungsi harus berisi pernyataan RETURN value. routine_body terdiri dari pernyataan SQL yang valid. Dapat berupa pernyataan yang sederhana seperti SELECT atau INSERT, atau dapat berupa pernyataan yang banyak ditulis dengan menggunakan BEGIN…END. Jika tidak disebutkan DETERMINISTIC atau NOT DETERMINISTIC maka defaultnya adalah NOT DETERMINISTIC. Contoh : Pembuatan

CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)

RETURN CONCAT('Hello ',s,'!');

Contoh : Penggunaan

SELECT hello('ladies');

3. Merubah Store Procedure

Perintah yang digunakan untuk mengubah karakteristik dari sebuah store

prosedure.

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...] characteristic:

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string'

4. Memanggil Store Procedure

Pernyataan CALL meminta sebuah prosedur yang telah didefinisikan

sebelumnya melalui pernyataan CREATE PROCEDURE.

CALL sp_name([parameter[,...]])

Page 20: Modul MySQL 2010

20

5. Menghapus Store Procedure

Perintah yang digunakan untuk menghapus store prosedur adalah :

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name Contoh :

DROP FUNCTION hello;

6. Membuat Trigger

Trigger adalah sebuah obyek dalam database yang berupa prosedur yang

merespon setiap kali terdapat proses modifikasi pada tabel . Proses modifikasi

dapat berupa: INSERT, UPDATE DAN DELETE.

Trigger berisi program yang dihubungkan dengan suatu tabel yang secara

otomatis melakukan suatu tindakan ketika suatu baris di dalam tabel dikenai

operasi tertentu.

CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER <trigger_name> <trigger_time> <trigger_event> ON <tbl_name> FOR EACH ROW <trigger_stmt>

Trigger diasosiasikan dengan sebuah tabel yang bernama <tbl_name>, yang

harus berupa tabel permanen, tidak boleh berupa tabel sementara atau view.

Ketika trigger diaktifkan, DEFINER memperkirakan privilege yang berlaku

untuk user tersebut.

<Trigger_time> adalah waktu aksi bagi trigger, dapat berupa BEFORE atau

AFTER yang mengindikasikan bahwa trigger aktif sebelum atau sesudah

pernyataan yang mengaktifkan trigger.

<Trigger_event> mengindikasikan macam pernyataan yang mengaktifkan

trigger, yaitu :

• INSERT. Trigger aktif ketika sebuah baris baru dimasukkan ke dalam tabel melalui pernyataan INSERT, LOAD DATA dan REPLACE

• UPDATE. Trigger aktif ketika sebuah baris data diubah melalui pernyataan UPDATE

• DELETE. Trigger aktif ketika sebuah baris dihapus dari tabel melalui pernyataan DELETE atau REPLACE. Meskipun demikian, DROP TABLE dan TRUNCATE pada sebuah tabel tidak mengaktifkan trigger karena tidak menggunakan DELETE.

<trigger_stmt> adalah pernyataan yang dieksekusi ketika trigger aktif. Jika

ingin mengeksekusi multiple pernyataan digunakan BEGIN … END.

Page 21: Modul MySQL 2010

21

Contoh :

Membuat trigger dg nama testMasukLogHistoris untuk setiap penambahan

data pada tabel tbAnggota, dilakukan penambahan data pada tabel

LogHistoris.

Membuat tabel LogHistoris :

CREATE TABLE LogHistoris (tanggal date, proses varchar(50));

Membuat Trigger pada tabel tbAnggota :

CREATE TRIGGER testMasukLogHistoris AFTER INSERT ON tbAnggota

FOR EACH ROW

INSERT INTO LogHistoris SET tanggal = current_date, proses='terjadi

pemasukan data baru';

Menguji trigger testMasukLogHistoris dengan memberikan perintah INSERT

pada tabel tbAnggota, maka trigger tersebut akan memberikan respon dengan

memasukkan data pada tabel LogHistoris :

INSERT INTO tbAnggota VALUES ('123','adi s',1,'Jl. Jawa','P','1976-01-10')

Contoh :

Membuat trigger dg nama testUbahLogHistoris untuk setiap perubahan data

pada tabel tbAnggota, dilakukan penambahan data pada tabel

LogUbahHistoris.

Membuat tabel LogUbahHistoris :

CREATE TABLE LogUbahHistoris (tanggal date, proses varchar(50),

idAnggota CHAR(3));

Membuat Trigger pada tabel tbAnggota :

CREATE TRIGGER testUbahLogHistoris AFTER UPDATE ON tbAnggota

FOR EACH ROW

INSERT INTO LogUbahHistoris SET tanggal = current_date, proses='terjadi

pemasukan data baru', idAnggota=New.idAnggota;

Menguji trigger testUbahLogHistoris dengan memberikan perintah UPDATE

pada tabel tbAnggota, maka trigger tersebut akan memberikan respon dengan

memasukkan data pada tabel LogUbahHistoris :

UPDATE tbAnggota SET Nama='Adi Saputra’ ;

7. Menghapus Trigger

DROP TRIGGER [schema_name.]trigger_name

DROP TRIGGER testLogHistoris;

DROP TRIGGER testUbahLogHistoris;

Page 22: Modul MySQL 2010

22

MODUL IV

BAHASA SQL – DCL

Materi : Keamanan (Grant/Revoke)

Salah satu fungsi administrasi yang harus dilakukan agar MySQL dapat digunakan secara aman, harus ada pengaturan siapa saja yang berhak mengakses sistem database dengan melakukan konfigurasi bagaimana server mengelola user-user.

1. Memahami Hak Akses User (User Privileges)

Privilege adalah hak dan wewenang yang diberikan kepada pemakai yang telah didefinisikan untuk mengakses dan mengelola database MySQL. Privilege dalam bahasa yang lebih sederhana adalah hak akses atau permission. Privilege melakukan pengaturan hak siapa saja yang boleh mengakses data, data mana saja yang bisa dilihat oleh user. Privilege setiap pemakai berbeda-beda, ditentukan oleh yang berwenang dalam hal ini ditentukan oleh super user (administrator) database. MySQL menggunakan tabel-tabel khusus untuk melakukan pengeloaan pemakai dan privilege-nya, yaitu :

• Table db Berisi informasi database mana saja yang bisa diakses oleh setiap pemakai dan dari komputer mana

• Tabel user

Digunakan untuk menyimpan data pemakai database dan data privilege-nya pada saat melakukan akses ke dalam database.

• Tabel host

Digunakan untuk menyimpan informasi komputer mana saja yang dapat mengakses database MySQL, siapa nama pemakainya.

• Tabel tables_priv Tabel ini menyimpan informasi privilege pemakai pada level tabel.

• Tabel column_priv Tabel ini digunakan untuk menyimpan informasi privilege pemakai sampai pada level kolom (field).

Saat pertama kali MySQL diaktifkan maka akan ada dua database penting yaitu database mysql dan test. Database mysql adalah database sistem, database yang berisi informasi yang digunakan oleh server MySQL untuk melakukan kendali terhadap siapa saja yang bisa mengakses server MySQL dan dari mana saja, kemudian apa saja hak (privilege) yang diberikan oleh pemakai tersebut pada saat telah berada dalam lingkungan MySQL.

Page 23: Modul MySQL 2010

23

Pada tabel user, data yang dimasukkan ke dalam tabel user: 1. Host, data alamat komputer yang bisa digunakan untuk mengakses server

database Host merupakan alamat komputer atau nama komputer yang digunakan untuk mengakses server MySQL. Alamat komputer didefinisikan dengan menggunakan nomor IP atau nama server. Alamat IP dapat juga dinyatakan dengan tanda % untuk menyatakan semua nomor IP.

2. User, nama pemakai Dalam field user disimpan nama pemakai atau userid sebagai identifikasi pemakai (user identification, atau userid), pengenal yang digunakan untuk melakukan otentikasi untuk mengakses ke dalam server MySQL.

3. Password, password untuk pemakai Password adalah kata sandi yang digunakan oleh setiap pemakai untuk memverifikasi bahwa userid yang dimasukkan tadi memang sah milik pemakai tersebut.

4. Privilege-privilege untuk pemakai tersebut di dalam mengakses dan mengelola data dalam server MySQL. Field lain dari tabel user ini adalah informasi privilege yang diberikan kepada host untuk mengakses database yang didefinisikan. Berikut ini adalah daftar field yang menunjukkan privilege :

Nama Field Kegunaan

Select_priv Digunakan untuk mendefinisikan hak untuk melakukan query yang menggunakan perintah Select

Insert_priv Mendefinisikan hak untuk dapat melakukan penambahan data

Update_priv Mendefinisikan hak untuk dapat melakukan perubahan data

Delete_priv Mendefinisikan hak untuk dapat melakukan penghapusan data

Create_priv Mendefinisikan hak agar dapat membuat tabel/database baru

Drop_priv Mendefinisikan hak agar dapat menghapus tabel/database

Grant_priv Hak untuk dapat memberikan privilege kepada pemakai lain. Privilege ini sebaiknya diberikan kepada pemakai dengan level administrator

Index_priv Hak untuk dapat melakukan pembuatan, perubahan, dan penghapusan index

Alter_priv Hak untuk mengubah struktur tabel

Reload_priv Mendefinisikan apakah pemakai berhak mengaktifkan definisi privilege yang diacu database secara lansung atau tidak. Menentukan pemakai boleh memberikan perintah FLUSH PRIVELEGES atau tidak

Shutdown_priv

Menentukan apakah pemakai boleh mematikan server atau tidak

Process_priv Mendefinisikan agar pemakai dapat mematikan proses-proses yang dibuat oleh MySQL

File_priv Mendefinisikan apakah pemakai dapat melakukan operasi file di dalam server atau tidak, seperti perintah untuk melakukan LOAD DATA INFILE

Page 24: Modul MySQL 2010

24

Field-field untuk privilege diisi dengan data ‘Y’ atau ‘N’. jika diisi ‘Y’ maka pada record tersebut diijinkan untuk memiliki privilege tersebut, sebaliknya jika diisi ‘N’ maka record tersebut tidak memiliki privilege.

Pada tabel db, Struktur tabel db hampir sama dengan tabel user, hanya saja tabel db memiliki tambahan field yaitu field db. Field db digunakan untuk mendefinisikan nama tabel yang dapat diakses oleh setiap pemakai, dari host mana dan apa saja privilegenya

Pada tabel host, Tabel ini digunakan untuk memudahkan pendefinisian akses kepada suatu database dari suatu host, sehingga entri dalam tabel db tidak perlu mendefinisikan nama host, cukup pada tabel host saja didefinisikan, field host pada tabel db dapat dikosongkan. Tabel tables_priv, mendefinisikan privilege lebih detail untuk seorang pemakai pada level tabel mana saja yang diberikan privilegenya kepada pemakai tersebut dan privilege apa yang dimiliki.

Host, adalah nama host untuk mengakses database Db, adalah nama database yang didefinisikan. Use, mendefinisikan pemakai yang diberi privelege tabel yang didefinisikan. Table_name, mendefinisikan nama tabel yang didefinisikan Grantor, adalah pemakai yang memberikan privilege kepada pemakai Timestamp, mencatat kapan (waktu) perubahan dilakukan.

Pada tabel columns_priv, Isi tabel columns_priv seperti halnya tables_priv, digunakan untuk lebih merinci lagi privilege yang dimiliki oleh seseorang pemakai sampai dengan level kolom dari suatu tabel.