Modul Praktikum Basis Data 2

51
Modul Praktikum Semester Ganjil 2007-2008 Sistem Basis Data Lanjut Wayan Firdaus Mahmudy

Transcript of Modul Praktikum Basis Data 2

Page 1: Modul Praktikum Basis Data 2

Modul PraktikumSemester Ganjil 2007-2008

Sistem Basis Data Lanjut

Wayan Firdaus Mahmudy

Page 2: Modul Praktikum Basis Data 2

Program Diploma Tiga Manajemen Informatika dan Teknik Komputer

Fakultas Matematika dan Ilmu Pengetahuan AlamUniversitas Brawijaya Malang

DAFTAR ISI

Bab 1. Data Definition Language (DDL) 1

Bab 2. Relationship 9

Bab 3. View 15

Bab 4. Transact-SQL 20

Bab 5. Procedure 26

Bab 6. Trigger 30

Page 3: Modul Praktikum Basis Data 2

Bab

1 Data Definition Language (DDL)

Tujuan

1. Memahami pembuatan dan manipulasi dasar database.

2. Memahami pembuatan table database.

3. Membuat constraint sederhana.

1.1. Pembuatan Database

MS-SQL adalah database berbasis relasional, struktur data diatur melalui pembuatan table-table yang saling berkaitan (mempunyai relasi). Tiga elemen yang merupakan model fundamental dari relasi adalah:

Struktur Data (Table)

Terdiri dari baris (row atau record) dan setiap baris terdiri dari kolom-kolom (column atau field) yang terdefinisi melalui tipe data pada kolom tersebut.

Integritas Data

Isi data sesuai kondisi sebenarnya, misalkan field “tinggi_badan” tidak boleh negative, “jenis_kelamin” hanya mempunya nilai ‘L’ dan ‘P’. Kesesuaian data dengan nilai sebenarnya ini disebut juga “batasan nilai untuk integritas data” atau “integrity constraints”.

Manipulasi Data

Data yang tersimpan dapat dimanipulasi dengan bahasa query seperti SQL.

Praktikum Basis Data Lanjut – MITEK – September 2007 1

Page 4: Modul Praktikum Basis Data 2

1.2. Data Definition Language (DDL)

DDL merupakan instruksi untuk membuat, mengubah dan menghapus table. Ada tiga instruksi dasar DDL yaitu

CREATE TABLE

ALTER TABLE

DROP TABLE

Latihan 1.1

Pada latihan ini anda akan belajar membuat dan memanipulasi database

Ikuti langkah-langkah berikut:

1. Dari “SQL Server Enterprise Manager” jalankan “Query AnalyzerTools”

2. Buat database baru dengan perintah berikut

Database diciptakan dengan default 0.63 MK untuk data dan 0.49 untuk log.

3. Aktifkan database “akademik”.

Praktikum Basis Data Lanjut – MITEK – September 2007 2

Page 5: Modul Praktikum Basis Data 2

4. Ketikkan sp_helpdb untuk melihat daftar seluruh databasename db_size owner dbid created status …------------------------------------------------------------------------akademik 1.12 MB XP\Administrator 7 Sep 23 2007 Status=ONLINE, ...master 11.94 MB sa 1 Aug 6 2000 Status=ONLINE, ...model 1.13 MB sa 3 Aug 6 2000 Status=ONLINE, ...msdb 13.00 MB sa 4 Aug 6 2000 Status=ONLINE, ...Northwind 3.63 MB sa 6 Aug 6 2000 Status=ONLINE, ...pubs 2.00 MB sa 5 Aug 6 2000 Status=ONLINE, ...tempdb 8.50 MB sa 2 Sep 23 2007 Status=ONLINE, ...

5. Ketikkan sp_helpdb akademik untuk melihat khusus database “akademik”name db_size owner dbid created status ------------------------------------------------------------akademik 1.12 MB XP\Administrator 7 Sep 23 2007 Status=ONLINE,

name fileid filename -----------------------------------------------------------akademik 1 C:\Program Files\... \akademik.mdf …akademik_log 2 C:\Program Files\... \akademik_log.LDF …

6. Ubah nama database dengan mengetikkan

EXEC sp_renamedb akademik, dbakademik

Akan muncul pesan kesalahanServer: Msg 5030, Level 16, State 2, Line 1The database could not be exclusively locked to perform the operation.

Kesalahan terjadi karena database “akademik” masih aktif

