Modul Prak Basis Data
Modul Prak Basis Data
STUDI INFORMATIKA
Modul Praktikum
Basis Data
Oleh : Tim Pengajar Basis Data
Modul Praktikum Basis Data digunakan sebagai acuan pelaksanaan Praktikum Basis Data di Lingkungan
Program Studi Informatika – Fakultas Matematika dan Ilmu pengatahuan Alam, Universitas Udayana.
KATA PENGANTAR
Puji syukur kami panjatkan kehadapan Ida Sang Yang Widhi Wasa, karena atas
rahmat dan tuntunanNya kami dapat menyelesaikan Modul Praktikum Basis Data. Modul
Praktikum Basis Data bertujuan untuk memadukan antara materi yang didapat pada
perkuliahan dengan praktek, sehingga mahasiswa dapat lebih memahami dan dapat
mengiimplementasikan pada konsep basis data dengan baik .
Kami menyadari sepenuhnya bahwa terselesaikannya modul ini berkat dukungan
dan bantuan dari semua pihak, untuk itu kami mengucapkan banyak terima kasih atas
segala bantuannya.
Akhirnya kami berharap mudah-mudahan modul ini dapat bermanfaat dan dapat
digunakan sebagai acuan untuk membangun dan mengembangkan konsep basis data
dalam pemrograman menjadi tepat dan efisien khususnya mahasiswa yang mengambil
matakuliah Basis Data pada jurusan Ilmu Komputer Universitas Udayana.
Bukit Jimbaran, Agustus 2014
Penyusun
ii
DAFTAR ISI
HALAMAN DEPAN ..................................................................................................................................................... i
KATA PENGANTAR .................................................................................................................................................... ii
DAFTAR ISI .................................................................................................................................................................... iii
Modul I Data Definition Language Database dan Tabel .......................................................................... 1
1.1 Creat .................................................................................................................................................. 1
1.2 Alter .................................................................................................................................................. 4
1.3 Drop .................................................................................................................................................. 6
1.4 Latihan ............................................................................................................................................. 7
Modul II Structured Query Language (SQL) Insert, Update dan Delete ......................................... 8
2.1 Insert ................................................................................................................................................ 8
2.2 Update ............................................................................................................................................. 9
2.3 Delete ............................................................................................................................................... 10
2.4 Latihan ............................................................................................................................................ 10
Modul III Structured Query Language (SQL) Select Dengan Operator Perbandingan, Logika dan
Clausa line ................................................................................................................................................ 12
3.1 Operator Perbandingan ........................................................................................................... 12
3.2 Between .......................................................................................................................................... 13
3.3 Operator Logika .......................................................................................................................... 14
3.4 Clausa Like ..................................................................................................................................... 15
3.5 Latihan ............................................................................................................................................ 16
Modul IV Structured Query Language (SQL) Select Dengan Order By, Aliasing, Kalkulasi Field
dan Clausa Between .............................................................................................................................. 18
4.1 Order By ......................................................................................................................................... 18
4.2 Between .......................................................................................................................................... 19
4.3 Field Kalkulasi .............................................................................................................................. 19
4.4 Latihan ............................................................................................................................................ 20
Modul V Structured Query Language (SQL) Fungsi Agregasi dan Clausa Having ....................... 22
5.1 Fungsi ............................................................................................................................................. 22
5.2 Contoh Kasus ................................................................................................................................ 24
5.3 Latihan ............................................................................................................................................ 25
Modul VI Structured Query Language (SQL) Select Menggunakan Join .......................................... 26
6.1 Perintah Join ................................................................................................................................. 26
6.2 Inner Join ........................................................................................................................................ 27
6.3 Left Join ........................................................................................................................................... 28
6.4 Right Join ........................................................................................................................................ 28
6.5 Outer Join ....................................................................................................................................... 29
6.6 Latihan ............................................................................................................................................ 31
Modul VII Structured Query Language (SQL) Select Dengan Operator Union dan In ............... 32
7.1 Union ................................................................................................................................................ 32
7.2 In ........................................................................................................................................................ 33
7.3 Latihan ............................................................................................................................................ 34
Modul VIII Studi Kasus I ........................................................................................................................................ 32
8.1 Studi Kasus I ................................................................................................................................. 35
8.2 Latihan Kasus ............................................................................................................................... 36
Modul IX Structured Query Language (SQL) View .................................................................................. 38
9.1 View .................................................................................................................................................. 38
9.2 Contoh Kasus ................................................................................................................................ 39
9.3 Latihan ............................................................................................................................................ 39
Modul X Structured Query Language (SQL) Stored Procedure dan Cursor .................................. 41
10.1 Deklarasi Stored Procedure ................................................................................................ 41
10.2 Deklarasi Variabel ................................................................................................................... 42
10.3 Parameter ................................................................................................................................... 43
10.4 Perulangan dengan Cursor ................................................................................................. 44
10.5 Latihan .......................................................................................................................................... 46
Modul XI Structured Query Language (SQL) Trigger ............................................................................. 47
11.1 Trigger ......................................................................................................................................... 47
11.2 Latihan .......................................................................................................................................... 48
Modul XII Studi Kasus II ....................................................................................................................................... 50
12.1 Studi Kasus II ............................................................................................................................ 50
12.2 Latihan .......................................................................................................................................... 51
Data Definition Language (DDL) – Database & Tabel
MODUL I
DATA DEFINITION LANGUAGE (DDL)
DATABASE & TABEL
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk membuat,
mengubah dan menghapus database dan tabel.
B. Indikator
Mahasiswa mampu membuat, mengubah dan menghapus dabatase dan
tabel pada MySQL menggunakan perintah yang telah dipelajari.
C. Materi
Data definition language (DDL) adalah perintah-perintah yang digunakan
untuk membuat ataupun menghapus database dan obyek database.
Obyek database disini adalah lain tabel, view, procedure, trigger.
Sebenarnya untuk membuat database dan obyeknya dapat dilakukan
melalui antarmuka phpMyAdmin, namun demikian pemahaman tentang
sintaks perintah sangatlah penting. Pada modul ini akan dibahas
bagaimana membuat database dan tabel menggunakan perintah yang
telah disediakan oleh MySQL.
1. CREATE
Merupakan perintah yang digunakan untuk membuat database
dan obyek database.
Sintaks untuk membuat database:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name |
[DEFAULT] COLLATE [=] collation_name
Q1. Pada sintaks di atas terdapat pilihan-pilihan yang berada di
dalam tanda {..} dan [..]. Apa maksud dari tanda {..} dan [..]
tersebut?
Untuk membuat suatu database baru dengan nama
“db_praktikum” maka perintah yang diketikkan adalah:
CREATE DATABASE db_praktikum;
Ketika perintah di atas berhasil dijalankan, maka pada server akan
muncul suatu database baru dengan nama “db_praktikum”.
Q2. Adakah kemungkinan perintah tersebut tidak berhasil dijalankan?
Kenapa?
1
Data Definition Language (DDL) – Database & Tabel
2
Data Definition Language (DDL) – Database & Tabel
CREATE TABLE tb_baru (
col_id INT,
col_name VARCHAR(12)
);
Tiap tabel, sesuai dengan kaidah normalisasi, harus memiliki satu
primary key. Primary key ini tidak boleh bernilai NULL. Untuk
membuat tabel tb_baru dengan col_id sebagai primary key dapat
digunakan perintah berikut:
CREATE TABLE tb_baru (
col_id INT NOT NULL AUTO_INCREMENT,
col_name VARCHAR(12),
PRIMARY KEY (col_id)
);
Foreign key digunakan untuk mendefinisikan suatu kolom pada
tabel yang juga merupakan primary key pada tabel lain. Hal ini biasa
ditemui pada hubungan antara dua tabel yang bersifat one-to-many
(1-N). Sebagai contoh: misalkan pada tabel tb_lain, kolom
lain_col_id merupakan foreign key yang mengacu pada kolom col_id
pada tb_baru. Perintah untuk membuat tabel tb_lain yang berisikan
foreign key ini adalah sebagai berikut:
CREATE TABLE tb_lain (
lain_id INT NOT NULL AUTO_INCREMENT,
lain_uraian VARCHAR(45),
lain_col_id INT NOT NULL,
PRIMARY KEY (lain_id),
CONSTRAINT `PK1`
FOREIGN KEY (lain_col_id)
REFERENCES tb_baru (col_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Q4. Apa guna perintah ON DELETE NO ACTION dan ON UPDATE NO
ACTION?
Kata kunci CONSTRAINT digunakan untuk mendefinisikan
aturan-aturan yang melarang/memperbolehkan nilai yang dapat
disimpan pada kolom suatu tabel. CONSTRAINT juga dapat
digunakan untuk mendefinisikan aturan tipe data apa saja yang bisa
dimasukkan ke suatu tabel. Oleh karena itu CONSTRAINT berlaku
pada tingkat kolom dan tabel. Pada tingkat kolom maka aturan
tersebut hanya berlaku untuk satu kolom saja sedangkan pada
tingkat tabel maka aturan akan berlaku untuk seluruh kolom pada
tabel tersebut. MySQL menyediakan CONSTRAINT berikut:
3
Data Definition Language (DDL) – Database & Tabel
CONSTRAINT DESKRIPSI
NOT NULL NOT NULL digunakan untuk mendefinisikan
bahwa satu kolom tidak boleh berisi nilai NULL.
UNIQUE UNIQUE digunakan untuk menyatakan bahwa
pada satu kolom tidak boleh ada nilai yang
sama (duplikat). Pada satu tabel boleh terdapat
lebih dari satu kolom yang UNIQUE.
PRIMARY KEY PRIMARY KEY digunakan untuk memastikan
bahwa data pada suatu kolom adalah unik dan
sekaligus membuatkan INDEX untuk akses
tabel yang lebih cepat.
FOREIGN KEY FOREIGN KEY digunakan untuk
menghubungkan dua buah tabel menggunakan
masing-masing satu kolom pada kedua tabel.
Kolom yang digunakan pada satu tabel harus
merupakan PRIMARY KEY dan diacu oleh
kolom pada tabel lain yang disebut FOREIGN
KEY.
CHECK CHECK digunakan untuk mengontrol nilai pada
suatu kolom. CHECK akan menentukan apakah
nilai pada kolom tersebut valid atau tidak
berdasarkan suatu ekspresi logika.
DEFAULT Tiap tabel pada MySQL harus memiliki suatu
nilai (termasuk nilai NULL). Ketika suatu kolom
tidak diberikan nilai pada proses INSERT tabel
maka kolom tersebut akan disiikan nilai yang
dispesifikasikan sebagai DEFAULT.
2. ALTER
Tujuan penggunaan perintah ini pada tabel adalah untuk
mengubah struktur dari tabel tersebut. Sebagai contoh, perintah ini
digunakan untuk menambah atau menghapus kolom, membuat atau
menghapus index, mengubah tip dari suatu kolom, atau mengubah
nama kolom atau tabel itu sendiri. Perintah ini juga dapat digunakan
untuk mengubah karakteristik seperti storage engine yang dipakai
atau komentar pada tabel.
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
alter_specification:
table_options
| ADD [COLUMN] col_name column_definition [FIRST |
AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)
| ADD {INDEX|KEY} [index_name] [index_type]
(index_col_name,...) [index_option] ...
4
Data Definition Language (DDL) – Database & Tabel
5
Data Definition Language (DDL) – Database & Tabel
6
Data Definition Language (DDL) – Database & Tabel
DROP
TABLE t1, t2;
D. LATIHAN
Kerjakanlah latihan berikut:
1. Buatlah suatu database baru dengan nama “db_latihan”.
2. Pada “db_latihan” tambahkan tabel “m_mahasiswa” dengan field
sebagai berikut:
a. “mhs_NIM”, CHAR(10)
b. “mhs_Nama”, VARCHAR(50), NOT NULL
c. “mhs_Tanggal_Lahir”, DATE
d. “mhs_Alamat”, VARCHAR(100)
e. “mhs_Jenis_Kelamin”, TINYINT, DEFAULT 1
f. “mhs_Telpon”, VARCHAR(20)
g. “mhs_Asal”, CHAR(5)
3. Buatlah CONSTRAINT PRIMARY KEY pada kolom “mhs_NIM”.
4. Buatlah tabel “m_kota” dengan field sebagai berikut:
a. “kota_id”, CHAR(5) à primary key
b. “kota_nama”, VARCHAR(20)
5. Buatlah CONSTRAINT FOREIGN KEY dari tabel “m_mahasiswa”
kolom “mhs_asal” ke tabel “m_kota” kolom “kota_id”.
6. Cobalah untuk menghapus tabel “m_kota”. Berhasilkah?
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. MySQL Tutorials, http://www.devshed.com
7
Structured Query Language (SQL) – INSERT, UPDATE dan DELETE
MODUL II
STRUCTURED QUERY LANGUAGE (SQL)
INSERT, UPDATE DAN DELETE
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk menambah,
mengubah dan menghapus record pada tabel.
B. Indikator
Mahasiswa mampu membuat, mengubah dan menghapus record tabel
pada MySQL menggunakan perintah yang telah dipelajari.
C. Materi
Strutured Query Language (SQL) adalah perintah-perintah yang
digunakan untuk membuat, mengubah, menghapus dan menampilkan
record tabel dari suatu database. Pada modul ini akan dibahas bagaimana
menambahkan, mengubah dan menghapus record dari suatu tabel
menggunakan perintah yang telah disediakan oleh MySQL.
1. INSERT
Merupakan perintah yang digunakan untuk menambah record ke
dalam tabel.
Sintaks untuk menambah record:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
Misalnya terdapat tabel Barang sebagai berikut :
Field Tipe Data Keterangan
kode_barang INT PRIMARY KEY
nama_barang Varchar(30)
harga INT
Stock TINYINT
Untuk menambahkan data pada tabel tersebut, maka perintah
yang diketikkan adalah:
INSERT INTO barang (kode_barang,nama_barang,harga,stock)
VALUES(1,’Gerry Choco’,3000,34);
K
e
atau
INSERT
t INTO barang VALUES(1,’Gerry Choco’,3000,34);
Q1. Apakah perbedaan perintah 1 dan perintah kedua pada cara
penambahan data di atas?
8
Structured Query Language (SQL) – INSERT, UPDATE dan DELETE
Untuk melihat data yang telah ditambahkan ke dalam tabel,
ketikkan perintah berikut ini :
SELECT
* FROM barang
Perintah ON DUPLICATE KEY UPDATE digunakan mengubah
beberapa kolom dengan nilai baru apabila terdapat kolom unik yang
disisipkan lebih dari sekali. Contoh jika terdapat penyisipan data
barang lagi dengan kunci yang sama, maka harga akan dinaikkan
500, maka perintah INSERT adalah sebagai berikut :
INSERT
INTO barang VALUES (1,'’Gerry Choco',3000,34)
ON DUPLICATE KEY UPDATE harga=harga+500;
Penambahan record bisa dilakukan untuk beberapa record
sekaligus, seperti contoh berikut :
INSERT INTO barang
VALUES (2,'’the Kepala Jenggot',3000,45),
VALUES (3,'Timtam',2000,40)
2. UPDATE
Perintah ini digunakan untuk mengubah record yang sebelumnya
sudah disisipkan. Perintah untuk mengubah data suatu record
adalah sebagai berikut :
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Perintah update bisa terdiri dari satu atau beberapa kolom yang
ingin diubah. Perubahan suatu record akan tergantung kepada
clausa WHERE. Setiap record yang memenuhi clausa WHERE akan
diupdate. ORDER BY akan mengurutkan proses update data
berdasarkan kolom yang dimasukkan ke dalam clausa tersebut.
LIMIT akan membatasi jumlah record yang akan diubah. Berikut ini
adalah contoh dari perintah update:
UPDATE barang
SET harga=2000
WHERE kode_barang=2
Q2. Apakah jadinya jika clausa WHERE dihilangkan pada perintah di
atas?
9
Structured Query Language (SQL) – INSERT, UPDATE dan DELETE
Perintah di atas akan mengubah harga dari barang berkode 2
menjadi 2000. Jika ingin mengubah beberapa kolom, misalnya nama
dan stock, maka bisa dilakukan dengan perintah sebagai berikut :
UPDATE
barang
SET nama_barang=’Lipton Tea’,stock=80
WHERE kode_barang=2
Q3. Cobalah untuk menaikkan semua kode barang sebesar 1.
3. DELETE
Perintah DELETE digunakan untuk menghapus record dalam
suatu tabel. Perintah untuk menghapus record adalah sebagai
berikut :
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Perintah delete bisa terdiri dari satu atau beberapa kolom yang
akan dihapus. Penghapusan suatu record akan tergantung kepada
clausa WHERE. Setiap record yang memenuhi clausa WHERE akan
dihapus. ORDER BY akan mengurutkan proses penghapusan data
berdasarkan kolom yang dimasukkan ke dalam clausa tersebut.
LIMIT akan membatasi jumlah record yang akan diubah.
Contoh perintah untuk menghapus barang dengan harga di bawah
3000 adalah sebagai berikut :
DELETE FROM barang
WHERE harga<3000
Q4. Cobalah untuk menghapus 5 barang dengan harga tertinggi!
D. LATIHAN
Kerjakanlah latihan berikut:
1. Buatlah database dengan nama “prak2”.
2. Buatlah tabel buku dengan struktur sebagai berikut :
Field Tipe Data Keterangan
ISBN VARCHAR (12) PRIMARY KEY
judul VARCHAR (50)
jumlah_halaman TINYINT
harga INT
penerbit VARCHAR(20)
10
Structured Query Language (SQL) – INSERT, UPDATE dan DELETE
3. Coba untuk menambahkan data berikut ke dalam tabel tersebut!
ISBN judul jumlah_ Harga penerbit
halaman
1111 Dunia Sophie 765 80000 Mizan
2222 The Lost Symbol 867 90000 Gramedia
3333 To Kill a Morcking Bird 685 78000 Gramedia
4444 The Secret 687 60000 Gramedia
5555 Piano di Tepi Pantai 859 45000 Andi
4. Ubahlah data penerbit menjadi “Gramedia Pustaka” dari semua buku
yang penerbitnya adalah “Gramedia”.
5. Turunkan harga 3 buku termahal sebanyak 10%.
6. Ubahlah judul, jumlah halaman dan harga dari buku dengan ISBN
2222 menjadi “The Da Vinci Code”, “643” dan “75000”.
7. Hapuslah semua buku yang diterbitkan oleh Andi dengan jumlah
halaman yang kurang dari 300.
8. Hapuslah 2 buku paling murah yang diterbitkan oleh Gramedia
Pustaka.
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. MySQL Tutorials, http://www.devshed.com
11
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE
MODUL III
STRUCTURED QUERY LANGUAGE (SQL)
SELECT DENGAN OPERATOR PERBANDINGAN,
LOGIKA DAN CLAUSA LIKE
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk melakukan select
dari sebuah table menggunakan operator perbandingan, logika, dan clausa
like.
B. Indikator
Mahasiswa mampu melakukan select dari sebuah table menggunakan operator
perbandingan, logika, dan clausa like.
C. Materi
1. OPERATOR PERBANDINGAN
Penjelasan:
Nama Deskripsi
= sama dengan
> lebih besar
< lebih kecil
>= lebih besar atau sama dengan
<= lebih kecil atau sama dengan
<> tidak sama dengan
Format Penulisan:
Contoh:
tabel_buku
12
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE
ISBN judul Jml_hal harga penerbit
1111 Dunia Sophie 765 10000 Mizan
2222 The Lost Symbol 867 10000 Gramedia
3333 A Morcking Bird 685 10000 Gramedia
4444 The Secret 687 11000 Gramedia
5555 Piano di Tepi Pantai 859 10000 Andi
Output:
judul harga
The Secret 11000
Output:
ISBN judul Jml_hal harga penerbit
1111 Dunia Sophie 765 10000 Mizan
2222 The Lost Symbol 867 10000 Gramedia
3333 A Morcking Bird 685 10000 Gramedia
5555 Piano di Tepi Pantai 859 10000 Andi
b. BETWEEN
Penjelasan:
Format Penulisan:
Contoh:
tabel_buku
13
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE
Output
ISBN judul Jml_hal harga penerbit
1111 Dunia Sophie 765 9000 Mizan
2222 The Lost Symbol 867 10000 Gramedia
4444 The Secret 687 11000 Gramedia
2. OPERATOR LOGIKA
Contoh:
tabel_buku
Output
14
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE
ISBN judul Jml_hal harga penerbit
1111 Dunia Sophie 765 10000 Mizan
5555 Piano di Tepi Pantai 859 10000 Andi
3. Clausa LIKE
Penjelasan:
Nama Deskripsi
% Mencocokkan dengan berapapun jumlah karakter
_ Mencocokkan hanya dengan satu karakter
Penggunaan LIKE:
Penggunaan deskripsi
“Prak%” mencari string yang diawali dengan karakter “Prak”
“%Prak” mencari string yang diakhiri dengan karakter “Prak”
“%Prak%” mencari string yang mengandung karakter “Prak”
mencari string yang diawali dengan karakter “Prak”
“Prak_”
dan diakhiri 1 karakter
mencari string yang diakhiri dengan karakter “Prak”
“_Prak”
dan diawali 1 karakter
mencari string yang mengandung karakter “Prak”
“_Prak_”
yang diawali dan diakhiri dengan 1 karakter
Format Penulisan:
SELECT [nama kolom1], [nama kolom2], dst
FROM [nama tabel]
WHERE [nama kolom] LIKE [klausa LIKE]
Contoh:
tabel_buku
15
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE
Output
D. LATIHAN
Kerjakanlah latihan berikut:
1. Buatlah database dengan nama “prak3”
2. Buatlah tabel buku dengan struktur sebagai berikut :
Field Tipe Data Keterangan
kode_barang VARCHAR (12) PRIMARY KEY
nama_barang VARCHAR (50)
harga INT
suplier VARCHAR(50)
16
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE
6. Berdasarkan Tabel Prak3 dengan record data seperti diatas, Ubahlah
kata “3D” menjadi “3 Dimension” pada setiap nama barang yang
mengandung kata “3D”.
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
17
SELECT, ORDER BY, ALIASING, KALKULASI FIELD dan CLAUSA BETWEEN
MODUL IV
STRUCTURED QUERY LANGUAGE (SQL)
SELECT, ORDER BY, ALIASING, KALKULASI FIELD
dan CLAUSA BETWEEN
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk mengambil
dan mengurutkan data pada interval tertentu dan kalkulasi field.
B. Indikator
Mahasiswa mampu mengambil dan mengurutkan data pada interval
tertentu dan mengkalkulasi field pada MySQL menggunakan perintah
yang telah dipelajari.
C. Materi
Data yang diambil dari satu atau beberapa tabel kadang membutuhkan
pengurutan, baik itu menaik maupun menurun. Perintah SQL yang
memungkinkan untuk mengurutkan data menggunakan ORDER BY.
Selain pengurutan data, terkadang dibutuhkan suatu field baru yang
merupakan hasil perhitungan dari field-field lainnya. Field hasil
perhitungan tersebut disebut dengan field kalkulasi. Pengambilan data
kadang-kadang juga dilakukan pada field tertentu, misalnya dari tahun
2000 sampai tahun 2002 dan lain-lain. Pengambilan data seperti itu bisa
dengan mudah dilakukan dengan menggunakan perintah BETWEEN.
1. ORDER BY
Merupakan perintah yang digunakan untuk mengurutkan data
berdasarkan field tertentu.
Sintaks untuk menambah record:
SELECT <`field1`, `field2`, …, `fieldn`>
FROM <`table name`>
[WHERE expression]
ORDER BY <`field1` [ASC/DESC],… `fieldn` [ASC/DESC]>
[LIMIT
a,b]
Perintah ORDER BY akan mengurutkan data berdasarkan field
tertentu. Pengurutan bisa dilakukan berdasarkan satu atau
beberapa field. Untuk setiap field tersebut, bisa diurutkan menaik
ASC ataupun menurun DESC. Penggunaan perintah ORDER BY
tanpa kata kata kunci ASC/DESC akan dianggap ASC (menaik).
18
SELECT, ORDER BY, ALIASING, KALKULASI FIELD dan CLAUSA BETWEEN
Misalnya terdapat tabel Barang sebagai berikut :
Field Tipe Data Keterangan
kode_barang INT PRIMARY KEY
nama_barang Varchar(30)
Harga INT
Stock TINYINT
Perintah untuk menampilkan data barang yang diurutkan
berdasarkan harga mulai dari harga tertinggi, kemudian untuk
barang dengan harga yang sama akan diurut bedasarkan nama dari
A-Z :
SELECT *
FROM Barang
ORDER BY Harga DESC, nama_barang ASC;
19
SELECT, ORDER BY, ALIASING, KALKULASI FIELD dan CLAUSA BETWEEN
diterima untuk masing-masing barang jika terjual semua, maka
perintah SQL-nya adalah sebagai berikut :
nama_barang, (harga*stock)
SELECT
FROM Barang
Perintah di atas akan menghasilkan sebuah field kalkulasi tanpa
nama, sehingga kurang informatif. Agar field tersebut memiliki
nama, maka dapat digunakan alias, seperti perintah di bawah ini :
SELECT nama_barang, (harga*stock) AS totalUang
FROM Barang
Q3. Apa saja contoh lain dari field kalkulasi?
Urutan perintah untuk keseluruhan clausa yang telah diajarkan
adalah sebagai berikut :
SELECT <`field1`, `field2`, …, `fieldn`>
<`table name`>
FROM
[WHERE expression]
BY <`field1` [ASC/DESC],… `fieldn` [ASC/DESC]>
ORDER
[LIMIT
a,b]
D. LATIHAN
Kerjakanlah latihan berikut:
1. Gunakan DDL untuk membuat database dengan nama “prak4”.
2. Gunakan DDL untuk membuat tabel pegawai dengan struktur
sebagai berikut :
Field Tipe Data Keterangan
NIP CHAR (4) PRIMARY KEY
nama_depan VARCHAR (30)
nama_belakang VARCHAR (20)
gaji INT
departemen VARCHAR(20)
3. Gunakan DML untuk membuat untuk menambahkan data berikut ke
dalam tabel tersebut!
NIP nama_depan nama_belakang Gaji departemen
20
SELECT, ORDER BY, ALIASING, KALKULASI FIELD dan CLAUSA BETWEEN
4. Gunakan SQL untuk menampilkan nama pegawai dan gaji dari semua
pegawai yang departemennya adalah ERP. Adapun nama yang
ditampilkan adalah gabungan dari nama_depan dan nama_belakang.
Contoh :
nama gaji
21
FUNGSI AGREGASI dan CLAUSA HAVING
MODUL V
STRUCTURED QUERY LANGUAGE (SQL)
FUNGSI AGREGASI DAN CLAUSA HAVING
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk menghitung
kelompok-kelompok baris pada table dalam basis data menggunakan
fungsi agregat dan clausa Having.
B. Indikator
Mahasiswa mampu menghitung kelompok-kelompok baris pada sebuah
tabel, seperti menghitung total data (baris), mencari nilai terbesar,
terkecil atau rata-rata dari seluruh atau sebagian data yang ada dalam
satu tabel pada MySQL menggunakan fungsi agregat dan clausa Having.
C. Materi
Dalam beberapa kasus sering dibutuhkan perhitungan kelompok data
seperti mencari jumah total data (baris) dalam sebuah tabel, mencari
berapa nilai maksimum dari sebuah kolom pada tabel, atau bahkan
mencari nilai rata-rata sebuah kolom pada tabel. Hal tersubut
dimungkinkan dalam menggunakan perintah SQL yang disebut dengan
Fungsi Agregasi. Fungsi agregasi digunakan untuk melakukan operasi
pada kelompok-kelompok baris data, fungsi ini akan menghasilkan satu
baris data untuk setiap kelompok baris data yang ada. Yang termasuk
fungsi agregasi adalah :
– Average : AVG
– Minimum : MIN
– Maximum : MAX
– Total : SUM
– Count : COUNT
Fungsi Agregasi dapat diterapkan pada seluruh data (baris) pada sebuah
tabel menjadi satu himpunan ataupun dibagi menjadi beberapa kelompok
himpunan pada tabel tersebut. Agar dapat dikelompokan menjadi
beberapa himpunan maka digunakan Klausa GROUP BY. Adanya Klausa
GROUP BY memungkinkan keluaran eksekusi perintah SQL tersebut
menghasilkan satu atau lebih data (baris). Dengan banyaknya baris yang
kemungkinan dihasilkan maka data keluaran tersebut juga dapat
diseleksi kembali menggunakan Klausa HAVING.
22
FUNGSI AGREGASI dan CLAUSA HAVING
Sintaks:
SELECT AVG(nama_kolom) FROM nama_tabel;
Sintaks :
SELECT MIN(nama_kolom) FROM nama_tabel;
Sintaks :
SELECT MAX(nama_kolom) FROM nama_tabel;
Sintaks :
SELECT SUM(nama_kolom) FROM nama_tabel;
Sintaks :
SELECT COUNT (nama_kolom) FROM nama_tabel;
23
FUNGSI AGREGASI dan CLAUSA HAVING
Sintaks :
SELECT nama_kolom_group , COUNT (nama_kolom)
FROM nama_tabel GROUP BY nama_kolom_group;
Sintaks :
SELECT nama_kolom_group , Fungsi_Agregat(nama_kolom)
FROM nama_tabel GROUP BY nama_kolom_group HAVING kondisi;
D. CONTOH KASUS
Misalkan terdapat tabel Rekapitulasi Tagihan Pemakaian Listrik oleh
Pelanggan PLN, seperti di bawah ini :
Tabel tagihan_pelanggan
Id nama kelas tagihan
010203 I Made Margi A 35000
010204 I Ketut Joni A 50000
010205 Ni Made Sri B 45000
010206 Nang Kabrek C 100000
010207 Made Deblag C 95000
010208 Wayan Meter C 86000
010209 Made Keran B 50000
010210 Nyoman Selang C 120000
24
FUNGSI AGREGASI dan CLAUSA HAVING
E. LATIHAN
Kerjakanlah latihan berikut:
1. Gunakan DDL untuk membuat database dengan nama “prak5”.
2. Gunakan DDL untuk membuat tabel obat dengan struktur sebagai
berikut :
Field Tipe Data Keterangan
kode_obat CHAR (5) PRIMARY KEY
nama_obat VARCHAR (30)
golongan CHAR(1)
harga_obat DECIMAL
jumlah_stok INT
F. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. MySQL Tutorials, http://www.devshed.com
25
Structured Query Language (SQL) – SELECT Menggunakan JOIN
MODUL VI
STRUCTURED QUERY LANGUAGE (SQL)
SELECT MENGGUNAKAN JOIN
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk
menghubungkan dua atau lebih tabel menggunakan tipe-tipe JOIN yang
disediakan.
B. Indikator
Mahasiswa mampu menghubungkan dua atau lebih tabel pada dabatase
MySQL menggunakan tipe JOIN yang sesuai.
C. Materi
Perintah JOIN pada MySQL digunakan untuk menghubungkan dua atau
lebih tabel. Tipe-tipe join yang biasa digunakan dalam query adalah
INNER, LEFT, RIGHT dan OUTER. Untuk lebih memudahkan dalam
memahami perbedaan dari masing-masing tipe JOIN maka digunakan dua
tabel berikut.
Tabel tb_mahasiswa:
id nama mata_kuliah
1 ADI 1
2 IKA 1
3 BUDI 2
4 WATI 5
5 DODI NULL
Dari tabel tb_mahasiswa di atas dapat dilihat bahwa field mata_kuliah
mengacu ke tabel lain (dalam hal ini tabel mata kuliah).
Tabel tb_matakuliah
id nama_matakuliah
1 Basis Data
2 Logika Pemrograman
3 Sistem Informasi
4 Struktur Data
5 Otomata
Untuk menampilkan nama mahasiswa beserta nama mata kuliah yang
diambilnya dapat digunakan query SELECT dengan perintah JOIN untuk
menggabungkan kedua tabel di atas. Hasil dari query yang dijalankan
tergantung dari tipe JOIN yang digunakan.
26
Structured Query Language (SQL) – SELECT Menggunakan JOIN
1. INNER JOIN
Tipe ini merupakan tipe JOIN yang paling sering digunakan. Hasil dari
query SELECT dengan tipe INNER JOIN adalah set dari record yang
memenuhi syarat yang disebutkan pada klausa ON. Sebagai contoh:
Q1. Cobalah untuk mengubah query di atas dengan menambahkan
nama alias t1 untuk tabel “tb_mahasiswa” dan t2 untuk
“tb_matakuliah”.
27
Structured Query Language (SQL) – SELECT Menggunakan JOIN
2. LEFT JOIN
Bagaimana jika hasil dari query yang diinginkan adalah untuk
menampilkan semua nama mahasiswa beserta mata kuliah yang
diambil walaupun mahasiswa itu belum mengambil mata kuliah
apapun? Tipe LEFT JOIN dapat digunakan untuk mendapatkan hasil
yang diinginkan. LEFT JOIN akan menghasilkan suatu set record yang
menampilkan semua baris dari tabel yang terletak di kiri (dalam hal
ini “tb_mahasiswa”) tanpa memperhatikan apakah baris-baris
tersebut memiliki padanan pada tabel sebelah kanan
(“tb_matakuliah”).
SELECT tb_mahasiswa.nama, tb_matakuliah.nama_matakuliah
FROM tb_mahasiswa LEFT JOIN tb_matakuliah
ON tb_mahasiswa.mata_kuliah=tb_matakuliah.id;
Hasil dari query di atas adalah sebagai berikut:
nama nama_matakuliah
ADI Basis Data
IKA Basis Data
BUDI Logika Pemrograman
WATI Otomata
DODI (NULL)
Hasil dari LEFT JOIN jika digambarkan menggunakan notasi
himpunan adalah sebagai berikut:
Q2. Buatlah query LEFT JOIN dari kedua tabel di atas yang hanya
menampilkan mata kuliah “Basis Data”.
3. RIGHT JOIN
Perintah RIGHT JOIN akan menampilkan semua entry dari tabel
sebelah kanan dari perintah JOIN walaupun ada baris pada tabel
sebelah kanan yang tidak memiliki padanannya pada tabel sebelah
kiri. Sebagai contoh: misal hasil dari query yang diinginkan adalah
untuk menampilkan semua mata kuliah yang ada walaupun tidak ada
28
Structured Query Language (SQL) – SELECT Menggunakan JOIN
4. OUTER JOIN
Perintah OUTER JOIN akan menampilkan seluruh isi dari kedua tabel
tanpa memperhatikan apakah masing baris pada kedua tabel memiliki
pasangan pada tabel lainnya atau tidak. Ketika tidak ditemukan
padanannya maka nilai dari field tersebut akan diisi dengan NULL.
Perintah OUTER JOIN ini tidak terlalu bermanfaat dibandingkan
dengan INNER, LEFT ataupun RIGHT. OUTER JOIN ini tidak
diimplementasikan di MySQL, namun hasil yang sama dapat diperoleh
menggunakan perintah UNION serta LEFT dan RIGHT JOIN.
SELECT tb_mahasiswa.nama, tb_matakuliah.nama_matakuliah
FROM tb_mahasiswa LEFT JOIN tb_matakuliah
ON tb_mahasiswa.mata_kuliah=tb_matakuliah.id
UNION
SELECT tb_mahasiswa.nama, tb_matakuliah.nama_matakuliah
FROM tb_mahasiswa RIGHT JOIN tb_matakuliah
ON tb_mahasiswa.mata_kuliah=tb_matakuliah.id;
29
Structured Query Language (SQL) – SELECT Menggunakan JOIN
Q3. Bisakah field yang menjadi prasyarat pada klausa ON lebih dari
satu? Berikan satu contoh.
Catatan:
Jika nama field yang digunakan pada klausa ON adalah sama pada kedua
tabel, maka untuk menghindari penggunaan nama tabel dan nama field
untuk referensi dapat digunakan perintah USING.
Tabel tb_mahasiswa Tabel tb_matakuliah
id nama id_kuliah id_kuliah nama_matakuliah
1 ADI 1 1 Basis Data
2 IKA 1 2 Logika
Pemrograman
3 BUDI 2 3 Sistem Informasi
4 WATI 5 4 Struktur Data
5 DODI NULL 5 Otomata
Dari kedua tabel di atas dapat dilihat bahwa field yang digunakan untuk
menghubungkan tabel-tabel tersebut adalah “id_kuliah”. Karena nama
field referensi pada kedua tabel adalah sama (“id_kuliah”) maka query
INNER JOIN pada halaman 2 dapat diubah menjadi:
30
Structured Query Language (SQL) – SELECT Menggunakan JOIN
31
Structured Query Language (SQL) – SELECT dengan OPERATOR UNION dan IN
MODUL VII
STRUCTURED QUERY LANGUAGE (SQL)
SELECT DENGAN OPERATOR UNION DAN IN
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk melakukan
select dari beberapa tabel dengan union dan in.
B. Indikator
Mahasiswa mampu melakukan melakukan select dari beberapa tabel
dengan UNION dan IN.
C. Materi
1. UNION
MySQL Union adalah statemen yang mengkombinasikan dua buah
atau lebih resultset dari multi sql statemen SELECT sehingga menjadi
satu buah resulset. Union Statemen memiliki beberapa ketentuan
sebagai berikut.
a. Jumlah kolom/field dari setiap statemen SELECT harus sama.
b. Tipe data kolom/field dari setiap statemen SELECT harus
kompatibel.
Secara default Statemen UNION akan menghapus semua record
duplikat dari resultset. Apabila Anda ingin record duplikat tetap di
tampilkan maka pada resultset tuliskan secara explisit UNION ALL.
Format Penulisan:
SELECT [nama kolom1], [nama kolom2], dst FROM [nama tabel1]
UNION
SELECT [nama kolom1], [nama kolom2], dst FROM [nama tabel2];
Contoh:
a. tabel_pelanggan
id_pelanggan nama_pelanggan alamat kota provinsi
1 isaraja jalan ponegoro medan sumatera utara
2 mikha jalan ponegoro bandung jawa barat
3 novita dewi jalan patimura badung bali
4 fatin jalan teuku umar surabaya jawa timur
5 seena jalan hasanudin padang sumatera barat
b. tabel_suplier
id_suplier nama_suplier alamat kota provinsi
1 paloma jalan angkasa denpasar bali
2 gandaria jalan patimura sibolga sumatera utara
3 metro jalan teuku umar bandung jawa barat
4 global jalan salwana Bukittinggi sumatera barat
5 mnc jalan werdapura denpasar bali
32
Structured Query Language (SQL) – SELECT dengan OPERATOR UNION dan IN
Query:
SELECT kota FROM tabel_pelanggan
UNION
SELECT kota FROM tabel_suplier;
Output:
kota
medan
bandung
badung
surabaya
padang
denpasar
sibolga
Bukittinggi
Q1. Apakah perbedaan UNION dengan JOIN?
2. IN
Operator IN memungkinkan Anda untuk menentukan beberapa nilai
dalam WHERE clause.
Format Penulisan:
SELECT [nama kolom1], [nama kolom2], dst
FROM [nama tabel]
WHERE [nama kolom] IN([nilai1],[nilai2],…);
Contoh:
c. tabel_buku
ISBN judul Jml_hal harga penerbit
1111 Dunia Sophie 765 9000 Mizan
2222 The Lost Symbol 867 10000 Gramedia
3333 A Morcking Bird 685 30000 Gramedia
4444 The Secret 687 11000 Gramedia
5555 Piano di Tepi Pantai 859 20000 Andi
Query:
SELECT * FROM tabel_buku WHERE harga IN (Gramedia, Andi);
Output:
ISBN judul Jml_hal harga penerbit
2222 The Lost Symbol 867 10000 Gramedia
3333 A Morcking Bird 685 30000 Gramedia
4444 The Secret 687 11000 Gramedia
5555 Piano di Tepi Pantai 859 20000 Andi
33
Structured Query Language (SQL) – SELECT dengan OPERATOR UNION dan IN
Q2. Pada saat kondisi seperti apa operator OR dapat digantikan dengan
IN?
D. LATIHAN
Kerjakanlah latihan berikut:
1. Buatlah database dengan nama “prak7”
2. Buatlah database yang berisi tabel beserta recordnya sesuai
dengan materi diatas yakni: tabel_suplier, dan tabel_pelanggan.
3. Tampilkan jumlah kota dari tabel_pelanggan dan tabel_suplier.
4. Tampilkan jumlah provinsi tabel_pelanggan dan tabel_suplier.
5. Tampilkan nama pelanggan dan suplier yang beralamat di jalan
ponegoro, jalan teuku umar, jalan patimura dengan menggunakan
IN clause.
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
34
Structured Query Language (SQL) – Studi Kasus
MODUL VIII
STUDI KASUS
A. Tujuan Praktikum
Mahasiswa dapat memahami sintaks perintah pada MySQL yang telah
dipelajari pada sebelumnya dan dapat mengimplementasikan secara
nyata pada studi kasus.
B. Indikator
Mahasiswa mampu menyelesaikan permasalahan yang ada pada studi
kasus menggunakan perintah-perintah SQL dengan benar dan dapat
menampilkan hasil yang benar.
C. Studi Kasus
Data diambil dari database Northwind, merupakan kasus pada aplikasi
penjualan, tetapi telah dimodifikasi datanya. Skema basis datanya dapat
dilihat pada gambar 1.
Gambar 1. Skema Basis Data Penjualan (Northwind)
Terdapat 8 tabel pada Basis Data Penjualan (Gambar 1), yang saling
berelasi, tabel-tabel tersebut adalah :
1. Categories à merupakan tabel referensi untuk mengkategorikan
pruduk yang akan dijual, 1 kategori terdiri dari banyak produk
2. Suppliers à merupakan tabel yang digunakan untuk mengetahui
produk yang dijual dibeli dari supplier mana. Satu supplier bisa
mimiliki banyak produk
3. Products à tabel ini merupakan tabel untuk mencatat produk-
produk yang dijual.
4. Employers à tabel yang digunakan untuk mencatat karyawan yang
aktif melakukan penjualan / pemesan produk (order), setiap
transaksi akan dicatat EmployeeID yang melakukan transaksi
35
Structured Query Language (SQL) – Studi Kasus
36
Structured Query Language (SQL) – Studi Kasus
37
Structured Query Language (SQL) - VIEW
MODUL IX
STRUCTURED QUERY LANGUAGE (SQL)
VIEW
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk membuat,
mengubah (alter) dan menghapus view, serta memahami fungsi dan
kegunaan dari view.
B. Indikator
Mahasiswa mampu membuat, mengubah, dan menghapus view pada
MySQL, serta memanggil kembali dan menempatkan secara tepat view
tersebut untuk menampilkan data.
C. Materi
DBMS menyediakan suatu mekanisme untuk ‘menyembunyikan’ detil
data tertentu yang disebut dengan VIEW. View merupakan sebuah tabel
semu / tabel lojik, dimana datanya berasal dari satu atau lebih tabel lain
yang disebut sebagai tabel sumber. View dibuat untuk memudahkan
pengguna menampilkan data.
38
Structured Query Language (SQL) - VIEW
D. Contoh Kasus
Gunakan tabel penjualan yang terdapat pada Studi Kasus Northwind.
Selain dipanggil dengan perintah SELECT satu tabel, View juga dapat di
JOIN kan dengan tabel atau view yang lainnya, perintahnya sama dengan
perintah JOIN pada pembahasan sebelumnya.
E. LATIHAN
Kerjakanlah latihan berikut:
39
Structured Query Language (SQL) - VIEW
F. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. MySQL Tutorials, http://www.devshed.com
40
Structured Query Language (SQL) – Stored Procedure dan Cursor
MODUL X
STRUCTURED QUERY LANGUAGE (SQL)
STORED PROCEDURE DAN CURSOR
A. Tujuan Praktikum
Mahasiswa memahami sintaks perintah pada MySQL untuk membuat
stored procedure dan perulangan dengan cursor.
B. Indikator
Mahasiswa mampu membuat stored procedure dan perulangan dengan
cursor.
C. Materi
• Deklarasi Stored Procedure
Definisi dari stored procedure adalah suatu bagian dari deklarasi kode
SQL yang disimpan di katalog database dan dapat dipanggil/dijalankan
oleh suatu program, trigger ataupun stored procedure lainnya. Stored
procedure juga dapat memanggil dirinya sendiri (recursive) akan tetapi
tidak semua versi MySQL mendukung stored procedure yang recursive.
Beberapa keuntungan dari stored procedure adalah:
1. Stored procedure meningkatkan performa aplikasi. Setelah selesai
dibuat maka stored procedure akan dikompilasi dan disimpan
pada katalog database. Stored procedure berjalan lebih cepat
dibandingkan perintah SQL yang belum dikompilasi yang dikirim
oleh aplikasi.
2. Stored procedure mengurangi traffic dari database dan aplikasi
karena tidak perlu mengirimkan perintah SQL yang belum
dikompilasi. Yang perlu dikirimkan oleh aplikasi ke database
server adalah nama dari stored procedurenya dan hasilnya akan
dikirim balik oleh database server ke aplikasi pemanggil.
3. Stored procedure dapat digunakan berulang-ulang dan transparan
terhadap semua aplikasi yang ingin menggunakannya.
4. Stored procedure adalah aman karena database administrator
dapat memberikan akses yang sesuai ke tiap stored procedure
tanpa memberikan akses langsung ke tabel.
Akan tetapi, stored procedure juga memiliki kekurangan sebagai berikut:
1. Stored procedure membuat database server memiliki beban yang
tinggi dalam hal memori dan prosesor.
2. Stored procedure hanya mengandung perintah-perintah deklarasi
MySQL sehingga sangat sulit untuk menulis prosedur yang
kompleks yang dibutuhkan oleh aplikasi.
3. Stored procedure tidak dapat di-debug.
Contoh dari stored procedure yang menampilkan semua produk yang
ada pada tabel “Produk” adalah sebagai berikut:
41
Structured Query Language (SQL) – Stored Procedure dan Cursor
DELIMITER //
CREATE PROCEDURE AmbilSemuaProduk()
BEGIN
SELECT * FROM Produk;
END //
DELIMITER ;
Perintah DELIMITER digunakan untuk mengubah delimiter standar (“;”)
menjadi yang lain, dalam hal ini tanda “//”. Fungsi delimiter ini adalah
untuk memisahkan antara satu perintah SQL dengan yang lainnya.
Pembuatan stored procedure dimulai dengan perintah CREATE
PROCEDURE yang diikuti dengan nama procedure-nya. Isi dari stored
procedure berupa perintah-perintah deklarasi SQL diletakkan di antara
BEGIN dan END. Stored procedure dapat dijalankan menggunakan
perintah:
CALL nama_stored_procedure();
Untuk memanggil stored procedure AmbilSemuaProduk dilakukan
dengan perintah:
CALL AmbilSemuaProduk();
Keluaran dari perintah di atas adalah semua data yang ada pada tabel
Produk.
• Deklarasi Variabel
Variabel digunakan pada stored procedure untuk menyimpan hasil secara
langsung. Untuk mendeklarasikan suatu variabel perintah yang
digunakan adalah:
DECLARE nama_variabel tipe_data(size) DEFAULT nilai_default;
Mengikuti perintah DECLARE adalah nama dari variabel. Nama variabel
ini harus mengikuti konvensi penamaan variabel dan tidak boleh sama
dengan nama tabel atau kolom pada database. Selanjutnya adalah tipe
data yang dapat berupa semua tipe yang disediakan oleh MySQL seperti
INT, VARCHAR, DATETIME dan lain sebagainya. Disamping tipe data juga
perlu didefinisikan ukuran (size) dari tipe data tersebut. Ketika
mendeklarasikan variabel maka nilai awal dari variabel tersebut adalah
NULL. Nilai default NULL ini dapat diubah dengan mendefinisikan
perintah DEFAULT pada bagian akhir dari deklarasi varibel tersebut.
Sebagai contoh untuk mendeklarasikan variabel total_penjualan dengan
tipe data INT yang nilai defaultnya adalah 0 maka digunakan perintah:
42
Structured Query Language (SQL) – Stored Procedure dan Cursor
43
Structured Query Language (SQL) – Stored Procedure dan Cursor
Seperti dilihat di atas, stored procedure menerima paramtere
namaNegara dengan tipe VARCHAR yang panjang maksimumnya adalah
255. Hasil dari stored procedure ini adalah menampilkan semua
namaKota dan telpon dari tabel Kota yang negara-nya sama dengan
parameter yang diberikan. Sebagai contoh: untuk menampilkan semua
kota di negara Indonesia maka digunakan perintah:
CALL AmbilKotaPerNegara(‘INDONESIA’);
Contoh berikut digunakan untuk menampilkan jumlah record penjualan
yang status penjualannya merupakan suatu parameter.
DELIMITER $$
CREATE PROCEDURE TotalOrder(IN orderStatus VARCHAR(25),
OUT total INT)
BEGIN
SELECT count(orderNumber) INTO total FROM orders
WHERE status = orderStatus;
END$$
DELIMITER ;
Misalnya diinginkan untuk mendapatkan jumlah order yang statusnya
adalah “Dikapalkan” maka perintahnya adalah:
CALL TotalOrder(‘Dikapalkan’,@total);
• Perulangan dengan Cursor
MySQL mendukung penggunaan Cursor pada stored procedure, function
dan trigger. Cursor digunakan untuk melakukan iterasi pada himpunan
record dari suatu tabel yang dihasilkan oleh suatu query dan melakukan
44
Structured Query Language (SQL) – Stored Procedure dan Cursor
DELIMITER $$
DROP PROCEDURE IF EXISTS CursorProc$$
CREATE PROCEDURE CursorProc()
BEGIN
DECLARE no_more_products, quantity_in_stock INT DEFAULT 0;
DECLARE prd_code VARCHAR(255);
DECLARE cur_product CURSOR FOR SELECT productCode FROM products;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_products = 1;
/* for loggging information */
CREATE TABLE infologs (
Id int(11) NOT NULL AUTO_INCREMENT,
Msg varchar(255) NOT NULL,
PRIMARY KEY (Id)
);
45
Structured Query Language (SQL) – Stored Procedure dan Cursor
OPEN cur_product;
FETCH cur_product INTO prd_code;
REPEAT
SELECT quantityInStock INTO quantity_in_stock
FROM products WHERE productCode = prd_code;
IF quantity_in_stock < 100 THEN
INSERT INTO infologs(msg) VALUES (prd_code);
END IF;
FETCH cur_product INTO prd_code;
UNTIL no_more_products = 1
END REPEAT;
CLOSE cur_product;
SELECT * FROM infologs;
DROP TABLE infologs;
END$$
DELIMITER;
Stored procedure di atas adalah satu contoh sederhana dimana hasil yang
sama bisa didapatkan melalui query biasa. Pada contoh di atas digunakan
suatu cursor pada tabel “products” untuk membaca semua kode produk
(“productCode”) yang ada. Setelah itu dilakukan pemeriksaan untuk
masing-masing kode produk. Jika jumlah stock yang dimiliki
(“quantity_in_stock”) untuk suatu kode produk adalah kurang dari 100
maka kode produk tersebut dicatat pada suatu tabel sementara
(“infologs”). Setelah proses looping selesai dilakukan maka hasil dari
tabel sementara ini ditampilkan ke layar menggunakan perintah SELECT.
D. LATIHAN
Gunakan database northwind.
1. Buatlah stored procedure untuk menambahkan record baru ke
tabel Customers (parameternya adalah CustomerID, ContactName,
CompanyName, Address, Phone).
2. Buatlah stored procedure untuk mendapatkan total belanja yang
dilakukan oleh seorang customer (parameternya adalah
CustomerID).
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. SitePoint, http://www.sitepoint.com
46
Structured Query Language (SQL) – Trigger
MODUL XI
STRUCTURED QUERY LANGUAGE (SQL)
TRIGGER
A. Tujuan Praktikum
Mahasiswa memahami syntax trigger serta penggunaan trigger pada
MySQL.
B. Indikator
Mahasiswa mampu membuat dan menggunakan trigger pada MySQL.
C. Materi
1. Trigger
Trigger merupakan sekumpulan perintah atau sintaks yang
akan secara otomatis dijalankan jika terjadi operasi tertentu dalam
tabel atau view. Trigger digunakan untuk memanggil satu atau
beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi
proses INSERT, UPDATE atau DELETE dari suatu tabel. Sebagai contoh
misalnya kita ingin menyimpan id pelanggan secara otomatis ke tabel
‘log’ sebelum menghapus data di tabel pelanggan.
Adapun jenis perubahan yang dijalankan dalam trigger adalah :
a) BEFORE INSERT on TABEL1 : menjalankan proses di dalamnya
pada saat sebelum melakukan operasi INSERT di TABEL1
b) AFTER INSERT on TABEL1 menjalankan proses di dalamnya
pada saat sesudah melakukan operasi INSERT di TABEL1
c) BEFORE UPDATE on TABEL1 menjalankan proses di dalamnya
pada saat sebelum melakukan operasi UPDATE di TABEL1
d) AFTER UPDATE on TABEL1 menjalankan proses di dalamnya
pada saat sesudah melakukan operasi UPDATE di TABEL1
e) BEFORE DELETE on TABEL1 : menjalankan proses di dalamnya
pada saat sebelum melakukan operasi DELETE di TABEL1
f) AFTER DELETE on TABEL1 : menjalankan proses di dalamnya
pada saat sesudah melakukan operasi DELETE di TABEL1
Format Penulisan:
DELIMITER $$
CREATE TRIGGER [nama trigger]
[BEFORE/AFTER] [INSERT/UPDATE/DELETE]
ON [nama tabel]
FOR EACH ROW BEGIN
[SQL STATEMENT]
END$$
DELIMITER ;
47
Structured Query Language (SQL) – Trigger
Referensi "OLD" dan "NEW"
Karena trigger digunakan pada saat terjadi perubahan row
data, maka kita perlu referensi ke row sebelum dan sesudah
perubahan. Untuk ini ada dua alias yang berfungsi untuk hal tersebut
yaitu OLD dan NEW.
Sesuai namanya, OLD digunakan untuk referensi sebelum
perubahan dan NEW untuk referensi sesudah perubahan.
Contoh:
Berikut ini contoh trigger yang akan mencatat aktivitas ke tabel
log setiap terjadi proses insert ke tabel pelanggan:
DELIMITER $$
CREATE TRIGGER after_insert
AFTER INSERT ON penjualan
FOR EACH ROW BEGIN
INSERT INTO log (deskripsi, waktu_jual, kode_user)
VALUES ('Insert data ke tabel pelanggan', now(), NEW. kode_user);
END$$
DELIMITER ;
Focus Group Discussion:
-Apakah perbedaan Trigger dengan Store Procedure?
-Apakah pada trigger dapat memanggil store ?
D. LATIHAN
Kerjakanlah latihan berikut:
1. Buatlah database dengan nama “prak11”
2. Buatlah tabel berikut.
-Tabel barang dengan record berikut:
id_brg nama_brg stok harga Update_date
1 piatos 100 5000 2013-6-3 12:00:00
2 big cola 50 3500 2013-6-3 12:00:00
3 fanta 100 4500 2013-6-3 12:00:00
4 lotte 50 1500 2013-6-3 12:00:00
5 top 50 1000 2013-6-3 12:00:00
-Tabel penjualan_detail dengan record berikut:
no_nota id_brg jml_brg harga_per_unit total
(NULL) (NULL) (NULL) (NULL) (NULL)
• Kemudian buatlah trigger untuk melakukan pengurangan
stock setiap terjadi transaksi pembelian barang
• Buatkan tabel log sebagai berikut:
48
Structured Query Language (SQL) – Trigger
id_log jenis_operasi satement wkt_eksekusi
(NULL) (NULL) (NULL) (NULL)
Ket: jenis_operasi:insert/update/delete, statement:syntax yg
dieksekusi
• Setelah kedua trigger dibentuk inputkan data berikut pada
tabel penjualan_detail
no_nota id_brg jml_brg harga_per_unit total
10 1 2 5000 10000
10 2 1 3500 3500
10 4 2 1500 3000
11 1 2 5000 10000
11 2 2 3500 7000
12 2 2 3500 7000
12 2 2 3500 7000
13 2 2 3500 7000
13 2 2 3500 7000
14 2 3 3500 10500
14 2 3 3500 10500
14 2 3 3500 10500
15 1 2 5000 10000
15 2 2 3500 7000
16 1 2 5000 10000
16 3 2 4500 9000
17 4 1 1500 1500
3. Kemudian tampilkan yang tabel log dan tabel barang hasilkan.
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
49
Studi Kasus II
MODUL XII
STUDI KASUS II
A. Tujuan Praktikum
Mahasiswa dapat memahami sintaks perintah pada MySQL yang telah
dipelajari pada sebelumnya dan dapat mengimplementasikan secara
nyata pada studi kasus.
B. Indikator
Mahasiswa mampu menyelesaikan permasalahan yang ada pada studi
kasus menggunakan perintah-perintah SQL dengan benar dan dapat
menampilkan hasil yang benar.
C. Materi
Data diambil dari database Northwind, merupakan kasus pada aplikasi
penjualan, tetapi telah dimodifikasi datanya. Skema basis datanya dapat
dilihat pada gambar 1.
Gambar 1. Skema Basis Data Penjualan (Northwind)
Terdapat 8 tabel pada Basis Data Penjualan (Gambar 1), yang saling
berelasi, table-tabel tersebut adalah :
1. Categories à merupakan table referensi untuk mengategorikan
produk yang akan dijual, 1 kategori terdiri dari banyak produk.
2. Suppliers à merupakan table yang digunakan untuk mengetahui
produk yang dijual dibeli dari supplier mana. Satu supplier bisa
memiliki banyak produk.
3. Products à table ini merupakan table untuk mencatat produk-
produk yang dijual
4. Employers à table yang digunakan untuk mencatat karyawan yang
aktif melakukan penjualan/pemesanan produk (order), setiap
transaksi akan dicatat EmployeeID yang melakukan transaksi
50
Studi Kasus II
penjualan tersebut. Satu karyawan dapat melakukan banyak
transaksi penjualan (order).
5. Orders à table ini adalah table utama untuk mencatat pemesanan,
no_pemesanan, tanggal dan lain-lain dicatat di table ini.
6. Orders_detailss à table ini tidak bisa terpisah dari table Orders,
table ini merupakan detail dari pemesanan, yang mencatat produk
apa yang dibeli dalam transaksi penjualan/pemesanan. Satu order
memiliki 1 atau lebih produk yang dibeli.
7. Customers à table ini berelasi dengan Orders yang merupakan
table referensi untuk menunjukkan konsumen yang melakukan
pemesanan. Satu konsumen dapat melakukan n pemesanan.
8. Shipper à table ini hampir sama posisinya dengan table
Customers, tetapi berfungsi untuk mengetahui pesanan tersebut
dikirim oleh perusahaan pengiriman apa.
D. LATIHAN
Kerjakanlah latihan berikut:
Buatlah view untuk soal 1-5 :
1. Menampilkan ProductName dan UnitPrice dari produk yang di-
supply oleh perusahaan yang berawalan G dengan kategori
Produce,Seafood atau Dairy Product. View hanya menampilkan
product yang UnitsInStock tidak lebih dari 10.
2. Menampilkan Nama category dan jumlah barang (bukan jumlahan
dari stock, 1 id barang dihitung 1, berapapun stocknya) di dalam
kategori tersebut. Apabila ada kategori yang jumlah barangnya nol,
harus tetap ditampilkan.
3. Menampilkan namapegawai (FirstName dan Lastname menjadi
satu kolom),jumlah order yang ditangani dari pegawai yang
menangani order terbanyak di urutan ke-5.
4. Menampilkan data OrderID, ProductName, UnitPrice, Quantity,
Discount, Subtotal dari customer yang perusahaan customernya
bernama Quick-Stop dan pegawai dengan last name Fuller dan
menggunakan jasa pengiriman selain Speedy Express. Anggap
diskon sudah fix(bukan dalam persen lagi).
5. Menampilkan data Nama Pegawai (FirstName dan LastName
digabung) dan nama Supervisornya (ReportsTo) dari semua
pegawai.
6. Buatlah stored procedure untuk menyisipkan data ke tabel
Shippers
7. Buatlah stored procedure untuk menampilkan data ProductName
dan Golongan Harga setiap Product. Dimana field golongan harga
ada 3 yaitu : jika harga di bawah 5 berarti murah, 5 sampai 10
termasuk golongan menengah, selain itu mahal.
8. Buatlah stored procedure untuk menampilkan country dari semua
employees. Country yang sama ditampilkan hanya sekali. Cara
51
Studi Kasus II
menampilkan country adalah ditampilkan ke dalam 1 baris, setiap
country dipisahkan tanda semicolon (;). Misalnya : USA;UK.
9. Buatlah trigger untuk mengurangi nilai stock pada products ketika
ordersdetails ditambah.
10. Buatlah table log_shipper dengan field yang sama dengan shippers.
Kemudian buatlah trigger untuk menambahkan data yang dihapus
dari log_shipper ketika ada data yang dihapus dari log_shippers.
E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. MySQL Tutorials, http://www.devshed.com
52