0% menganggap dokumen ini bermanfaat (0 suara)
154 tayangan

Modul Prak Basis Data

Modul ini membahas tentang modul praktikum basis data yang digunakan sebagai acuan pelaksanaan praktikum basis data di Program Studi Informatika Universitas Udayana. Modul ini terdiri dari 9 bab yang mencakup penjelasan tentang SQL untuk membuat, mengubah, dan menghapus basis data serta tabel, melakukan query dengan operator dan klausa seperti select, join, union, dan view.

Diunggah oleh

Jeremi Herodian
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
154 tayangan

Modul Prak Basis Data

Modul ini membahas tentang modul praktikum basis data yang digunakan sebagai acuan pelaksanaan praktikum basis data di Program Studi Informatika Universitas Udayana. Modul ini terdiri dari 9 bab yang mencakup penjelasan tentang SQL untuk membuat, mengubah, dan menghapus basis data serta tabel, melakukan query dengan operator dan klausa seperti select, join, union, dan view.

Diunggah oleh

Jeremi Herodian
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 56

PROGRAM

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

Perintah IF NOT EXISTS digunakan untuk memastikan bahwa


database yang ingin dibuat belum ada di server. Jika database
dengan nama itu sudah ada, maka perintah pembuatan database ini
akan diabaikan.

CREATE DATABASE IF NOT EXISTS db_praktikum;

Sintaks untuk membuat table:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

(create_definition,...)

[table_options]

[partition_options]

create_definition:

col_name column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type]

(index_col_name,...)[index_option] ...
| {INDEX|KEY} [index_name] [index_type]
(index_col_name,...)[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]

[index_name] [index_type] (index_col_name,...)

[index_option] ...
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name]

(index_col_name,...)[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name]

(index_col_name,...) reference_definition
| CHECK (expr)

column_definition:

data_type
[NOT NULL | NULL]
[DEFAULT default_value]
[AUTO_INCREMENT]
[UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'string']
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
[STORAGE {DISK|MEMORY|DEFAULT}]
A [reference_definition]
s

Q3. Tipe-tipe data apa saja yang disediakan oleh MySQL?

Dari sintaks di atas dapat dilihat bahwa terdapat perintah
CREATE diikuti dengan TABLE beserta table_name yang
merupakan nama dari tabel yang diinginkan. Setelah nama tabel
maka diikuti dengan col_name (nama field/kolom) yang diinginkan
dan column_definition (berisikan tipe data serta beberapa properti
yang untuk kolom tersebut). Properti itu antara lain: NOT
NULL/NULL, DEFAULT, AUTO_ICREMENT, UNIQUE dan lain
sebagainya. Contoh untuk membuat suatu tabel dengan nama
tb_baru dengan dua buah kolom yaitu col_id (tipe data INT) dan
col_name (tipe data VARCHAR) adalah sebagai berikut:

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

ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type]


|
(index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name][index_type] (index_col_name,...)
[index_option] ...
| ADD FULLTEXT
[INDEX|KEY][index_name](index_col_name,...)
[index_option] ...
| ADD SPATIAL
[INDEX|KEY][index_name](index_col_name,...)
[index_option] ...
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name]
(index_col_name,...) reference_definition
| ALTER [COLUMN] col_name {SET DEFAULT literal
| DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name
column_definition [FIRST|AFTER col_name]
| MODIFY [COLUMN] col_name column_definition [FIRST |
AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| MAX_ROWS = rows
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO|AS] new_tbl_name
| ORDER BY col_name [, col_name] ...
| CONVERT TO CHARACTER SET charset_name [COLLATE
collation_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=]
collation_name]
| DISCARD TABLESPACE
IMPORT TABLESPACE
|
ADD PARTITION (partition_definition)
|
|
DROP PARTITION partition_names
| COALESCE PARTITION number
REORGANIZE PARTITION [partition_names INTO
|

(partition_definitions)]
ANALYZE PARTITION {partition_names | ALL}
|
|
CHECK PARTITION {partition_names | ALL}
| OPTIMIZE PARTITION {partition_names | ALL}
REBUILD PARTITION {partition_names | ALL}
|
REPAIR PARTITION {partition_names | ALL}
|
PARTITION BY partitioning_expression
|
| REMOVE PARTITIONING