8. Aktifkan database lain (misalnya “master”) dan ubah option database “akademik” menjadi ‘single user’

USE masterEXEC sp_dboption akademik, 'single_user', 'TRUE'

Pastikan sebelum perintah di atas di eksekusi, pada “SQL Enterprise Manajer” database “akademik” tidak aktif.

Ulangi menjalankanEXEC sp_renamedb akademik, dbakademik

Praktikum Basis Data Lanjut – MITEK – September 2007 3

Page 6: Modul Praktikum Basis Data 2

9. Hapus database dengan mengetikkan

DROP DATABASE dbakademik

Latihan 1.2

Pada latihan ini anda akan belajar membuat (CREATE) dan menghapus (DROP) table serta menggunakan contraint PRIMARY KEY dan NOT NULL.

Ikuti langkah-langkah berikut:

1. Jalankan script sebagai berikut

123456

CREATE DATABASE dbPrak01

CREATE TABLE kota ( kode char(5) PRIMARY KEY, nama char(30))

2. Aktifkan database dbPrak01 kemudian jalankan satu persatu query berikut

123456

INSERT kota(kode,nama) VALUES ('mlg','malang')INSERT kota VALUES ('kdr','kediri')INSERT kota VALUES ('kdr','kendari')INSERT kota(kode) VALUES ('x')INSERT kota VALUES ('y','')INSERT kota VALUES ('z')

Query mana yang error, kenapa ?

Praktikum Basis Data Lanjut – MITEK – September 2007 4

Page 7: Modul Praktikum Basis Data 2

3. Drop table kota kemudian buat lagi dengan DDL berikut

123456

DROP TABLE kota

CREATE TABLE kota ( kode char(5) PRIMARY KEY, nama char(30) NOT NULL)

4. Jalankan satu persatu query berikut

12

INSERT kota(kode) VALUES ('x')INSERT kota(kode,nama) VALUES ('y','')

Query mana yang error, kenapa ?

Latihan 1.3

Pada latihan ini anda akan belajar momodifikasi (ALTER) dan menggunakan contraint UNIQUE, CHECK dan DEFAULT.

Ikuti langkah-langkah berikut:

1. Drop table kota kemudian buat table propinsi dengan DDL berikut

123456

CREATE TABLE propinsi ( kode_prop char(10) PRIMARY KEY, nama_prop char(30) NOT NULL, CONSTRAINT uq_nama_prop UNIQUE (nama_prop), CONSTRAINT ck_nama_prop CHECK (nama_prop<>''), )

2. Jalankan satu persatu query berikut

12

INSERT INTO propinsi VALUES ('jatim','jawa timur')INSERT INTO propinsi VALUES ('jatim','jawa barat')

Praktikum Basis Data Lanjut – MITEK – September 2007 5

Page 8: Modul Praktikum Basis Data 2

3456

INSERT INTO propinsi VALUES ('jtm','jawa timur')

INSERT INTO propinsi VALUES ('jabar','')INSERT INTO propinsi VALUES ('jabar','jawa barat')

Query mana yang error, kenapa ?

3. Anda bisa menambahkan field pada table propinsi sebagai berikut

12

ALTER TABLE propinsi ADD jumlah_penduduk INT DEFAULT 0

4. Jalankan satu persatu query berikut

1234

INSERT INTO propinsi(kode_prop,nama_prop) VALUES ('jateng','jawa tengah')INSERT INTO propinsi VALUES ('jak', 'dki jakarta', -1)

5. Lakukan SELECT, anda akan mendapatkan isi table sebagai berikutkode_prop nama_prop jumlah_penduduk

---------- ------------------------------ ---------------

jabar jawa barat NULL

jak dki jakarta -1

jateng jawa tengah 0

jatim jawa timur NULL

(4 row(s) affected)

Ada yang aneh ?

Praktikum Basis Data Lanjut – MITEK – September 2007 6

Page 9: Modul Praktikum Basis Data 2

6. Update data yang aneh di atas sebagai berikut

12345

UPDATE propinsi SET jumlah_penduduk=0 WHERE jumlah_penduduk<0

UPDATE propinsi SET jumlah_penduduk=0 WHERE jumlah_penduduk IS NULL

7. Anda bisa menambahkan constraint pada field jumlah_penduduk sebagai berikut

123

ALTER TABLE propinsi ADD CONSTRAINT ck_jumlah_penduduk CHECK (jumlah_penduduk>=0)

8. Jalankan query berikut

1 INSERT INTO propinsi VALUES ('yog','yogyakarta',-1)

Perhatikan pesan yang muncul.

9. Jika tidak diperlukan anda bisa menghapus constraint sebagai berikut

12

ALTER TABLE propinsi DROP ck_jumlah_penduduk

10. Jalankan ulang query pada langkah 8 untuk melihat apakah constraint sudah terhapus.

Praktikum Basis Data Lanjut – MITEK – September 2007 7

Page 10: Modul Praktikum Basis Data 2

TUGAS

Susun DDL untuk membuat table mahasiswa dengan spesifikasi sebagai berikut

No Field Type Keterangan1 Nim Char(10) Primary Key, panjang harus

tepat 10 karakter2 Nama Varchar(20) Tidak boleh kosong3 JK Char(1) Jenis Kelamin, hanya

mempunyai nilai L untuk laki-laki dan P untuk perempuan

3 GolDarah Char(2) Golongan Darah: A, B, AB, O4 Ipk Numeric Interval 0 sampai 4

Praktikum Basis Data Lanjut – MITEK – September 2007 8

Page 11: Modul Praktikum Basis Data 2

Bab

2 Relationship

Tujuan

1. Membuat primary key yang dibentuk dari 2 field atau lebih.

2. Mengatur relationship antar table.

Latihan 2.1

Pada latihan ini anda akan belajar membuat primary key yang dibentuk dari 2 field dan mengatur relationship antar table.

Ikuti langkah-langkah berikut:

1. Gunakan kembali hasil Latihan 1.3 atau jalankan kembali DDL sebagai berikut

123456789101112131415161718

CREATE TABLE propinsi ( kode_prop char(10) PRIMARY KEY, nama_prop char(30) NOT NULL, jumlah_penduduk INT DEFAULT 0, CONSTRAINT uq_nama_prop UNIQUE (nama_prop), CONSTRAINT ck_nama_prop CHECK (nama_prop<>''), CONSTRAINT ck_jumlah_penduduk CHECK (jumlah_penduduk>=0) )

CREATE TABLE kota ( kode_kota char(5), kode_prop char(10) FOREIGN KEY REFERENCES propinsi (kode_prop), nama_kota char(30) NOT NULL, PRIMARY KEY (kode_kota, kode_prop))

Praktikum Basis Data Lanjut – MITEK – September 2007 9

Page 12: Modul Praktikum Basis Data 2

2. Dengan SQL Enterprise Manager anda bisa mendapatkan diagram sebagai berikut

3. Isi table propinsi sebagai berikut

kode_prop nama_prop jumlah_penduduk

---------- ------------------------------ ---------------

jabar jawa barat 0

jak dki jakarta 0

jateng jawa tengah 0

jatim jawa timur 0

yog di yogyakarta 0

4. Jalankan satu persatu query berikut

1234

INSERT kota VALUES ('ban','jatim','banyuwangi')INSERT kota VALUES ('ban','yog','bantul')INSERT kota VALUES ('ban','jatim','bangkalan')INSERT kota VALUES ('leb','banten','lebak')

Praktikum Basis Data Lanjut – MITEK – September 2007 10

Page 13: Modul Praktikum Basis Data 2

Query mana yang error, kenapa ?

5. Jalankan satu persatu query untuk menghapus record berikut

12

DELETE FROM propinsi WHERE kode_prop='jateng'DELETE FROM propinsi WHERE kode_prop='jatim'

Query mana yang error, kenapa ?

Praktikum Basis Data Lanjut – MITEK – September 2007 11

Page 14: Modul Praktikum Basis Data 2

Latihan 2.2

Pada latihan ini anda akan belajar mengatur relationship antar table menggunakan foreign key yang mereferensi ke primary key yang dibentuk dari dua field.

Ikuti langkah-langkah berikut:

1. Tambahkan table penduduk dengan DDL sebagai berikut

12345678910

CREATE TABLE penduduk ( nik char(5) PRIMARY KEY, nama varchar(30) NOT NULL, jk char(1),

kode_kota char(5) FOREIGN KEY REFERENCES kota (kode_kota), kode_prop char(10) FOREIGN KEY REFERENCES propinsi (kode_prop),)

Pesan kesalahan apa yang muncul, kenapa ?

2. Perbaiki DDL sebelumnya sebagai berikut

12345678910