index_col_name: col_name [(length)] [ASC | DESC]

index_type: USING {BTREE | HASH}

index_option: KEY_BLOCK_SIZE [=] value | index_type
|
WITH PARSER parser_name
table_options:
table_option [[,] table_option]


Contoh penggunaan perintah ALTER:
• Untuk mengubah nama tabel dari t1 menjadi t2:

5
Data Definition Language (DDL) – Database & Tabel

ALTER TABLE t1 RENAME t2;



• Untuk mengubah tipe data kolom a dari INTEGER menjadi
TINYINT NOT NULL (nama kolom tidak diubah) dan kolom b
dari CHAR(10) ke CHAR(20) sekaligus mengubah namanya dari
b menjadi c:

ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c
CHAR(20);

• Untuk menghapus kolom c pada tabel t2:

ALTER TABLE t2 DROP COLUMN c;

• Untuk menambah suatu kolom c pada tabel t2 dengan properti
AUTO_INCREMENT:

ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL
AUTO_INCREMENT, ADD PRIMARY KEY (c);

Q5. Kenapa untuk menambah kolom c dengan properti
AUTO_INCREMENT harus ditambahkan NOT NULL dan PRIMARY
KEY?

3. DROP
Perintah DROP yang diikuti dengan nama database digunakan
untuk menghapus semua tabel di database tersebut termasuk
menghapus database itu sendiri. Penghapusan database dari server
juga mengakibatkan semua file (fisik) yang dibuat sebagai hasil dari
perintah CREATE database akan dihapus. Contoh perintah untuk
menghapus database db_praktikum adalah sebagai berikut:


DROP DATABASE db_praktikum;

Perintah DROP pada tabel digunakan untuk menghapus satu atau
lebih tabel pada database. Ketika perintah DROP TABLE dijalankan
maka semua data dan definis tabel akan dihapus. Sintaks dari
perintah DROP TABLE adalah sebagai berikut:


DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name
[, tbl_name] ...
[RESTRICT | CASCADE]


Contoh perintah untuk menghapus tabel t1 dan t2 dari database
adalah sebagai berikut:

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

Berikut adalah beberapa operator perbandingan yang digunakan pada


sintax mysql:

a. =, >, <, >=, <=, <>

Penjelasan:

Nama Deskripsi
= sama dengan
> lebih besar
< lebih kecil
>= lebih besar atau sama dengan
<= lebih kecil atau sama dengan
<> tidak sama dengan

Format Penulisan:

SELECT [nama kolom1], [nama kolom2], dst


FROM [nama tabel]
WHERE [nama kolom] [operator perbandingan]
[nilai]

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

a) SELECT judul, harga FROM tabel_buku


WHERE harga <> 10000;

Output:
judul harga
The Secret 11000

b) SELECT * FROM tabel_buku WHERE harga = 10000;

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:

Melakukan select berdasarkan rentang nilai tertentu.

Format Penulisan:

SELECT [nama kolom1], [nama kolom2], dst


FROM [nama tabel]
WHERE [nama kolom] BETWEEN [nilai1] AND
[nilai2]

Contoh:
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

SELECT * FROM tabel_buku WHERE harga BETWEEN 9000 AND


11000;

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

Berikut adalah beberapa operator logika yang digunakan pada sintax


mysql:
AND, OR, XOR

Contoh:
tabel_buku

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 Andi
5555 Piano di Tepi Pantai 859 10000 Andi

1. SELECT * FROM tabel_buku WHERE harga = 10000


AND penerbit = ‘gramedia’;

Output

ISBN judul Jml_hal harga penerbit


2222 The Lost Symbol 867 10000 Gramedia
3333 A Morcking Bird 685 10000 Gramedia

2. SELECT * FROM tabel_buku WHERE harga = 10000


OR penerbit = ‘gramedia’;

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