CREATE TABLE penduduk ( nik char(5) PRIMARY KEY, nama varchar(30) NOT NULL, jk char(1),

kode_kota char(5), kode_prop char(10), FOREIGN KEY (kode_kota,kode_prop) REFERENCES kota (kode_kota,kode_prop))

Praktikum Basis Data Lanjut – MITEK – September 2007 12

Page 15: Modul Praktikum Basis Data 2

2. Dengan SQL Enterprise Manager anda bisa mendapatkan diagram sebagai berikut

3. Jalankan satu persatu query berikut

123456

INSERT INTO penduduk VALUES ('00001','adi','l','ban','yog')INSERT INTO penduduk VALUES ('00002','anita','p','ban','jatim')INSERT INTO penduduk VALUES ('00003','arina','p','ban','jabar')

Praktikum Basis Data Lanjut – MITEK – September 2007 13

Page 16: Modul Praktikum Basis Data 2

Query mana yang error, kenapa ?

TUGAS

Di Propinsi Jawa Timur terdapat kota dan kabupaten (misalnya Kota Malang dan Kabupaten Malang). Perbaiki strukur table sehingga setiap record pada table kota bisa dibedakan apakah termasuk kota atau kabupaten.

Susun query sehingga bisa menampilkan banyaknya kota dan kabupaten di setiap propinsi dengan contoh sebagai berikut:

Propinsi Kota Kabupaten-------------------------------Jawa Timur 9 29Jawa Barat 9 17

Praktikum Basis Data Lanjut – MITEK – September 2007 14

Page 17: Modul Praktikum Basis Data 2

Bab

3 View

Tujuan

1. Membuat view dari satu atau beberapa table

2. Update data melalui view.

3.1. View

View merupakan virtual table yang dibangun dari satu atau beberapa table. View tidak membuat penyimpanan secara fisik seperti table, namun hanya menyimpan referensi/pointer ke record pada table-table yang berkaitan.

Struktur umum sebuah view adalah

CREATE VIEW namaView (kolom1, kolom2, …) ASSELECT kolom_a, kolom_b, …FROM namaTableWHERE predikat

Melalui view dapat dilakukan INSERT, UPDATE dan DELETE dengan beberapa batasan.

Latihan 3.1

Pada latihan ini anda akan belajar membuat view yang dibentuk dari satu table serta cara menambahkan record ke table melalui view.

Ikuti langkah-langkah berikut:

1. Gunakan kembali hasil Latihan 2.2. Isi data sebagai berikut

propinsikode_prop nama_prop jumlah_penduduk ---------- ------------------------- --------------- jabar jawa barat 0jak dki jakarta 0

Praktikum Basis Data Lanjut – MITEK – September 2007 15

Page 18: Modul Praktikum Basis Data 2

jateng jawa tengah 0jatim jawa timur 0yog di yogyakarta 0

kotakode_kota kode_prop nama_kota --------- ---------- ------------------------------ ban jatim banyuwangi ban yog bantul bks jabar bekasi blr jateng blora byl jateng boyolali kdr jatim kediri kul yog kulon progo mlg jatim malang sby jatim surabaya sle yog sleman

penduduknik nama jk kode_kota kode_prop ----- ---------------- ---- --------- ---------- 00001 adi l ban yog 00002 anita p ban jatim 00003 ananda p kdr jatim 00004 badu l blr jateng 0005 budi l mlg jatim

2. Susun view sebagai berikut

123

CREATE VIEW vw_propinsi ASSELECT kode_prop, nama_propFROM propinsi

3. Gunakan view tersebut

1 SELECT * FROM vw_propinsi

4. Anda bisa mengganti nama kolom (field) pada view sebagai berikut

123456

DROP VIEW vw_propinsi

CREATE VIEW vw_propinsi (kode_propinsi, nama_propinsi) ASSELECT kode_prop, nama_propFROM propinsi

Praktikum Basis Data Lanjut – MITEK – September 2007 16

Page 19: Modul Praktikum Basis Data 2

5. Gunakan view untuk mengisi record sebagai berikut

1 INSERT INTO vw_propinsi VALUES ('ban','banten')

6. Cek isi view dan table

12

SELECT * FROM vw_propinsiSELECT * FROM propinsi

Mengapa jumlah_penduduk pada propinsi ‘banten’ diisi ‘0’ ?

Latihan 3.2

Pada latihan ini anda akan mempelajari view yang tidak bisa digunakan untuk mengisi record

Ikuti langkah-langkah berikut:

1. Susun view sebagai berikut

123

CREATE VIEW vw_kota ASSELECT kode_kota, nama_kotaFROM kota

2. Gunakan view tersebut

1 SELECT * FROM vw_kota

3. Gunakan view untuk mengisi record sebagai berikut

1 INSERT INTO vw_kota VALUES ('mdn','madiun')

Pesan kesalahan apa yang muncul, kenapa ?

Praktikum Basis Data Lanjut – MITEK – September 2007 17

Page 20: Modul Praktikum Basis Data 2

Latihan 3.3

Pada latihan ini anda akan belajar membuat view yang dibentuk dari beberapa table.

Ikuti langkah-langkah berikut:

1. Susun view sebagai berikut

12345

CREATE VIEW vw_kota ASSELECT k.kode_kota, k.nama_kota, p.kode_prop, p.nama_propFROM kota k, propinsi pWHERE k.kode_prop=p.kode_prop

2. Gunakan view tersebut dalam berbagai cara

1234567

SELECT * FROM vw_kota

SELECT nama_kota, nama_prop FROM vw_kota

SELECT nama_kota, nama_prop FROM vw_kota ORDER BY nama_prop, nama_kota

TUGAS 1

Isi data penduduk secukupnya. Susun view vw_penduduk_kota sehingga jika diberikan query

SELECT * FROM vw_penduduk_kota ORDER BY total_penduduk DESC

akan ditampilkan sebagai berikut

nama_kota total_penduduk ------------------------------ -------------- kediri 8malang 7blora 2bantul 1banyuwangi 1

Praktikum Basis Data Lanjut – MITEK – September 2007 18

Page 21: Modul Praktikum Basis Data 2

TUGAS 2

Isi data penduduk secukupnya. Susun view vw_penduduk_kota_rinci sehingga jika diberikan query

SELECT * FROM vw_penduduk_kota_rinci

akan ditampilkan sebagai berikut

nama_kota propinsi laki-laki perempuan total------------ -------------- ---------- ---------- -----kediri jawa timur 10 11 21malang jawa timur 12 7 19blora jawa tengah 8 12 20bantul di yogyakarta 6 11 17banyuwangi jawa timur 13 10 23

Praktikum Basis Data Lanjut – MITEK – September 2007 19

Page 22: Modul Praktikum Basis Data 2

Bab

4 Transact-SQL

Tujuan

1. Membuat script Transact-SQL

4.1. Transact-SQL

Transact-SQL merupakan bahasa pemrograman yang dikembangkan dari SQL. Transact-SQL mengembangkan kemampuan SQL dengan menambahkan instruksi logic seperti halnya sebuah bahasa pemrograman.

Latihan 4.1

Pada latihan ini anda akan belajar membuat Transact-SQL sederhana.

1. Buat table dengan DDL sebagai berikut

123456789101112131415161718

CREATE TABLE prodi ( kode_prodi CHAR(3) PRIMARY KEY, nama_prodi CHAR(30))

CREATE TABLE mahasiswa ( nim CHAR(4 ) CONSTRAINT ck_nim CHECK (nim<>'') PRIMARY KEY, nama CHAR(20) CONSTRAINT ck_nama CHECK (nama<>'') NOT NULL, jk CHAR CONSTRAINT ck_jk CHECK (jk='l' or jk='p') NOT NULL, alamat CHAR(20), kota CHAR(15), ipk NUMERIC(4,2), kode_prodi CHAR(3) FOREIGN KEY REFERENCES prodi(kode_prodi))

Praktikum Basis Data Lanjut – MITEK – September 2007 20

Page 23: Modul Praktikum Basis Data 2

2. Isi data secukupnya dengan contoh sebagai berikut

prodikode_prodi nama_prodi ---------- ------------------------------ mi manajemen informatika tk teknik komputer

mahasiswanim nama jk alamat kota ipk kode_prodi ------------------------------------------------------ 0001 adi l kelud 72 malang 3.20 mi 0002 ani p mawar 19 malang 2.90 tk 0003 ali l krakatau 54 malang 3.10 mi 0004 budi l kerinci 84 surabaya 2.50 tk 0005 badu l semeru 87 kediri 2.50 tk

3. Tulis dan jalankan script berikut

1234

DECLARE @ipk_batas NUMERIC(4,2)SET @ipk_batas = 3.0