3. SELECT * FROM tabel_buku WHERE harga = 10000


XOR penerbit = ‘gramedia’;

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

Berikut adalah beberapa klausa yang digunakan pada sintax mysql:


“%” dan” _”

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

ISBN judul Jml_hal harga penerbit


1111 World of Sophie 765 10000 Mizan
2222 The Lost Symbol 867 10000 Gramedia
3333 A Morcking Bird 685 10000 Gramedia
4444 World of avatar 687 11000 Andi
5555 Piano di Tepi Pantai 859 10000 Andi

1. SELECT * FROM tabel_buku WHERE judul LIKE


‘Worl%’;

15
SELECT dengan OPERATOR PERBANDINGAN, LOGIKA dan CLAUSA LIKE


Output

ISBN judul Jml_hal harga penerbit


1111 World of Sophie 765 10000 Mizan
4444 World of avatar 687 11000 Andi

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)

3. Coba untuk menambahkan data berikut ke dalam tabel tersebut!


kode_ nama_barang harga suplier
barang
ZN001 HTC X One 28000000 HTC
ZN002 Sony Xperia P 33000000 Sony Mobile
ZN003 Sony Xperia J 26000000 Sony Mobile
ZN004 Samsung Galaxy S Advance 30000000 Samsung
ZN005 LG Optimus L9 32000000 LG
ZN006 Samsung Galaxy SIII Mini 33000000 Samsung
ZN007 LG Optimus L7 25000000 LG
ZN008 Samsung Galaxy Y 11500000 Samsung
ZN009 Samsung Galaxy W 25000000 Samsung
ZN010 Samsung Galaxy Pocket 15000000 Samsung
ZN011 Sony Xperia Tipo 15000000 Sony Mobile
ZN012 Sony Xperia Miro 20000000 Sony Mobile
ZN013 LG Optimus L3 20000000 LG
ZN014 HTC X EVO 3D 35000000 HTC
ZN015 LG Optimus 3D 50000000 LG

4. Tampilkan data berdasarkan tabel yang telah dibuat dengan kriteria:


harga berkisar antara 2 juta hingga 3 juta dengan suplier samsung dan
Sony.

5. Berdasarkan Tabel Prak3 dengan record data seperti diatas, Naikkan


harga barang Sony Mobile dan LG senilai 500.000 dengan kisaran
harga 2 juta sampai 3 juta.

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”.

7. Berdasarkan Tabel Prak3 dengan record data seperti diatas, Ubahlah


kata “Sony” menjadi “Sony Mobile” pada setiap nama barang yang
mengandung kata “Sony” dengan Kisaran Harga 2juta sampai 3 juta.

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;

Q1 . Apakah jadinya jika keyword DESC dan ASC dihilangkan?



2. BETWEEN
Perintah ini digunakan untuk mengambil data pada interval
terterntu. Perintah ini akan mengikuti klausa WHERE.

SELECT <`field1`, `field2`, …, `fieldn`>
FROM <`table name`>
[WHERE <`field`> BETWEEN <value1> AND <value2>]
[LIMIT a,b]

Contoh perintah untuk mengambil data barang dengan harga


antara 2000 sampai 10000 adalah sebagai berikut :

SELECT *

FROM Barang
WHERE Harga BETWEEN 2000 AND 10000


Q2. Bisakah Anda mengambil data yang sama dengan perintah SQL
tanpa menggunakan BETWEEN?


3. FIELD KALKULASI
Kadangkala kita ingin menampilkan sebuah data yang dihasilkan
dari kombinasi beberapa field. Field kalkulasi memungkinkan semua
itu. Field kalkulasi adalah sebuah field yang dihasilkan dari
kombinasi field-field yang ada dalam tabel. Field hitungan tidak
benar-benar ada dalam tabel database, hanya bersifat on-the fly
dalam statement SELECT. Field yang dihasilkan tidak mempunyai
nama, tetapi dapat diberikan alternatif nama dengan pemberian
alias. Misalnya jika ingin mengetahui berapakah uang yang akan

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

1111 Risna Palupi 8000000 ERP