SELECT nim,nama,ipk FROM mahasiswa WHERE ipk>@ipk_batas ORDER BY ipk

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 21

Page 24: Modul Praktikum Basis Data 2

4. Tulis dan jalankan script berikut

12345

DECLARE @ipk_batas NUMERIC(4,2)SET @ipk_batas = 3.0

SELECT TOP 1 nim,nama,ipk FROM mahasiswa WHERE ipk>@ipk_batas ORDER BY ipk DESC

Jelaskan yang dilakukan script di atas

5. Tulis dan jalankan script berikut

1234567

DECLARE @ipk_max NUMERIC(4,2), @ipk_min NUMERIC(4,2)SELECT @ipk_max=MAX(ipk), @ipk_min=MIN(ipk) FROM mahasiswa

SELECT 'IPK Maximum = ', @ipk_maxSELECT 'IPK Minimum = ', @ipk_min

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 22

Page 25: Modul Praktikum Basis Data 2

6. Tulis dan jalankan script berikut

12345

DECLARE @ipk_avg NUMERIC(4,2)SELECT @ipk_avg=AVG(ipk) FROM mahasiswa

SELECT nim,nama,ipk FROM mahasiswa WHERE ipk>@ipk_avg ORDER BY ipk

Jelaskan yang dilakukan script di atas

Latihan 4.2

Pada latihan ini anda akan belajar membuat Transact-SQL dengan melibatkan statemen seleksi CASE...WHEN.

1. Tulis dan jalankan script berikut

12345678910

SELECT nim, nama, jenis_kelamin = CASE WHEN jk='l' THEN 'Laki-laki' WHEN jk='p' THEN 'Perempuan' ELSE 'Tidak jelas' END FROM mahasiswa

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 23

Page 26: Modul Praktikum Basis Data 2

2. Tulis dan jalankan script berikut

12345678910

SELECT nim,nama,ipk, keterangan = CASE WHEN ipk<2.0 THEN 'Jelek' WHEN ipk<2.5 THEN 'Pas-pasan' WHEN ipk<3.0 THEN 'Lumayan' WHEN ipk<=4.0 THEN 'Hebat' END FROM mahasiswa ORDER BY ipk DESC

Jelaskan yang dilakukan script di atas

3. Tulis dan jalankan script berikut

123456789101112131415

DECLARE @ipk_avg NUMERIC(4,2)SELECT @ipk_avg=AVG(ipk) FROM mahasiswa

SELECT 'IPK rata-rata= ', @ipk_avg

SELECT nim, nama, ipk, keterangan = CASE WHEN ipk=@ipk_avg THEN 'pas' WHEN ipk<@ipk_avg THEN 'di bawah rata-rata' WHEN ipk>@ipk_avg THEN 'di atas rata-rata' ELSE 'Tidak Jelas' END FROM mahasiswa

Praktikum Basis Data Lanjut – MITEK – September 2007 24

Page 27: Modul Praktikum Basis Data 2

Jelaskan yang dilakukan script di atas

Latihan 4.3

Pada latihan ini anda akan belajar membuat Transact-SQL dengan melibatkan fungsi konversi angka ke string.

1. Tulis dan jalankan script berikut

12

PRINT 'Hello Word'PRINT 'Today is ' + CONVERT(CHAR(30), GETDATE())

Jelaskan yang dilakukan script di atas

2. Tulis dan jalankan script berikut

123456789

DECLARE @ipk_max NUMERIC(4,2), @ipk_min NUMERIC(4,2)SELECT @ipk_max=MAX(ipk), @ipk_min=MIN(ipk) FROM mahasiswa

PRINT 'IPK Maximum = ' + CONVERT(CHAR(30), @ipk_max)PRINT 'IPK Minimum = ' + CONVERT(CHAR(30), @ipk_min)

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 25

Page 28: Modul Praktikum Basis Data 2

Bab

5 Procedure

Tujuan

1. Membuat procedure.

5.1. Procedure

Procedure adalah program yang dapat dipanggil oleh program lainnya. Struktur umum sebuah procedure adalah

CREATE PROCEDURE namaProcedure (parameter) AS Deklarasi variable … …RETURN

Kata PROCEDURE bisa disingkat PROC. Untuk menjalankan procedure digunakan EXEC seperti contoh berikut

EXEC namaProcedure

Latihan 5.1

Pada latihan ini anda akan belajar membuat procedure sederhana. Gunakan table pada Praktikum 4.

1. Berikut ini procedure untuk manampilkan data mahasiswa

123

CREATE PROC PrintMahasiswa AS SELECT * FROM MahasiswaRETURN

Jalankan procedure dengan mengetikkan EXEC PrintMahasiswa.

Praktikum Basis Data Lanjut – MITEK – September 2007 26

Page 29: Modul Praktikum Basis Data 2

2. Berikut ini procedure yang mempunyai parameter

12345

CREATE PROC PrintMahasiswaTertentu (@jk CHAR, @kota CHAR(15)) AS SELECT * FROM Mahasiswa WHERE jk=@jk AND kota=@kotaRETURN

Jalankan procedure dengan berbagai cara berikut

123

EXEC PrintMahasiswaTertentu 'l', 'malang'EXEC PrintMahasiswaTertentu 'p', 'surabaya'EXEC PrintMahasiswaTertentu 'l'

Bagian mana yang salah, kenapa ?

3. Parameter procedure bisa diberi nilai default seperi contoh berikut

12345

ALTER PROC PrintMahasiswaTertentu (@jk CHAR(1)='l', @kota CHAR(15)='malang') AS SELECT * FROM Mahasiswa WHERE jk=@jk AND kota=@kotaRETURN

Kata kunci ALTER digunakan untuk mengganti procedure yang sudah ada. Jalankan procedure dengan berbagai cara berikut

123

EXEC PrintMahasiswaTertentu 'p', 'surabaya'EXEC PrintMahasiswaTertentu 'p'EXEC PrintMahasiswaTertentu

Praktikum Basis Data Lanjut – MITEK – September 2007 27

Page 30: Modul Praktikum Basis Data 2

Latihan 5.2

Pada latihan ini anda akan belajar membuat procedure dengan parameter output.

1. Buat procedure berikut

1234

CREATE PROC CariRataIP @hasil NUMERIC(4,2) OUTPUT AS SELECT @hasil=AVG(ipk) FROM Mahasiswa RETURN

Jalankan procedure dengan cara berikut

1234

DECLARE @rata NUMERIC(4,2)EXEC CariRataIP @rata OUTPUTPRINT 'Rata-rata IPK mahasiswa = '+ CONVERT (CHAR(4),@rata)

3. Procedure yang telah dibuat bisa dipanggil procedure lain sebagai berikut

123456789

CREATE PROC MahasiswaPandai AS DECLARE @rata NUMERIC(4,2) EXEC CariRataIP @rata OUTPUT PRINT 'Rata-rata IPK mahasiswa = '+ CONVERT (CHAR(4),@rata) PRINT 'Daftar Mahasiswa Pandai' SELECT nim,nama,ipk FROM mahasiswa WHERE ipk>@rataRETURN

Jika procedure MahasiswaPandai dijalankan akan dihasilkan

Rata-rata IPK mahasiswa = 2.84

Daftar Mahasiswa dengan IPK Di Atas Rata-Rata

nim nama ipk

---- -------------------- ------

0001 adi 3.20

0002 ani 2.90

0003 ali 3.10

(3 row(s) affected)

Praktikum Basis Data Lanjut – MITEK – September 2007 28

Page 31: Modul Praktikum Basis Data 2

TUGAS 1

Gunakan table pada Praktikum 3. Susun procedure untuk menampilkan kota yang penduduknya lebih banyak dari penduduk kota ‘malang’.

TUGAS 2

Susun procedure dengan parameter kode_propinsi. Procedure ini menghasilkan output rata-rata penduduk di tiap kota pada propinsi tersebut.

TUGAS 3

Susun procedure dengan parameter kode_propinsi. Gunakan procedure pada Tugas 2. Tampilkan kota yang penduduknya lebih banyak daripada rata-rata penduduk di tiap kota pada propinsi tersebut.

Catatan:

Untuk semua soal di atas, banyaknya penduduk merupakan hasil perhitungan agregat dari table penduduk.

Praktikum Basis Data Lanjut – MITEK – September 2007 29

Page 32: Modul Praktikum Basis Data 2

Bab

6 Trigger

Tujuan

1. Membuat trigger.

6.1. Trigger

Trigger adalah blok program Transact-SQL yang diasosiasikan dengan table dan disimpan dalam database. Trigger dieksekusi bila terjadi database event (INSERT, UPDATE, DELETE).

Struktur umum sebuah trigger adalah