2222 Made Agustia Wardani 9000000 HRD
3333 Dina Inshirna 7800000 HRD
4444 Putu Indah Ciptayani 6000000 Finance
5555 Krisna Shanti 4500000 ERP

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

Risna Palupi 8000000


Krisna Shanti 4500000
Untuk menggabungkan string Anda bisa memakai fungsi concat
(baca MySQL manual)
5. Gunakan SQL untuk menampilkan nama 3 orang pegawai dengan gaji
terbesar!
6. Gunakan SQL untuk menampilkan 3 nama pegawai dengan gaji
antara 5000000 sampai dengan 8000000, dari departemen HRD dan
ERP dan nama_belakangnya tidak mengandung ‘shi’!
7. Gunakan SQL untuk menampilkan data semua pegawai yang telah
terurut berdasarkan departmen secara menaik, kemudian untuk
masing-masing departemen akan diurut berdasarkan gaji dari besar
ke kecil!

E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. MySQL Tutorials, http://www.devshed.com

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

1. Perintah Average (AVG)


Fungsi AVG digunakan untuk memperoleh nilai rata-rata dari seluruh
nilai pada suatu kolom.

Sintaks:
SELECT AVG(nama_kolom) FROM nama_tabel;

2. Perintah Minimum (MIN)


Digunakan untuk memperoleh nilai minimum (yang terkecil) dari
suatu kolom.

Sintaks :
SELECT MIN(nama_kolom) FROM nama_tabel;

3. Perintah Maximum (MAX)


Digunakan untuk memperoleh nilai maksimum (yang terbesar) dari
suatu kolom.

Sintaks :
SELECT MAX(nama_kolom) FROM nama_tabel;

4. Perintah Total (SUM)


Digunakan untuk memperoleh nilai penjumlahan seluruh baris pada
suatu kolom.

Sintaks :
SELECT SUM(nama_kolom) FROM nama_tabel;

5. Perintah Count (COUNT)


Fungsi agregrasi count sering digunakan untuk menghitung jumlah
baris dalam tabel.

Sintaks :
SELECT COUNT (nama_kolom) FROM nama_tabel;

6. Fungsi Agregasi dengan Klausa Group By


Jika fungsi agregasi nomor 1 sampai 5 ingin diterapkan pada
kelompok himpunan baris data, maka digunakan klausa GROUP BY.
Baris-baris yang memiliki nilai yang sama pada satu kolom jika
diterapkan klausa group by maka akan dimasukkan dalam satu
kelompok.

23
FUNGSI AGREGASI dan CLAUSA HAVING

Sintaks :
SELECT nama_kolom_group , COUNT (nama_kolom)
FROM nama_tabel GROUP BY nama_kolom_group;

7. Fungsi Agregasi dengan Klausa Having


Klausa Having hampir sama dengan WHERE, hanya kluasa ini
diterapkan pada SQL yang menggunakan Klausa Group By. Klausa
Having digunakan untuk menyeleksi hasil kelompok baris yang
dihasilkan oleh Klausa Group By, dalam kasus agregasi dapat
diterapkan seleksi pada kolom agregasi.

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

1. Tampilkan rata-rata seluruh tagihan pemakaian listrik PLN!


SELECT AVG(tagihan) FROM tagihan_pelanggan;
2. Tampilkan nilai terkecil dari daftar tagihan litrik PLN!
SELECT MIN(tagihan) FROM tagihan_pelanggan;
3. Tampilkan nilai terbesar dari daftar tagihan listrik PLN!
SELECT MAX(tagihan) FROM tagihan_pelanggan;
4. Tampilkan jumlah total semua tagihan pemakaian listrik PLN!
SELECT SUM(tagihan) FROM tagihan_pelanggan;
5. Berapa jumlah pelanggan PLN pada tabel tagihan tersebut!
SELECT COUNT(id) FROM tagihan_pelanggan;
6. Tampilkan tagihan terbesar masing-masing kelas pelanggan!
SELECT kelas, MAX(tagihan) FROM tagihan_pelanggan
GROUP BY kelas;

24
FUNGSI AGREGASI dan CLAUSA HAVING

7. Tampilkan total tagihan masing-masing kelas pelanggan yang totalnya


lebih besar dari 100.000
SELECT kelas, SUM(tagihan) FROM tagihan_pelanggan GROUP BY kelas
HAVING SUM(tagihan) > 100000;

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

3. Gunakan DML untuk membuat untuk menambahkan data berikut ke


dalam tabel tersebut!
kode_obat nama_obat golong harga_obat Jumlah_stok
an
OB001 MEGADEX B 10000 10
OB003 MEGANEURON K 20000 100
OB004 WISHEN PRONATAL T 5000 20
OB005 WOODS Antitusif T 15000 30
OB006 VADAZOL B 30000 50

4. Gunakan SQL untuk menampilkan harga termurah dari daftar obat


tersebut!
5. Gunakan SQL untuk menampilkan total data obat tersebut!
6. Gunakan SQL untuk menampilkan rata-rata harga obat masing-
masing golongan obat
7. Gunakan SQL untuk menampilkan jumlah total stok obat pada
masing-masing golongan obat dimana total stok lebih besar dari 55

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:

SELECT tb_mahasiswa.nama, tb_matakuliah.nama_matakuliah


FROM tb_mahasiswa INNER JOIN tb_matakuliah
ON tb_mahasiswa.mata_kuliah=tb_matakuliah.id;

Perintah SELECT bertujuan untuk menampilkan “nama” dari tabel


“tb_mahasiswa” dan “nama_matakuliah” dari tabel “tb_matakuliah”.
Karena kedua field yang ingin ditampilkan berasal dari dua tabel yang
berbeda, maka kedua tabel tersebut harus digabungkan. Perintah
FROM di atas menggabungkan tabel “tb_mahasiswa” dengan tabel
“tb_matakuliah” secara INNER JOIN. Hubungan kedua tabel itu
didefinisikan melalui perintah ON yaitu dengan menyamakan field
“mata_kuliah” pada tabel “tb_mahasiswa” dengan field “id” pada tabel
“tb_matakuliah”. Hasil dari perintah di atas adalah sebagai berikut:

nama nama_matakuliah
ADI Basis Data
IKA Basis Data
BUDI Logika Pemrograman
WATI Otomata

Hasil dari query di atas tidak menampilkan nama DODI karena nilai
field “mata_kuliah” pada tabel “tb_mahasiswa” untuk mahasiswa DODI
adalah NULL, dimana nilai NULL ini tidak dapat ditemukan
padanannya pada field “id” di tabel “tb_matakuliah”. Hasil query
SELECT menggunakan INNER JOIN, jika digambarkan menggunakan
notasi himpunan adalah sebagai berikut:



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

mahasiswa yang mengambil mata kuliah tersebut. Perintah query


untuk mendapatkan hasil tersebut adalah:
SELECT tb_mahasiswa.nama, tb_matakuliah.nama_matakuliah
FROM tb_mahasiswa RIGHT JOIN tb_matakuliah
ON tb_mahasiswa.mata_kuliah=tb_matakuliah.id;

Hasil dari query di atas adalah:

nama nama_matakuliah
ADI Basis Data
IKA Basis Data
BUDI Logika Pemrograman
(NULL) Struktur Data
(NULL) Sistem Informasi
WATI Otomata

Jika diperlihatkan menggunakan himpunan, hasil dari query tersebut
adalah:




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

Hasil dari perintah query di atas adalah sebagai berikut:


nama nama_matakuliah
ADI Basis Data
IKA Basis Data
BUDI Logika Pemrograman
(NULL) Struktur Data
(NULL) Sistem Informasi
WATI Otomata
DODI (NULL)

Jika digambarkan menggunakan notasi himpunan maka perintah
OUTER JOIN akan memberikan hasil sebagai berikut:



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

SELECT tb_mahasiswa.nama, tb_matakuliah.nama_matakuliah


FROM tb_mahasiswa INNER JOIN tb_matakuliah
USING (id_kuliah);