CREATE TRIGGER namaTriger ON namaTable FOR INSERT, UPDATE, DELETE Deklarasi variable … …RETURN

Latihan 6.1

Pada latihan ini anda akan belajar membuat trigger sederhana. Gunakan table pada Praktikum 4.

1. Berikut ini trigger yang diekskusi pada saat penambahan record ke table mahasiswa

12345678

CREATE TRIGGER trInsertMhs ON mahasiswa FOR INSERTAS PRINT 'Record baru : ' + CONVERT (CHAR(30), GetDate(), 103) DECLARE @nama char(20) SELECT @nama=nama FROM INSERTED

Praktikum Basis Data Lanjut – MITEK – September 2007 30

Page 33: Modul Praktikum Basis Data 2

9 PRINT 'Nama mahasiswa : '+@nama

Tambahkan record ke table mahasiwa

12

INSERT INTO mahasiswa VALUES ('0006','bobo','l', 'galunggung 44','gresik',3.5,'mi')

SQL Query Analyzer akan memberikan pesan sebagai berikut

Record baru : 10/10/2007

(1 row(s) affected)

Nama mahasiswa : bobo

2. Berikut ini trigger yang diekskusi pada saat update record table mahasiswa

12345678910

CREATE TRIGGER trUpdateMhs ON mahasiswa FOR UPDATEAS PRINT 'Update Record : ' + CONVERT (CHAR(30), GetDate(), 103) PRINT 'Record Lama' SELECT * FROM DELETED PRINT 'Record Baru' SELECT * FROM INSERTED

Tambahkan record ke table mahasiwa

1 UPDATE Mahasiswa SET nama='bibi' WHERE nama='bobo'

SQL Query Analyzer akan memberikan pesan sebagai berikut

Update Record : 10/10/2007 Record Lamanim nama jk alamat kota ipk kode_prodi -----------------------------------------------------0006 bobo l galunggung 44 gresik 3.50 mi

(1 row(s) affected)

Record Barunim nama jk alamat kota ipk kode_prodi -----------------------------------------------------

Praktikum Basis Data Lanjut – MITEK – September 2007 31

Page 34: Modul Praktikum Basis Data 2

0006 bibi l galunggung 44 gresik 3.50 mi

(1 row(s) affected)

Latihan 6.2

Pada latihan ini anda akan belajar membuat trigger yang berkaitan dengan banyak table.

1. Buat table counter

1234

CREATE TABLE counter ( kota CHAR(10) PRIMARY KEY, jumlah_mhs INT NOT NULL)

3. Hapus semua record pada table mahasiswa

2. Berikut ini trigger yang mengupdate field jumlah_mhs pada table counter jika ada penambahan record pada table mahasiswa (hapus dulu trigger sebelumnya)

123456789101112131415

CREATE TRIGGER trInsertMhs ON mahasiswa FOR INSERTAS DECLARE @kota CHAR(15) DECLARE @adakota INT SELECT @kota=kota FROM INSERTED SELECT @adakota=COUNT(kota) FROM Counter WHERE kota=@kota

IF @adakota=0 INSERT INTO counter VALUES (@kota, 1) ELSE UPDATE counter SET jumlah_mhs = jumlah_mhs+1 WHERE counter.kota = @kota

Praktikum Basis Data Lanjut – MITEK – September 2007 32

Page 35: Modul Praktikum Basis Data 2

3. Masukkan lagi data mahasiswa sebagai berikut

nim nama jk alamat kota ipk kode_prodi ------------------------------------------------------ 0001 adi l kelud 72 malang 3.20 mi 0002 ani p mawar 19 malang 2.90 tk 0003 ali l krakatau 54 malang 3.10 mi 0004 budi l kerinci 84 surabaya 2.50 tk 0005 badu l semeru 87 kediri 2.50 tk

4. Cek isi table counter

kota jumlah_mhs ---------- ----------- kediri 1malang 3surabaya 1

(3 row(s) affected)

TUGAS 1

Trigger pada Latihan 6.2 akan mengupdate field jumlah_mhs pada table counter jika ada penambahan record pada table mahasiswa. Bagaimana jika ada penghapusan record atau ada mahasiswa pindah kota ? Susun trigger baru untuk mengatasi hal ini.

TUGAS 2

Pada table prodi tambahkan field jumlah_mhs. Modifikasi trigger pada Tugas 1 sehingga juga bisa mengupdate table prodi.

Praktikum Basis Data Lanjut – MITEK – September 2007 33