D. LATIHAN
Kerjakanlah latihan berikut:
Tabel tb_karyawan Tabel tb_departemen
kar_id kar_nama kar_gaji dep_id dep_nama
1 James 2000 101 Penjualan
2 Jack 4000 102 Marketing
3 Henry 6000 103 Akuntansi
4 Tom 8000 104 IT

Tabel tb_bekerja
kar_id dep_id
1 101
2 102
3 103
4 102

1. Buatlah query untuk menampilkan nama karyawan (“kar_nama”)
dan departemen tempatnya bekerja (“dep_nama”). Untuk
menjawab pertanyaan ini maka harus dilakukan JOIN untuk ketiga
tabel di atas.
2. Buatlah query untuk menampilkan nama departemen
(“dep_nama”) dan total karyawan yang dimilikinya (tampilkan
semua departemen).
3. Buatlah query untuk menampilkan nama departemen
(“dep_nama”) dan total gaji yang harus dibayar.

E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. SitePoint, http://www.sitepoint.com


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

penjualan tersebut. 1 Karyawan dapat melakukan banyak transaksi


penjualan (order)
5. Orders à tabel ini adalah tabel utama untuk mencatat pemesanan,
no pemesanan, tanggal dan lain-lain dicatat ditabel ini.
6. Order_Details à tabel ini tidak bisa terpisahkan dari tabel Orders,
tabel ini merupakan detail dari pemesanan, yang mencatat produk
apa yang dibeli dalam 1 transaksi penjualan / pemesanan. 1 order
memiliki 1 atau lebih produk yang dibeli.
7. Customers à tabel ini berelasi dengan tabel Orders yang
merupakan tabel referensi untuk menunjukan konsumen yang
melakukan pemesanan. Satu konsumen dapat melakukan n
pemesanan
8. Shippers à tabel ini hampir sama posisinya dengan tabel
Customers, tetapi berfungsi untuk mengetahui pesanan tersebut
dikirim oleh perusahan pengiriman apa.

D. LATIHAN KASUS
Kerjakanlah latihan berikut:
1. Tampilkan semua data pada tabel Categories
2. Tampilkan SupplierID,CompanyName,ContactName,PostalCode
pada tabel Suppliers
3. Tampilkan semua supplier yang hanya memiliki No. Fax
4. Tampilkam supplier yang CompanyName=’ Bigfoot Breweries’
5. Tampilkan Products yang CategoryID = 6
6. Tampilkan ProductID, ProductName yang CategoryName nya
adalah ‘Grains/Cereals’
7. Tampilkan data Products yang UnitInStock nya lebih besar dari 80
8. Tampilkan data Products yang UnitInStock nya diantara 90 sampai
110
9. Tampilkan data Products yang UnitInStock nya lebih kecil dari 80
dan CompanyName pada Suppliers = ‘Leka Trading’
10. Tampilkan semua Order yang tanggalnya pemesanannya dari
tanggal 1996-07-10 sampai 1997-09-10
11. Tampilkan CustomerID dan CustomerName yang memesan barang
pada tanggal 1996-08-15
12. Tampilkan OrderID, OrderDate, CustomerID dan CustomerName
yang memesan produk dengan ProductID = 51
13. Tampilkan OrderID, OrderDate, CustomerID dan CustomerName
yang memesan produk dengan ProductName=’ Tofu’
14. Tampilkan total pemesanan barang (UnitPrice * Quantity) pada
dengan alias TotalOrder masing-masing transaksi
15. Tampilkan UnitPrice termahal dari transaksi Order yang terjadi
16. Tampilkan berapa jumlah transaksi order terjadi per hari dengan
alias JumlahTransaksiPerHari

36
Structured Query Language (SQL) – Studi Kasus

17. Tampilkan CustomerID dan CustomerName dan jumlah pemesanan


yang pernah dilakukan oleh konsumen tersebut
18. Tampilkan ShipperID, CompanyName, Phone yang pernah
mengirimkan pesanan ke negara Germany
19. Tampilkan semua order yang diurut berdasarkan tanggal
pemesanan
20. Tampilkan OrderDate, CustomerName, CompanyName Perusahan
Pengirim yang mengirimkan barang dengan CategoryName =
‘Condiments’ dan ContactName pada Supplier = ‘Shelley Burke’

E. REFERENSI
1. MySQL Server Documentation, http://dev.mysql.com
2. SitePoint, http://www.sitepoint.com


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.

View dapat dibuat (create), diedit (alter), dan dihapus (drop).


Pemanggilan sebuah view dalam perintah SQL sama dengan memanggil
tabel fisik, karena view adalah tabel lojik (semu), yang dianggap sama
oleh DBMS.

Adapun perintah-perintah yang berhubungan dengan VIEW, adalah :


1. Membuat View (create)
CREATE VIEW v AS <query expression>
dimana :
v adalah nama view
<query expression> adalah ekspresi query yang keluarannnya
akan menjadi tabel semu / lojik dari view tersebut, biasanya
menggunakan perintah SELECT. Query expression ini bisa dari
satu tabel fisik atau lebih, dan dapat menangani semua
perintah-perintah SQL.
2. Mengedit View (alter)
ALTER VIEW v AS <query expression>
3. Menghapus View (drop)
DROP VIEW [IF EXISTS] v [, vn]
Dimana :
vn adalah nama view lainnya jika ingin dihapus lebih dari
satu view
4. Memanggil / Menggunakan View dalam SQL

38
Structured Query Language (SQL) - VIEW

Memanggil View sama dengan memanggil tabel fisik dalam MYSQL,


yaitu mengunakan perintah :
SELECT atribut,[atribut] FROM v [WHERE p]
Dimana :
v adalalah nama view, atribut nama view tersebut sama adalah
atribut yang dipanggil perintah yang terdapat dalam view
tersebut (query expression)

D. Contoh Kasus
Gunakan tabel penjualan yang terdapat pada Studi Kasus Northwind.

Buatlah View sederhana dengan nama customer_from_germany untuk


menampilkan semua Customer yang berasal dari Germany, denagan
perintah berikut

CREATE VIEW customer_from_germany AS SELECT * FROM customers


WHERE Country=’Germany’;

Panggil View customer_from_germany dengan perintah :

SELECT * FROM customer_from_germany;

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.

SELECT o.OrderID, o.OrderDate, c.CustomerID, c.CompanyName,


c.ContactName FROM orders o INNER JOIN customer_from_germany c ON
c.CustomerID=o.CustomerID;

Setelah View tersebut dipanggil dengan perintah SELECT, coba ALTER


View tersebut, seperti :

ALTER VIEW customer_from_germany AS SELECT * FROM customers


WHERE Country='Germany' AND CompanyName='Alfreds Futterkiste';

Coba panggil kembali View tersebut, apakah hasilnya berbeda? Jika


berbeda silakan jalankan perintah DROP View ini untuk menghapus View
yang telah dibuat sebelumnya :

DROP VIEW IF EXISTS customer_from_germany;

E. LATIHAN
Kerjakanlah latihan berikut:

39
Structured Query Language (SQL) - VIEW

1. Gunakan database Northwind!


2. Buatlah View yang menampilkan semua Order yang tanggalnya
pemesanannya dari tanggal 1996-07-10 sampai 1997-09-10 dengan
nama view order_lama!
3. Tampilkan semua data view tersebut!
4. Tampilkan CompanyName dari Shipper, OrderID, serta OrderDate
View tersebut!
5. Alter View tersebut dan diganti query expression-nya dengan
menampilkan CompanyName dari Shipper, OrderID, serta OrderDate
pada tanggal 1996-07-10 sampai 1997-09-10!
6. Hapus View tersebut!

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

DECLARE total_penjualan INT DEFAULT 0;



Deklarasi dua variabel dengan tipe data dan nilai default yang sama
adalah sebagai berikut:

DECLARE x, y INT DEFAULT 0;

Setelah melakukan deklarasi variabel maka untuk mengisikan nilai ke
variabel tersebut dapat dilakukan menggunakan perintah SET. Sebagai
contoh:

SET total_penjualan = 10000;

Pengisian nilai variabel ini juga dapat dilakukan menggunakan perintah
SELECT … INTO.

DECLARE total_penjualan INT DEFAULT 0;
SELECT SUM(harga_jual) INTO total_penjualan FROM produk;

Pada contoh di atas variabel total_penjualan dideklarasikan dengan tipe
data INT dan nilai default 0, kemudian total_penjualan diisikan nilai yang
merupakan penjumlahan dari harga_jual pada tabel produk. Ruang
lingkup suatu variabel tergantung dari deklarasinya. Jika variabel
tersebut dideklarasikan di dalam stored procedure maka ruang
lingkupnya adalah sampai dengan perintah END dari stored procedure
itu. Jika dideklarasikan di dalam suatu blok BEGIN/END maka variabel itu
ruang lingkupnya hanya di dalam blok tersebut. Suatu variabel yang
dimulai dengan tanda ‘@’ merupakan variabel session. Variabel tersebut
akan ada sampai session-nya berakhir.

• Parameter
Stored procedure juga dapat menerima parameter. Pada MySQL mode
dari suatu parameter dapat berupa IN, OUT dan INOUT.
1. IN, merupakan mode default dari parameter pada MySQL. IN
mengindikasikan bahwa suatu parameter merupakan masukan
bagi stored procedure namun semua perubahan di dalam stored
procedure tidak akan mengubah parameter.
2. OUT, mode ini mengindikasikan bahwa stored procedure dapat
mengubah nilai dari parameter dan mengirimkan balik ke
program yang memanggil.
3. INOUT, mode ini merupakan kombinasi dari IN dan OUT.
Sintaks untuk mendefinisikan suatu parameter pada stored procedure
adalah:

MODE nama_param tipe_param(size_param)

43
Structured Query Language (SQL) – Stored Procedure dan Cursor

nama_param merupakan nama dari parameter. Nama ini tidak boleh


sama dengan nama kolom ataupun tabel dan mengikuti tata cara
penamaan variabel. Setelah nama parameter diikuti dengan tipe data dari
parameter dan ukurannya. Masing-masing parameter dipisahkan dengan
tanda “,” kalau stored procedure tersebut memiliki lebih dari satu
parameter. Contoh di bawah adalah untuk menampilkan semua kota pada
satu negara:

DELIMITER //
CREATE PROCEDURE AmbilKotaPerNegara(IN namaNegara VARCHAR(255))
BEGIN
SELECT namaKota, telpon FROM Kota
WHERE negara = namaNegara;
END //
DELIMITER ;


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

proses untuk masing-masing record tersebut. Cursor pada MySQL


memiliki beberapa sifat sebagai berikut:
1. Read Only: artinya cursor tidak dapat diupdate.
2. Non-scrollable: cursor hanya dapat berjalan satu arah, tidak bisa
dilompati maupun disuruh maju atau mundur pada result set.
3. Asensitive: update pada tabel yang diacu oleh cursor tidak
disarankan karena dapat memberikan hasil yang tidak diinginkan.
Untuk mendeklarasikan cursor digunakan perintah berikut:

DECLARE nama_cursor CURSOR FOR perintah_select;

Setelah itu cursor harus dibuka menggunakan perintah OPEN:

OPEN nama_cursor;

Selanjutnya untuk mendapatkan baris berikutnya dan memindahkan
cursor ke baris tersebut dilakukan menggunakan perintah FETCH:

FETCH nama_cursor INTO daftar_variabel;

Pada akhirnya ketika baris yang dibaca telah habis maka cursor harus
ditutup menggunakan perintah CLOSE:

CLOSE nama_cursor;

Satu hal yang perlu diingat ketika menggunakan cursor adalah untuk
mendeklarasikan handler NOT FOUND agar tidak terjadi pesan kesalahan
ketika tidak ada data. Berikut adalah contoh penggunaan cursor pada
stored procedure:

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

Anda mungkin juga menyukai