Anda di halaman 1dari 106

Sistem Basis Data

Hanya dipergunakan di lingkungan Jurusan Teknik Informatika UB LABORATORIUM PEMBELAJARAN


SISTEM BASIS DATA
DAFTAR PENYUSUN
• Achmad Arwan, S.Kom, M.Kom
• Djoko Pramono, S.T., M.Kom
• Faizatul Amalia, S.Pd., M.Pd
• Tri Arifianto, S.T., M.T
• Welly Purnomo, S.T., M.Kom
• Putra Pandu Adikara, S.Kom., M.Kom
• Faiza Alif Fakhrina, S.Kom., M.T

Diperbaiki Oleh


LEMBAR REVISI

Yang bertanda tangan dibawah ini :


Nama : ……………………………
NIK : …………………………….
Jabatan : …………………………….
Dengan ini menyatakan pelaksanaan Revisi Modul ……………………………. untuk Prodi
…………………., telah dialksanakan dengan penjelasan sebagai berikut:

N Keterangan Revisi Tanggal Revisi Terakhir


o
1 Revisi Bagian Pertama …………………………….
LEMBAR PERNYATAAN

Yang bertanda tangan dibawah ini :


Nama : …………………………….
NIK : …………………………….
Jabatan : …………………………….

Menerangkan dengan sesungguhnya bahwa modul praktikum ini telah direview dan akan
digunakan untuk pelaksanaan praktikum di Semester ………………….. Tahun Akademik ……………………..
di Laboratorium …………………………….

Malang, …………………………….

Mengetahui, Ka.Lab.

Koordinator KJFD …………………………….

PERATURAN LABORATORIUM
Setiap Mahasiswa Analisis dan Perancangan Sistem yang akan menggunakan Fasilitas Laboratorium,
WAJIB mematuhi Aturan sebagai berikut :

1. Tidak berambut gondrong untuk mahasiswa

2. Dilarang merokok dan makan minum didalam ruangan, dan membuang sampah pada
tempatnya

3. Dilarang menyimpan barang-barang milik pribadi di Laboratorium/Kelas tanpa seijin Fakultas

4. Dilarang menginap di Laboratorium/Kelas tanpa seijin Fakultas

5. Jam Kerja Laboratorium dan Ruang Riset adalah 07.30 WIB sampai 16.00WIB

6. Mahasiswa yang akan menggunakan Laboratorium dan atau ruang riset diluar jam kerja, harus
mengajukan ijin kepada Fakultas

Dekan
Malang, 22 Januari 2018
DAFTAR ISI
DAFTAR PENYUSUN 2
LEMBAR REVISI 3
LEMBAR PERNYATAAN 4

DAFTAR ISI 6

DAFTAR GAMBAR 12

DAFTAR TABEL 14

Bab 0 : Running Modul 15


0.1 Tujuan 15
0.2 Peraturan Praktikum 15
0.3 Penilaian Praktikum 16

Modul 1 : Pengantar dan Instalasi SQL Server 17


1.1 Waktu Pelaksanaan Praktikum 17
1.2 Tujuan 17
1.3 Alat & Bahan 17
1.4 Dasar Teori 17
1.5 Prosedur Praktikum 17
1.5.1 Instalasi Sql Server 17
1.6 Hasil Percobaan 25
1.7 Tugas 25
1.7.1 Install SQL Server pada laptop masing-masing, dan jelaskan langkah-langkahnya 25

Modul 2 : Konsep Entity Relational Model, 27


2.1 Waktu Pelaksanaan Praktikum 27
2.2 Tujuan 27
2.3 Alat & Bahan 27
2.4 Dasar Teori 27
2.4.1 Entitas (Entity) 27
2.4.2 Atribut (Attributes) 28
2.4.3 Hubungan/Relasi (Relationship) 29
2.4.4 Jenis-Jenis Relationship 29
2.4.5 Atribut Pada Relationship 30
2.5 Diagram Entitas Relasional (Entity Relationship Diagram) 30
2.5.1 Notasi Diagram ER (ERD) 30
2.5.2 Langkah-Langkah Membuat Diagram ER 31

Modul 3 : Entity Relatioship Diagram, 32


3.1 Waktu Pelaksanaan Praktikum 32
3.2 Tujuan 32
3.3 Alat & Bahan 32
3.4 Dasar Teori 32
3.5 Prosedur Praktikum 32
3.6 Hasil Percobaan 35
3.7 Tugas 35
3.7.1 Lengkapi E-R Diagram diatas sehingga menjadi seperti pada gambar berikut. 35

Modul 4 : Data Definition Language, 37


4.1 Waktu Pelaksanaan Praktikum 37
4.2 Tujuan 37
4.3 Alat & Bahan 37
4.4 Dasar Teori 37
4.5 Prosedur Praktikum 38
4.5.1 Membuat Database dengan CREATE 38
4.5.2 Membuat Table dengan CREATE 38
4.5.3 Table Sederhana 39
4.5.4 Table dengan Default Value 39
4.5.5 Table dengan NOT NULL Value 39
4.5.6 Table dengan Constraint 39
4.5.7 Melihat Data Pada Table 41
4.5.8 Membuat View dengan CREATE 41
4.5.9 Memodifikasi Objek Database dengan ALTER 42
4.5.10 Menambah Kolom/Field Baru 42
4.5.11 Mengubah Tipe Data Dari Kolom/Field 42
4.5.12 Menghapus Kolom/Field 42
4.5.13 Menambah Constraint 42
4.5.14 Mengubah Nama Objek Database 43
4.5.15 Menghapus Objek Database dengan DROP 43
4.5.16 Menghapus Table 43
4.5.17 Menghapus Database 43
4.6 Tugas 43

Modul 5 : Dasar Query Select 45


5.1 Waktu Pelaksanaan Praktikum 45
5.2 Tujuan 45
5.3 Alat & Bahan 45
5.4 Dasar Teori 45
SQL Select 45
5.5 Prosedur Praktikum 45
5.5.1 Mengambil Data dengan SELECT 45
5.5.2 Mengambil Data dengan SELECT-WHERE 46
5.5.3 Mengambil Data Top-N dengan TOP 46
5.5.4 Mengambil Data Unik dengan DISTINCT 47
5.5.5 Mengambil Data Terurut dengan ORDER BY 48
5.6 Latihan 48
Modul 6 : Data Manipulation Language 49
6.1 Waktu Pelaksanaan Praktikum 49
6.2 Tujuan 49
6.3 Alat & Bahan 49
6.4 Dasar Teori 49
Data Manipulation Language (DML) 49
6.5 Prosedur Praktikum 49
6.5.1 Menambahkan Baris Data dengan INSERT 49
6.5.2 Menambahkan Baris Data Bernilai NULL 49
6.5.3 Memodifikasi Data dengan UPDATE 50
6.5.4 Menghapus Baris Data dengan DELETE 51
6.5.5 Menggunakan Subquery Dalam INSERT 52
6.6 Tugas 52

Modul 7 : Menampilkan Data Dari Banyak Tabel 53


7.1 Waktu Pelaksanaan Praktikum 53
7.2 Tujuan 53
7.3 Alat & Bahan 53
7.4 Dasar Teori 53
Penggabungan Tabel dengan JOIN 53
7.4.1 INNER JOIN 53
7.4.2 OUTER JOIN 55
7.4.3 SELF JOIN 57
7.5 Tugas 58

Modul 8 : Operator 59
8.1. Waktu Pelaksanaan Praktikum 59
8.2. Tujuan 59
8.3. Alat Dan Bahan 59
8.4. Dasar Teori 59
8.4.1 Operator 59
8.4.2. Operator Aritmetika 59
8.4.3. Precedence dari Operator 60
8.4.4. Penggunaan Tanda Kurung 60
8.4.5. Operator Compound 61
8.4.6. Operator Pembandingan 61
8.4.7. Operator Logika 62
8.4.8. Syarat Dengan Satu Kondisi 63
8.4.9. Syarat Lebih Dari Satu Kondisi 64
8.4.10. Conditional Operator Bertipe Array (IN, BETWEEN) 64
8.4.11. Predicate 65
8.4.12. Fungsi 66
8.4.13. Fungsi Karakter/String 66
8.4.14. Fungsi Bilangan 67
8.4.15. Fungsi Tanggal 67
8.4.16. Fungsi COALESCE 68
8.5. Latihan 68

Modul 9 : Column Ffunction dan Grouping 70


9.1. Waktu Pelaksanaan Praktikum 70
9.2. Tujuan 70
9.3. Alat Dan Bahan 70
9.4. Dasar Teori 70
9.4.1. Fungsi Group 70
9.4.2. Fungsi COUNT 70
9.4.3. Fungsi AVG dan SUM 70
9.4.4. Fungsi MIN dan MAX 71
9.4.5. Mengelompokkan Data dengan GROUP BY 71
9.4.6. Klausa HAVING 72
9.4.7. Fungsi Karakter/String 73
9.4.8. Fungsi Bilangan 73
9.4.9. Fungsi Tanggal 73
9.5. Latihan 74

Modul 10 : Union, Intersection, Difference 75


10.1. Waktu Pelaksanaan Praktikum 75
10.2. Tujuan 75
10.3. Alat Dan Bahan 75
10.4. Dasar Teori 75
10.4.1. Operasi Union 75
10.4.1.1 UNION 75
10.4.1.2. UNION ALL 76
10.4.2. Operasi Intersection 77
10.4.2.1. INTERSECT 77
10.4.3. Operasi Difference 78
10.4.4. Operasi Gabungan Dari UNION, INTERSECTION, dan DIFFERENCE 78
10.5. Latihan 79

Modul 11 : Subquery SQL 80


11.1. Waktu Pelaksanaan Praktikum 80
11.2. Tujuan 80
11.3. Alat Dan Bahan 80
11.4. Dasar Teori 80
11.4.1. Sub Query Untuk Menyelesaikan Masalah 80
11.4.2. Sub Query 80
11.4.3. Penempatan Sub Query 81
11.4.3.1. Sub Query di Klausa SELECT 81
11.4.3.2. Sub Query di Klausa FROM 81
11.4.3.3. Sub Query di Klausa WHERE 81
11.4.4. Petunjuk Penggunaan Sub Query 81
11.4.5. Tipe-Tipe Sub Query 81
11.4.5.1. Sub Query Baris Tunggal 81
11.4.5.2. Sub Query Baris Ganda 81
11.4.5.3. Sub Query dengan Operator IN/ NOT IN 81
11.4.5.4. Sub Query dengan Operator EXISTS/NOT EXISTS 82
11.4.5.5. Correlated Sub Query 82
11.5. Latihan 82

Modul 12 : Transaction 83
12.1. Waktu Pelaksanaan Praktikum 83
12.2. Tujuan 83
12.3. Alat Dan Bahan 83
12.4. Dasar Teori 83
12.4.1. Transaction 83
12.4.2. Membuat Transaksi Dengan BEGIN TRANSACTION 83
12.4.3. Membatalkan Transaksi Dengan ROLLBACK TRANSACTION 84
12.4.5. Menjalankan Transaksi Dengan COMMIT TRANSACTION 85
12.4.6. Nested Transaction 86
12.4.7. Penanganan Kesalahan (Error) 87
12.4.8. Penanganan Kesalahan (Error) Dalam Transaksi 88
12.5. Latihan 89

Modul 13 : Dasar Pemrograman T-SQL 90


13.1. Waktu Pelaksanaan Praktikum 90
13.2. Tujuan 90
13.3. Alat Dan Bahan 90
13.4. Dasar Teori 90
13.4.1. Dasar Pemrograman T-SQL 90
13.4.2. Deklarasi Variabel 90
13.4.3.Penugasan/Pengisian Variabel 90
13.4.4.Mencetak Variabel di Console/Messages 90
13.4.5. Mengonversi tipe data dengan CAST/CONVERT 91
13.4.6. Seleksi Kondisi 91
13.4.7.Iterasi 92
13.4.8. STORED PROCEDURE 93
13.4.8.1. Pembuatan Stored Procedure 93
13.4.8.2. Pemanggilan Stored Procedure 93
13.4.8.3. Parameter 94
13.4.9. User Defined Function (UDF) 95
13.4.9.1. Pemanggilan UDF 96
13.5. Latihan 97

Modul 14 : Dasar Pemrograman Database 98


14.1. Waktu Pelaksanaan Praktikum 98
14.2. Tujuan 98
14.3. Alat Dan Bahan 98
14.4. Dasar Teori 98
14.4.1. Membuka Koneksi ke Database. 98
14.4.2. Menampilkan Data dari Tabel. 99
14.4.3. Memodifikasi Data Dalam Tabel. 99
14.4.4. Menggunakan Prepared Statement. 99
14.5. Prosedur Praktikum 100
14.6. Latihan 101

Lampiran 103
Lampiran 1. Struktur Format Laporan 103
Lampiran 2. Contoh Format Laporan 104
DAFTAR GAMBAR
Gambar 1.1Instalasi Sql Server ............................................................................................................ 18
Gambar 1.2 Pilih Free Edition .............................................................................................................. 18
Gambar 1.3 Accept............................................................................................................................... 19
Gambar 1.4 Global Role ....................................................................................................................... 19
Gambar 1.5 Install Rule ........................................................................................................................ 20
Gambar 1.6 Fitur .................................................................................................................................. 20
Gambar 1.7 Seleksi Fitur ...................................................................................................................... 21
Gambar 1.8 Default Instance ............................................................................................................... 21
Gambar 1.9 Konfigurasi........................................................................................................................ 22
Gambar 1.10 Konfigurasi Database Engine .......................................................................................... 22
Gambar 1.11 Current User ................................................................................................................... 23
Gambar 1.12 Reporting ........................................................................................................................ 23
Gambar 1.13 Replay ............................................................................................................................. 24
Gambar 1.14 Replay Client................................................................................................................... 24
Gambar 1.15 Siap Instal ....................................................................................................................... 25
Gambar 1.16 Hasil Instalasi .................................................................................................................. 25
Gambar 2.1 Representasi Entitas (Entity) ............................................................................................. 27
Gambar 2.2 Representasi Hubungan (Relationship) ............................................................................. 29
Gambar 2.3 Contoh representasi relasi biner ....................................................................................... 29
Gambar 2.4 Contoh representasi relasi ternier .................................................................................... 30
Gambar 2.5 Contoh representasi relasi rekursif/uner (unary) ............................................................. 30
Gambar 2.6 Contoh representasi atribut pada relasi ........................................................................... 30
Gambar 2.7 Notasi Entity Relationship Diagram (ERD) ........................................................................ 31
Gambar 3.1 Login dengan akun google ................................................................................................ 32
Gambar 3.2 Membuat E-R Diagram ...................................................................................................... 33
Gambar 3.3 Membuat E-R Diagram ...................................................................................................... 33
Gambar 3.4 Membuat E-R Diagram ...................................................................................................... 33
Gambar 3.5 Membuat Atribut .............................................................................................................. 34
Gambar 3.6 Hasil Entity Employee dan Atributnya. ............................................................................. 34
Gambar 3.6 Tekan Connect................................................................................................................... 34
Gambar 3.6 Relationship Manage_by .................................................................................................. 35
Gambar 3.6 Relationship Manage_by dan works_for .......................................................................... 35
Gambar 3.10 E-R Diagram Company .................................................................................................... 36
Gambar 5.1 Contoh mengambil data keseluruhan isi table ................................................................. 45
Gambar 5.2 Contoh mengambil data dari sebagian kolom dari suatu table ........................................ 46
Gambar 5.3 Contoh mengambil data dengan klausa WHERE............................................................... 46
Gambar 5.4 Contoh mengambil data dengan klausa TOP N=10 .......................................................... 47
Gambar 5.5 (a) Contoh mengambil data tanpa klausa DISTINCT didapatkan 2000 record duplikasi. (b)
Contoh mengambil data dengan klausa DISTINCT didapatkan 20 record unik. ................................... 47
Gambar 5.6 (a) Contoh mengambil data secara terurut dengan ORDER BY. ....................................... 48
Gambar 6.1 Contoh menambahkan baris dengan NULL secara implisit. ............................................. 50
Gambar 6.2 Contoh menambahkan baris dengan NULL secara eksplisit. ............................................ 50
(a) (b) .............................................................................................................................................. 51
Gambar 6.3 Contoh hasil dari query UPDATE (1). (a) sebelum diubah (b) sesudah diubah. ................ 51
(a) (b) .............................................................................................................................................. 51
Gambar 6.4 Contoh hasil dari query UPDATE (1). (a) sebelum diubah (b) sesudah diubah. ................ 51
Gambar 7.1 Contoh record pada relasi student dan department......................................................... 53
Gambar 7.2 Hasil equi-join yang berasal dari relasi student dan department ..................................... 54
Gambar 7.3 Hasil join on ....................................................................................................................... 54
Gambar 7.4 Hasil join 3 tabel ................................................................................................................ 55
Gambar 7.5 Hasil cross join ................................................................................................................... 55
Gambar 7.6 Perbedaan tipe outer join ................................................................................................. 56
Gambar 7.7 Hasil Left Outer Join .......................................................................................................... 56
Gambar 7.8 Hasil right outer join .......................................................................................................... 57
Gambar 7.9 Hasil full outer join ............................................................................................................ 57
Gambar 7.10 Contoh hasil self join ....................................................................................................... 58
DAFTAR TABEL
Bab 0 : Running Modul

0.1 Tujuan
Setelah mengikuti Running Modul mahasiswa diharapkan dapat:
1. Memahami peraturan kegiatan praktikum.
2. Memahami Hak dan Kewajiban praktikan dalam kegiatan praktikum.
3. Memhami komponen penilaian kegiatan praktikum.

0.2 Peraturan Praktikum


1. Praktikum diampu oleh Dosen Mata Kuliah Praktikum dan dibantu oleh Asisten
Laboratorium dan Asisten Praktikum.
2. Praktikum dilaksanakan di Ruang ……………………………. sesuai jadwal yang ditentukan.
3. Praktikan wajib membawa modul praktikum, alat tulis, ……………………………. (dapat diisi
sesuai kebutuhan keperluan praktikum)
4. Praktikan wajib mengisi daftar hadir.
5. Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 15 menit untuk pengerjaan Tes Awal atau wawancara Tugas Pendahuluan
b. 60 menit untuk penyampaian materi
c. 45 menit untuk pengerjaan jurnal, tes akhir atau tugas
d. 50 menit Pengayaan
6. Praktikan wajib hadir minimal 75% dari seluruh pertemuan praktikum di lab. Jika
total kehadiran kurang dari 75% maka nilai Mata Praktikum = 0.
7. Praktikan yang datang terlambat :
• <= 30 menit : diperbolehkan mengikuti praktikum tanpa tambahan waktu Tes
Awal
• > 30 menit : tidak diperbolehkan mengikuti praktikum
8. Saat praktikum berlangsung, asisten praktikum dan praktikan:
• Wajib menggunakan seragam sesuai aturan Institusi.
• Wajib mematikan/ men-silent semua alat komunikasi(smartphone, tab, iPad,
dsb).
• Dilarang membuka aplikasi yang tidak berhubungan dengan praktikum yang
berlangsung.
• Dilarang mengubah setting software maupun hardware komputer tanpa ijin.
• Dilarang membawa makanan maupun minuman di ruang praktikum.
• Dilarang memberikan jawaban ke praktikan lain (pre-test, TP, jurnal, dan
post-test).
• Dilarang menyebarkan soal pre-test, jurnal, dan post-test.
• Dilarang membuang sampah/sesuatu apapun di ruangan praktikum.

9. Setiap praktikan dapat mengikuti praktikum susulan maksimal 1 modul untuk satu
praktikum.
• Praktikan yang dapat mengikuti praktikum susulan hanyalah praktikan yang
memenuhi syarat sesuai ketentuan Institusi, yaitu rawat inap di Rumah Sakit
(menunjukkan bukti rawat inap dan resep obat dari RS), tugas dari Institusi
(menunjukkan surat dinas dari Institusi), atau mendapat musibah
(menunjukkan surat keterangan dari orangtua/ wali mahasiswa).
10. Pelanggaran terhadap peraturan praktikum ini akan ditindak secara tegas secara
berjenjang di lingkup Kelas, Laboratorium, Program Studi, Fakultas, hingga Institusi.

0.3 Penilaian Praktikum


1. Komponen Nilai Praktikum terdiri dari : Tugas Pendahuluan, Tes Awal, Keaktifan Praktikum,
dan Jurnal/Tugas Besar.
2. Seluruh komponen penilaian beserta pembobotannya ditentukan oleh dosen Mata
Praktikum
3. Penilaian permodul dilakukan oleh asisten praktikum, sedangkan nilai seluruh modul
diserahkan kepada Dosen Mata Praktikum.
4. Baik praktikan maupun asisten tidak diperkenankan meminta atau memberikan tugas
tambahan untuk perbaikan nilai.
5. Standar indeks dan range nilai ditentukan oleh Dosen Mata Praktikum atas sepengetahuan
Ketua Kelompok Keahlian
Modul 1 : Pengantar dan Instalasi SQL Server
1.1 Waktu Pelaksanaan Praktikum
Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 10 menit untuk penjelasan singkat tentang modul
b. 100 menit untuk pengayaan
c. 60 menit pembahasan

1.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Mahasiswa mampu melakukan instalasi Mssql Server.
2. Mahasiswa mampu memahami tahapan-tahapan persiapan server.

1.3 Alat & Bahan


1. Komputer
2. Software Ms Sql Server 2014
3. Software Browser

1.4 Dasar Teori


Untuk dapat mengimplementasikan sebuah database, maka diperlukan sebuah software yang disebut
Database Management System(DBMS). DBMS adalah sebuah sistem yang didalamnya terdiri dari Data,
sekumpulan software yang dapat memudahkan memanajemen data dan pengguna, serta relasi antar data
itu sendiri. DBMS juga mengatur bagaimana pengguna dapat mengakses data dalam waktu yang sama.
SQL Server 2014 adalah DBMS karya Microsoft yang hingga kini masih digunakan diindustri TI
terutama yang menggunakan bahasa pemrograman yang berbasis Microsoft seperti Visual Studio. SQL
Server menyediakan cukup banyak fitur dan pengaturan yang mudah bagi pengguna pemula untuk dapat
memahami DBMS sebagai implementasi dari database yang digunakan. Sql Server yang boleh digunakan
secara bebas adalah versi Express, sehingga pada praktikkum basis data ini menggunakan Sql Server Express
Edition.

1.5 Prosedur Praktikum


1.5.1 Instalasi Sql Server
1. Klik installer SQL Server 2014
2. Kemudian pilih menu Installation > New SQL Server stand -alone installation or add
features to an existing installation
Gambar 1.1Instalasi Sql Server

3. Masukkan Product Key lalu klik Next

Gambar 1.2 Pilih Free Edition

4. Pada menu Licencence Terms, Centang I accept the license terms lalu Next
Gambar 1.3 Accept

5. Selanjutnya muncul proses Global Role, jika tidak ada masalah, maka lanjut pada bagian Microsoft
Update, bisa dicentang atau tidak, saya pilih tidak dicentang, lalu next

Gambar 1.4 Global Role


6. Muncul proses pengecheckan Instal Setup Files, jika tidak ada masalah maka lanjut ke proses selanjutnya.

7. Proses selanjutnya adalah pengecheckan Install Rules, jika tidak ada masalah atau hanya warning
langsung aja Next

Gambar 1.5 Install Rule

8. Proses selanjutnya adalah Setup Role, pilih SQL Server Feature Installation, lalu Next

Gambar 1.6 Fitur


9. Selanjutnya proses Feature Selection. Untuk Features pilih Select All agar terpilih semua, lalu Next

Gambar 1.7 Seleksi Fitur

11. Proses selanjutnya pilih Default Instance, lalu Next

Gambar 1.8 Default Instance

12. Proses selanjutnya klik Next saja


Gambar 1.9 Konfigurasi

13. Proses selanjutnya adalah Database Engine Configuration , pada Authentication Mode,
Pilih Windows Authentication Mode, lalu klik Add Curent User, maka akan keluar user pc
anda. Lalu klik Next

Gambar 1.10 Konfigurasi Database Engine

14. Proses selanjutnya klik Add Curent User, maka akan kluar user pc anda Lalu klik Next
Gambar 1.11 Current User

15. Pada Proses Reporting Services Configuration, pilih Instal and configure, selanjutnya Next
aja.

Gambar 1.12 Reporting

16. Proses selanjutnya klik Add Curent User, maka akan keluar user pc anda. Lalu klik Next
Gambar 1.13 Replay

17. Proses selanjutnya pada Control Name, ketik aja sesuai nama atau terserah anda, lalu
Next

Gambar 1.14 Replay Client

18. Setelah proses semua pengecheckan tidak ada yang eror, langsung saja klik Install
Gambar 1.15 Siap Instal

1.6 Hasil Percobaan


Hasilnya adalah sebagai berikut.

Gambar 1.16 Hasil Instalasi

1.7 Tugas
1.7.1 Install SQL Server pada laptop masing-masing, dan jelaskan langkah-langkahnya
Modul 2 : Konsep Entity Relational Model,

2.1 Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
d. 10 menit untuk penjelasan singkat tentang modul
e. 100 menit untuk pengayaan
f. 60 menit pembahasan

2.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami konsep dalam Model Entitas Hubungan (Entity Relationship Model)

2.3 Alat & Bahan


1. Komputer

2.4 Dasar Teori


Basis data dapat dimodelkan sebagai:

• Himpunan entitas
• Relasi antar entitas

2.4.1 Entitas (Entity)


Definisi

Entitas adalah:

• “sesuatu” atau “objek” di dunia nyata yang dapat dibedakan dari objek lain
• kelompok objek independen yang dapat diidentifikasi dan memiliki kesamaan properti.
Entitas dapat berupa objek nyata atau objek konseptual.

1. Obyek nyata. Contohnya: Buku, Mahasiswa, Dosen, Barang, Kendaraan


2. Obyek konseptual. Contohnya: Matakuliah, Transaksi

Contoh entitas yang ada pada sistem informasi di bengkel adalah:

Kendaraan, Pegawai/Montir, Kendaraan, SparePart, Servis

Representasi Entitas

Entitas digambarkan dalam bentuk persegi panjang dengan label yang menunjukkan nama entitas,
umumnya berupa kata benda tunggal.

Kendaraan

Gambar 2.1 Representasi Entitas (Entity)

Jenis Entitas

1. Entitas kuat (strong entity)


• Entitas yang mandiri, yang keberadaannya tidak bergantung pada keberadaan entitas yang
lainnya.
• Entitas kuat selalu memiliki karakteristik yang unik disebut identifier (sebuah atribut tunggal
atau gabungan atribut-atribut yang secara unik dapat digunakan untuk membedakannya dari
entitas kuat yang lain).
• Disebut juga entitas parent, owner, entitas domain
Contoh: Kendaraan, Montir

2. Entitas lemah (weak entity)


• Entitas yang keberadaannya sangat bergantung pada keberadaan entitas yang lainnya.
• Entitas lemah tidak memiliki arti apa-apa dan tidak dikehendaki kehadirannya dalam diagram
ER tanpa kehadiran entitas di mana mereka bergantung.
• Entitas yang tidak mempunyai primary key (PK)
• Disebut juga child, dependent, atau subordinat
Contoh: Keluarga

2.4.2 Atribut (Attributes)


Definisi

Setiap entitas memiliki atribut yang mendeskripsikan karakteristik (properti) dari entitas tersebut.

• Contoh atribut dari kendaraan adalah:


Kendaraan = (Jenis_Kendaraan, Merk, No_STNK, No_Mesin)
• Setiap atribut akan memiliki nilai (values)
• Domain (value set): Batas-batas nilai yang diperbolehkan bagi suatu atribut

Tipe-Tipe Atribut

1. Atribut Sederhana (Simple) dan Komposit (Composite)


Atribut Sederhana (simple)/Atomik:

• Atribut yang terdiri atas komponen tunggal yang tidak dapat dibagi menjadi komponen yang
lebih kecil;
Contoh: atribut Jenis_Kendaraan, Merk, No_STNK, No_Mesin pada entitas kendaraan

Atribut Komposit (Composite):

• Atribut yang dapat dibagi lagi dalam beberapa bagian;


• Atribut yang terdiri atas beberapa komponen independen (dapat berdiri sendiri).
Contoh:
Atribut Alamat pada entitas Pelanggan (Jalan Veteran no 8, Malang, 65145).

Atribut ini dapat dibagi menjadi Jalan (Jalan Veteran no 8), Kota (Malang), dan KodePos
(65145).

2. Single-valued dan multi-valued attributes


Single-valued (tunggal) attributes: atribut yang memuat nilai tunggal.

Contoh: atribut nama pada entitas pelanggan. Setiap Pelanggan hanya punya 1 nama

Multi-valued attributes: atribut yang memuat beberapa nilai.

Contoh: atribut NomorTelepon pada entitas Pelanggan. Pelanggan bisa mempunyai nomor telepon
lebih dari 1
3. Atribut Turunan (Derived)
Atribut yang menyatakan suatu nilai yang berkaitan dengan atribut-atribut lain

Atribut yang diperoleh dari pengolahan dari atribut lain yang berhubungan.

Contoh: atribut masa studi yang diperoleh dari TanggalLulus dikurangi TanggalDaftar

4. Primary Key (PK)


• PK adalah atribut yang mengidentifikasi entitas secara unik. Setiap strong entity/entitas kuat
harus mempunyai Primary Key.
Contoh: PK pada entitas kendaraan adalah No_STNK
• PK bisa berasal dari satu atau gabungan dari beberapa atribut

2.4.3 Hubungan/Relasi (Relationship)


Definisi

Relasi adalah hubungan antar entitas yang dapat diidentifikasi dan bermakna.

Relasi dinyatakan dengan nama yang menunjukkan fungsinya.

Contoh: memiliki yang menghubungkan entitas Pelanggan dan Kendaraan

Relasi dimungkinkan memiliki atribut.

Representasi Relasi

Relasi digambarkan dalam bentuk belah ketupat (diamond) dengan label yang menunjukkan nama
relasi, umumnya berupa kata kerja.

Nama
relationship
e

Gambar 2.2 Representasi Hubungan (Relationship)

Derajat Relasi

Derajat relasi menunjukkan jumlah entitas yang terhubung dalam suatu relasi.

Entitas-entitas yang terhubung dalam suatu relasi disebut partisipan.

2.4.4 Jenis-Jenis Relationship


2.4.4.1 Relasi Biner (Binary Relationship)
Relasi berderajat dua dinamakan relasi biner (binary), yakni relasi yang melibatkan dua himpunan
entitas.

Secara umum himpunan relasi dalam sistem basis data adalah biner.

Dosen membimbing Mahasiswa

Gambar 2.3 Contoh representasi relasi biner


2.4.4.2 Relasi Ternier (Ternary Relationship)
Relasi berderajat tiga dinamakan relasi ternier (ternary). Relasi antara lebih dari dua entitas jarang
terjadi. Terdapat tiga entitas yang berpartisipasi dalam relasi ternier.

Contoh: relasi Mendaftar yang menghubungkan entitas Staf, KantorCabang, dan Klien. Relasi ini
menyatakan seorang staf mendaftar klien di suatu kantor cabang.

Gambar 2.4 Contoh representasi relasi ternier

2.4.4.3 Relasi Rekursif/Uner (Unary)


• Relasi rekursif adalah tipe relasi yang menghubungkan satu entitas tunggal dengan dirinya sendiri
(uner/unary). Relasi rekursif Mengaudit yang merepresentasikan relasi dosen dengan auditor, seorang
auditor merupakan bagian entitas dosen. Dengan kata lain, relasi ini menyatakan seorang dosen
melakukan pemeriksaan (mengaudit) dosen lain.
• Relasi ini dapat ditambahkan nama peran untuk menunjukkan posisi partisipasinya, pada contoh di
atas: relasi Mengaudit menghubungkan entitas Dosen yang berperan sebagai Auditor dengan
dosen lain yang berperan sebagai Auditee.

Gambar 2.5 Contoh representasi relasi rekursif/uner (unary)

2.4.5 Atribut Pada Relationship


Relasi juga bisa mempunyai atribut. Atributnya muncul karena adanya relasi. Contoh atribut pada
relasi adalah atribut Quantity yang ada pada relasi SUPPLY muncul karena supplier melakukan pasokan
PART pada PROJECT

Gambar 2.6 Contoh representasi atribut pada relasi

2.5 Diagram Entitas Relasional (Entity Relationship Diagram)


Definisi

Diagram ER merupakan model konseptual untuk menggambarkan struktur logis dari basis data berbasis
grafis.

2.5.1 Notasi Diagram ER (ERD)


Gambar 2.7 Notasi Entity Relationship Diagram (ERD)

2.5.2 Langkah-Langkah Membuat Diagram ER


1. Mengidentifikasi dan menetapkan seluruh entitas yang terlibat.
2. Menentukan atribut dari setiap entitas.
3. Menentukan key dari setiap entitas.
4. Mengidentifikasi dan menetapkan relasi antar entitas yang ada.
5. Menentukan kardinalitas/derajat relasi untuk setiap relasi yang ada.
6. Melengkapi entitas dan relasi dengan atribut-atribut deskriptif.
Modul 3 : Entity Relatioship Diagram,

3.1 Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 10 menit untuk penjelasan singkat tentang modul
b. 100 menit untuk pengayaan
c. 60 menit pembahasan

3.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami dan mampu membuat Entity Relationship Diagram)

3.3 Alat & Bahan


1. Komputer

3.4 Dasar Teori


E-R diagram merupakan representasi hubungan antar entity yang menggambarkan bagaimana
sebuah entity dapat digunakan oleh entity lain sehingga dapat meminimalisir perulangan data. E-R
diagram menggunakan notasi seperti pada modul 2 untuk bisa menjelaskan konsep pada E-R
Model.

3.5 Prosedur Praktikum


Studi kasus perusahaan
Perusahaan ini dikelompokkan ke dalam beberapa departemen. Setiap departemen memiliki nama
unik, nomor unik, dan karyawan tertentu yang mengelola departemen tersebut. Sistem juga melacak
tanggal mulai ketika karyawan itu mulai mengelola departemen. Sistem juga akan menyimpan nama
masing-masing karyawan, nomor Jaminan Sosial, 2 alamat, gaji, jenis kelamin, dan tanggal lahir serta
departemen masuk ke dalam departemen mana.

1. Buka web site https://erdplus.com/#/login lalu pilih login dengan akun google yang anda miliki.

Gambar 3.1 Login dengan akun google


2. Klik tombol New lalu E-R diagram untuk membuat baru

Gambar 3.2 Membuat E-R Diagram

3. Klik dua kali pada New diagram yang sudah dibuat sampai masuk tampilan editor seperti pada
gambar berikut.

Gambar 3.3 Membuat E-R Diagram

4. Klik tombol entity lalu beri nama Departemen

Gambar 3.4 Membuat E-R Diagram

5. Klik tombol add attribute dan beri nama dengan DeptNo


Gambar 3.5 Membuat Atribut

6. Ulangi langkah 5 untuk membuat atribut DeptName pada entity Departemen


7. Ulangi langkah no 4 untuk membuat entity Employee
8. Ulangi langkah no 5 untuk membuat atribut pada entity Employee yaitu name, Social Security
number,address, salary, sex (gender), and birth date. Hasil dapat dilihat pada gambar 3.6.

Gambar 3.6 Hasil Entity Employee dan Atributnya.

9. Buat Relationship antar Departmen dan Employee dengan menekan tombol connect.

Gambar 3.7 Tekan Connect.

10. Hubungkan antara Departmen dan Employee dengan klik dan drag dari departement dan
employee, lalu beri nama relationship dengan nama manage_by. Beri cardinality one to one dan
mandatory. Lihat gambar berikut ini.
Gambar 3.8 Relationship Manage_by

11. Ulangi langkah 12 untuk membuat relation works_for

3.6 Hasil Percobaan


Hasilnya adalah sebagai berikut.

Gambar 3.9 Relationship Manage_by dan works_for

3.7 Tugas
3.7.1 Lengkapi E-R Diagram diatas sehingga menjadi seperti pada gambar berikut.
Gambar 3.10 E-R Diagram Company
Modul 4 : Data Definition Language,

4.1 Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 10 menit untuk penjelasan singkat tentang modul
b. 100 menit untuk pengayaan
c. 60 menit pembahasan

4.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami tipe data yang di dukung oleh DBMS
2. Memahami dan menerapkan sintaks DDL
3. Memahami dan menerapkan constraint

4.3 Alat & Bahan


1. Komputer

4.4 Dasar Teori


Tipe-tipe data yang didukung oleh basis data tidak jauh berbeda dengan yang telah dikenal dalam
pemrograman pada umumnya. Namun, antara satu Database Management System (DBMS) dengan DBMS
yang lain bisa memiliki perbedaan, meskipun memiliki standardisasi SQL. Berikut ini adalah beberapa tipe
data yang digunakan di SQL Server.

Tipe data String:

Tipe data Keterangan Tipe data Keterangan

CHAR(N) String dengan panjang tetap n NTEXT String Unicode dengan


(maks. 8000 karakter) panjang tidak tetap hingga 2
GB

VARCHAR(N) String dengan panjang tidak BIT Berisi 0, 1, dan NULL


tetap maks n (maks. 8000
karakter)

TEXT String dengan panjang tidak BINARY(N) String biner dengan panjang
tetap tetap n

NCHAR String Unicode dengan panjang VARBINARY String biner dengan panjang
tetap (maks. 4000 karakter) tidak tetap n

NVARCHAR String Unicode dengan panjang IMAGE String biner dengan panjang
tidak tetap (maks. 4000 tidak tetap untuk menyimpan
karakter) image

Tipe data angka:

Tipe data Keterangan Tipe data Keterangan

TINYINT Bilangan bulat 0..255 (8 bit/1 FLOAT Bilangan desimal 4 bytes


byte) (bernilai aproksimasi)
SMALLINT Bilangan bulat 16 bit/2 byte REAL Bilangan desimal 8 bytes
(bernilai aproksimasi)

INT Bilangan bulat 32 bit/4 byte MONEY Menyimpan bilangan untuk


uang 8 bytes

BIGINT Bilangan bulat 64 bit/8 byte SMALLMONEY Menyimpan bilangan untuk


uang 4 bytes

DECIMAL(P, Bilangan desimal 5-17 bytes


S) (tergantung ketelitian desimal) –
bernilai pasti (exact) hingga 38
NUMERIC(P,
digit
N)

Tipe data tanggal/waktu:

Tipe data Keterangan Tipe data Keterangan

DATETIME Dari 1 January 1753 s.d. 31 DATETIMEOFFSET Sama dengan datetime2


December 9999 dengan tetapi menyimpan offset
akurasi 3,33 milidetik zona waktu

DATETIME2 Dari 1 January 0001 s.d. 31 TIME Menyimpan waktu saja


December 9999 dengan dengan akurasi 100
akurasi 100 nanodetik nanodetik

SMALLDATETIME Dari 1 January 1900 s.d. 31 TIMESTAMP Menyimpan angka unik yang
December 9999 dengan diperbarui tiap kali baris
akurasi 1 menit record dibuat/ dimodifikasi
berdasarkan internal clock
DATE Menyimpan tanggal saja dari
1 January 1753 s.d. 31
December 9999

SQL Server juga mendukung beberapa tipe data yang lain misalkan uniqeidentifier berupa
globally unique identifier (GUID) sebagai kode unik yang dibuat secara acak, xml untuk menyimpan data
berupa XML, dan masih ada yang lain

4.5 Prosedur Praktikum


4.5.1 Membuat Database dengan CREATE
Untuk membuat basis data digunakan sintaksis CREATE DATABASE diikuti nama database. Contoh
pembuatan basis data sebagai berikut:
CREATE DATABASE mydatabase

Maka akan membuat basis data bernama mydatabase. Untuk memilih dan menggunakan basis
data mydatabase, gunakan sintaksis sebagai berikut.
use mydatabase

4.5.2 Membuat Table dengan CREATE


Setelah kita memilih basis data yang akan digunakan, maka kita bisa membuat tabel di dalam basis
data tersebut. Untuk membuat tabel maka digunakan sintaksis CREATE TABLE.
4.5.3 Table Sederhana

CREATE TABLE mytable(

col int

Contoh di atas digunakan untuk membuat tabel mytable dengan satu atribut bernama col dengan tipe
data int (integer 32 bit)

4.5.4 Table dengan Default Value


Pada tabel Users berikut, field profession diisi dengan nilai default yaitu berupa string "Student".
Nantinya saat penambahan record baru, apabila field profession ini tidak diisi secara eksplisit maka secara
otomatis isinya adalah "Student".
CREATE TABLE Users (

name CHAR(20),

age INTEGER,

profession VARCHAR(30) default 'Student'

CREATE TABLE Department (

deptno SMALLINT NOT NULL IDENTITY (100, 1),

deptname VARCHAR(36) NOT NULL,

mgrno CHAR(6),

admrdept SMALLINT NOT NULL,

location CHAR(30)

Pada tabel Department, field deptno diberi nilai default mulai dari angka 100 dan apabila ada
record baru maka record berikutnya memiliki deptno dengan penambahan (increment) 1. Misalnya apabila
tabel masih kosong, apabila ada record baru (baris pertama), maka deptno secara otomatis bernilai 100.
Apabila ada record baru lagi (baris kedua), maka deptno dari record baru bernilai 101, deptno baris ketiga
bernilai 102, dst.

4.5.5 Table dengan NOT NULL Value


Pada tabel users dan department di atas, NOT NULL mengindikasikan bahwa field tersebut tidak
boleh bernilai kosong/tidak berisi. Berbeda apabila tidak ada NOT NULL, misalnya field age pada tabel
users, bila tidak diisi nilainya secara eksplisit maka bernilai NULL.

4.5.6 Table dengan Constraint


Contraint pada suatu tabel mendefinisikan aturan-aturan yang membatasi suatu field. Ada
beberapa constraint antara lain:

a. UNIQUE
Fungsinya adalah menjaga suatu field pada suatu tabel tidak boleh berisi nilai yang sama (duplikasi).
Namun NULL diperbolehkan menjadi nilai suatu field yang UNIQUE. Contoh tabel dengan UNIQUE:

CREATE TABLE Persons (

P_Id int NOT NULL UNIQUE,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

CREATE TABLE Persons (

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (P_Id)

CREATE TABLE Persons (

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uc_PersonID UNIQUE (P_Id, LastName)

b. PRIMARY KEY
Fungsinya menjaga suatu field tidak boleh berisi sama dan tidak boleh berisi NULL. Fungsi dari primary
key adalah sebagai pembeda antara satu record (entitas) dengan record yang lainnya (sebagai suatu
identifier)
CREATE TABLE Persons (

P_Id int NOT NULL PRIMARY KEY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

c. REFERENTIAL
Fungsinya untuk menjaga hubungan (relationship) antar tabel. Tabel yang dirujuk memiliki primary key,
sedangkan tabel yang merujuk memiliki foreign key, dimana primary key dan foreign key memiliki
domain nilai yang sama.
CREATE TABLE Orders (

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

P_Id int FOREIGN KEY REFERENCES Persons(P_Id)

Pada contoh di atas, field P_Id tabel Orders akan merujuk ke primary key P_Id pada tabel Persons. Pada
referential integrity ini, nilai field pada foreign key P_id tabel Orders harus ada nilainya di primary key
P_Id tabel Persons.

d. CHECK
CHECK berfungsi membatasi nilai/data apa saja yang bisa dimasukkan pada suatu field. Selain itu juga
berfungsi menjaga supaya data yang dimasukkan pada suatu field sesuai dengan aturan yang dibuat.
CREATE TABLE Employee (

ID INTEGER NOT NULL PRIMARY KEY,

Name VARCHAR(9),

ZipCode CHAR(5) CHECK (ZipCode LIKE '[0-9][0-9][0-9][0-9][0-9]'),

Dept SMALLINT CHECK (Dept BETWEEN 10 AND 100),

Job CHAR(5) CHECK (Job IN ('Sales','Manager','Clerk')),

HireDate DATE,

Salary DECIMAL(7,2),

CONSTRAINT YEARSAL CHECK ( YEAR(HireDate) > 1986 OR Salary > 40500 )

4.5.7 Melihat Data Pada Table


Untuk melihat data yang sudah kita masukkan pada tabel, maka digunakan perintah SELECT. Misalnya
untuk melihat seluruh baris data pada seluruh field yang ada di tabel Employee, query-nya:
SELECT * FROM Employee

Apabila ingin mengambil data pada sebagian field saja (operasi project) dari tabel Employee, contohnya:

SELECT Name, Dept, HireDate FROM Employee

4.5.8 Membuat View dengan CREATE


View adalah tabel virtual yang berisi result-set (hasil query berisi 1 atau banyak baris dengan banyak kolom)
dari suatu statement SQL. View seperti halnya tabel juga terdiri dari kolom dan baris, namun kolom dan isi
data pada view sebenarnya berasal dari tabel. View ini bisa dibuat dengan statement SQL yang sederhana
hingga kompleks, yang nantinya bisa berisi klausa WHERE, JOIN, dll yang akan dibahas pada bab-bab
berikutnya.

Contoh pembuatan view bernama Employee2010 yang mana datanya berasal dari tabel Employee yang
menampilkan semua pegawai yang dipekerjakan setelah tahun 2010:
CREATE VIEW Employee2010 AS

SELECT ID, Name, HireDate FROM Employee

WHERE YEAR(HireDate) > 2010

Cara untuk mengambil data dari view Employee2010 sama seperti pada tabel, misalnya:
SELECT * FROM Employee2010

4.5.9 Memodifikasi Objek Database dengan ALTER


Basis data yang telah dibuat masih bisa dimodifikasi. Untuk memodifikasi objek basis data dan tabel
yang telah dibuat digunakan sintaksis ALTER.

4.5.10 Menambah Kolom/Field Baru


Sintaksis untuk menambah kolom/field baru pada tabel adalah:
ALTER TABLE [nama_tabel]

ADD [nama_kolom] [tipe_data] (constraint);

Contoh penambahan field baru State pada tabel Persons:


ALTER TABLE Persons

ADD State varchar(20);

4.5.11 Mengubah Tipe Data Dari Kolom/Field


Sintaksis untuk mengubah kolom/field yang sudah ada adalah:
ALTER TABLE [nama_tabel]

ALTER COLUMN [nama_kolom] [tipe_data];

Contoh pengubahan tipe data pada tabel Persons:


ALTER TABLE Persons

ALTER COLUMN City VARCHAR(75) NOT NULL;

4.5.12 Menghapus Kolom/Field


Sintaksis untuk menghapus kolom/field adalah:
ALTER TABLE [nama_tabel]

DROP COLUMN [nama_kolom]

Contoh penghapusan kolom:


ALTER TABLE Persons

DROP COLUMN DateOfBirth

4.5.13 Menambah Constraint


Sintaksis penambahan constraint:
ALTER TABLE Persons

ADD CONSTRAINT [nama_kolom] [jenis_constraint] [kondisi_constraint];

Contoh penambahan constraint primary key:


ALTER TABLE Persons

ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id, LastName)


4.5.14 Mengubah Nama Objek Database
Sintaksis pengubahan nama basis data adalah:
ALTER DATABASE [nama_basisdata]

MODIFY NAME = [nama_basisdata_baru];

GO

Contoh pengubahan nama basis data mydatabase ke my_newdatabase:


use master;

GO

ALTER DATABASE mydatabase

MODIFY NAME = my_newdatabase;

GO

Pada contoh di atas, apabila basis data mydatabase masih digunakan/terkoneksi maka aktifkan basis data
yang lain, dalam hal ini adalah master. Setelah dijalankan melalui perintah GO (sebagai pembatas suatu
blok baris perintah, GO bisa dikustomisasi) maka jalankan pengubahan nama sebenarnya.

4.5.15 Menghapus Objek Database dengan DROP


Sintaksis penghapusan objek basis data menggunakan DROP. Penghapusan bisa dilakukan untuk basis data,
tabel, atau objek lainnya.

CATATAN:

Hati-hati untuk melakukan penghapusan objek, tabel, basis data, karena apabila suatu objek dihapus maka:

a. Semua data dan struktur tabel akan dihapus


b. Semua indeks akan dihapus
c. Semua transaksi pending akan di-commit
d. Perintah drop tidak bisa di-rollback (dikembalikan atau undo/undrop) secara permanen

4.5.16 Menghapus Table


Sintaksis menghapus tabel adalah:
DROP TABLE [nama_tabel]

Contoh menghapus tabel Persons adalah:


DROP TABLE Persons

4.5.17 Menghapus Database


Sintaksis menghapus basis data adalah:
DROP DATABASE [nama_basisdata]

Contoh menghapus tabel mydatabase adalah:


DROP DATABASE mydatabase

4.6 Tugas
1. Implementasikan model relasional berikut ke DBMS dengan menambahkan NIM di setiap table
yang ada. Contoh table mahasiswa menjadi mahasiswa_nim.
2. Modifikasi table MHS_KOTA_NIM sehingga mempunyai struktur seperti berikut (perlihatkan
hasilnya):

Name Null? Type Constr.

NIM NOT VARCHAR(15) FK PK


K_PROPINSI VARCHAR(9) FK
K_NEGARA VARCHAR(9) FK
K_KOTA VARCHAR(9) FK
ALAMAT VARCHAR(110)
KODE_POS VARCHAR(6)

3. Buatlah table MHS_KOTA2_NIM yang memiliki struktur sama seperti table MHS_KOTA_NIM!
4. Drop table MHS_KOTA_NIM!
Modul 5 : Dasar Query Select

5.1 Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 10 menit untuk penjelasan singkat tentang modul
b. 100 menit untuk pengayaan
c. 60 menit pembahasan

5.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami operasi SELECT
2. Mengambil data dari suatu tabel
3. Mengambil data dengan kriteria tertentu dan/atau secara terurut

5.3 Alat & Bahan


1. Komputer

5.4 Dasar Teori


SQL Select
Sintaksis query SQL untuk mengambil data (tuple/record) menggunakan perintah SELECT. Sintaksis
SELECT dapat digunakan untuk melihat isi data dari satu atau banyak tabel dari query yang sederhana
hingga kompleks. Struktur sederhana sebuah query SELECT adalah sebagai berikut.

SELECT [nama_kolom] FROM [nama_tabel]

WHERE [kondisi]

[GROUP BY] [nama_kolom]

[ORDER BY] [nama_kolom]

5.5 Prosedur Praktikum


5.5.1 Mengambil Data dengan SELECT
Query untuk mengambil data menggunakan sintaksis SELECT, misalnya untuk mengambil seluruh data dari
seluruh data pada tabel instructor. Tanda * digunakan untuk mengambil data dari seluruh kolom.
SELECT * FROM instructor

Gambar 5.1 Contoh mengambil data keseluruhan isi table


Untuk mengambil data hanya dari sebagian/beberapa kolom dari tabel instructor, misalnya hanya dari
kolom name, dept_name maka gunakan sintaksis seperti berikut.

SELECT name, dept_name FROM instructor

Gambar 5.2 Contoh mengambil data dari sebagian kolom dari suatu table

5.5.2 Mengambil Data dengan SELECT-WHERE


Untuk mengambil data sesuai yang memenuhi kriteria-kriteria tertentu digunakan klausa WHERE. Sintaksis
klausa WHERE adalah sebagai berikut.

SELECT [nama_kolom]

FROM [nama_tabel]

WHERE [kriteria]

Pada sintaksis di atas kriteria bisa dapat berisi kondisi logika (=, != atau <>), relasional (>, >=, <, <=, =, ),
rentang dan himpunan bagian (BETWEEN, IN), atau pola pencarian (LIKE). Apabila ada dua atau lebih
kriteria dapat dikombinasikan dengan operator AND, OR, dan NOT.

Contoh untuk mencari instructor yang berasal dari program studi (department) ‘Statistic’ dan memiliki gaji
(salary) lebih dari 55.000 adalah sebagai berikut.

SELECT *

FROM instructor

WHERE dept_name = 'Statistics' AND salary > 55000

Gambar 5.3 Contoh mengambil data dengan klausa WHERE

5.5.3 Mengambil Data Top-N dengan TOP


Untuk mengambil data sebanyak N maka digunakan klausa TOP. Klausa TOP hanya berlaku di SQL Server
sedangkan untuk di DBMS yang lain sintaksisnya berbeda, misalnya di MySQL menggunakan LIMIT N, di
Oracle ROWNUM <= N, di DB2 FETCH FIRST N ROWS ONLY.
Contoh untuk mengambil data dari student sebanyak N (misalnya N sebanyak 10) adalah sebagai berikut.
SELECT TOP 10 *

FROM student

Gambar 5.4 Contoh mengambil data dengan klausa TOP N=10

Atau untuk mengambil data student sebanyak N persen adalah sebagai berikut
SELECT TOP 10 PERCENT *

FROM student

Pada contoh di atas maka akan dihasilkan record sebanyak 10 persen (200 record) dari tabel student yang
berisi total 2000 record.

5.5.4 Mengambil Data Unik dengan DISTINCT


Supaya query SQL SELECT tidak mengikutkan data yang sama dari beberapa record/tuple (hanya
data unik), maka digunakan klausa DISTINCT.
Misalnya saja pada tabel student ada 2.000 record student dan tiap student pasti memiliki program
studi (dept_name). Apabila kita mengambil data berdasarkan kolom dept_name saja dari table student,
maka akan didapatkan seluruh dept_name dari seluruh student (ada duplikasi data). Untuk tidak
mengikutkan dept_name yang memiliki duplikasi maka digunakan klausa DISTINCT seperti berikut.
SELECT dept_name
SELECT DISTINCT dept_name
FROM student
FROM student

(a) (b)
Gambar 5.5 (a) Contoh mengambil data tanpa klausa DISTINCT didapatkan 2000 record duplikasi. (b) Contoh
mengambil data dengan klausa DISTINCT didapatkan 20 record unik.

Pada contoh di atas query tanpa DISTINCT akan menghasilkan data 2.000 record dengan adanya duplikasi
(misalnya ‘Civil Eng.’ muncul beberapa kali karena masing-masing tuple adalah student dari ‘Civil Eng.’).
Pada query dengan DISTINCT maka dihasilkan hanya dept_name yang unik saja, sehingga didapatkan hanya
20 record (karena hanya ada 20 dept_name yang unik).
5.5.5 Mengambil Data Terurut dengan ORDER BY
Klausa ORDER BY digunakan untuk mengurutkan data berdasarkan kolom tertentu, bisa satu atau
lebih kolom, dan secara menaik (ascending) atau menurun (descending). Sintaksis ORDER BY adalah sebagai
berikut.
SELECT [nama_kolom]

FROM [nama_tabel]

[WHERE [kriteria]]

ORDER BY [nama_kolom] [ASC|DESC]

Keyword ASC digunakan untuk mengurutkan secara menaik, DESC untuk menurun.

Contoh untuk mengambil data dari tabel student diurutkan berdasarkan kolom name secara menaik dan
dept_name secara menaik adalah sebagai berikut.
SELECT *

FROM student

ORDER BY name ASC, dept_name ASC

Gambar 5.6 (a) Contoh mengambil data secara terurut dengan ORDER BY.

5.6 Latihan
1. Ambil nama, nama program studi, total SKS diambil (tot_cred) semua data student yang memiliki total
SKS diambil (tot_cred) lebih dari 120.
2. Ambil semua data student yang memiliki total SKS diambil (tot_cred) lebih dari 80 hingga 100 (tanpa
menggunakan BETWEEN hanya dengan operator relasional).
3. Ambil semua data student yang memiliki total SKS diambil (tot_cred) lebih dari 80 hingga 100
menggunakan BETWEEN.
4. Ambil semua data student yang berasal dari program studi (dept_name) ‘Statistics’ dan total SKS
diambil kurang dari sama dengan 100.
5. Ambil semua data student yang memiliki total SKS diambil (tot_cred) lebih dari 120 dan urutkan secara
menaik berdasarkan kolom program studi (dept_name), secara menaik berdasarkan total SKS secara
menurun, dan secara menaik berdasarkan nama.
Modul 6 : Data Manipulation Language

6.1 Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 10 menit untuk penjelasan singkat tentang modul
b. 100 menit untuk pengayaan
c. 60 menit pembahasan

6.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami statement Data Manipulation Language (DML)
2. DML Menyisipkan baris kedalam tabel
3. Mengubah baris dalam tabel
4. Menghapus baris dari tabel

6.3 Alat & Bahan


1. Komputer

6.4 Dasar Teori


Data Manipulation Language (DML)
Data Manipulation Language (DML) adalah suatu statement yang dijalankan pada saat kita
memerlukan:

• Penambahan baris baru pada tabel

• Mengupdate baris yang ada pada tabel

• Menghapus baris yang ada pada tabel

Statement DML identik dengan operasi INSERT, UPDATE dan DELETE.

Istilah transaksi mengandung pengertian kumpulan statement DML yang membentuk suatu fungsi tertentu.

6.5 Prosedur Praktikum


6.5.1 Menambahkan Baris Data dengan INSERT
Sintaksis query SQL untuk menambahkan baris data baru ke dalam tabel menggunakan sintaksis
INSERT INTO. Struktur sederhana dalam query INSERT INTO sebagai berikut:
INSERT INTO nama_tabel [(nama_kolom[,nama_kolom2...])]

VALUES (nilai[,nilai2...])

Misalnya untuk menambahkan baris data baru pada tabel student:


INSERT INTO student (ID,name,dept_name,tot_cred) VALUES ('12345','Deny','Biology',34);

6.5.2 Menambahkan Baris Data Bernilai NULL


Kolom yang tidak disebutkan dalam perintah INSERT INTO secara otomatis akan diisi dengan nilai
NULL. Misalnya menambahkan baris data baru pada tabel instructor dengan dept_name dan salary bernilai
NULL.
INSERT INTO instructor (ID,name) VALUES('15432','Agus');

Gambar 6.1 Contoh menambahkan baris dengan NULL secara implisit.

Atau secara eksplisit memasukkan nilai NULL ke suatu kolom.


INSERT INTO instructor VALUES('12348','Ahmad',NULL,NULL);

Gambar 6.2 Contoh menambahkan baris dengan NULL secara eksplisit.

6.5.3 Memodifikasi Data dengan UPDATE


Sintaksis query SQL untuk memodifikasi baris data yang ada pada tabel menggunakan sintaksis
UPDATE. Struktur sederhana dalam query UPDATE sebagai berikut:
UPDATE nama_tabel

SET nama_kolom = nilai [, nama_kolom = nilai, …]

[WHERE kriteria];

Misalnya untuk memodifikasi tot_cred dari tabel student dengan ID=1000.


UPDATE student SET tot_cred=144 WHERE ID='1000';
Sebelum Proses Update Sesudah Proses Update

(a) (b)

Gambar 6.3 Contoh hasil dari query UPDATE (1). (a) sebelum diubah (b) sesudah diubah.

Jika klausa WHERE dihilangkan, maka perintah UPDATE akan mengubah nilai kolom dari semua data atau
record yang ada pada tabel. Misalnya mengubah semua tot_cred dengan nilai 35 pada tabel student.
UPDATE student SET tot_cred=35;

Sebelum Proses Update Sesudah Proses Update

(a) (b)

Gambar 6.4 Contoh hasil dari query UPDATE (1). (a) sebelum diubah (b) sesudah diubah.

6.5.4 Menghapus Baris Data dengan DELETE


Baris data yang ada pada tabel dapat dihapus dengan menggunakan sintaksis DELETE. Jika klausa
WHERE disertakan pada perintah DELETE maka baris data tertentu yang akan dihapus hanya yang
memenuhi kriteria pada WHERE. Struktur sederhana dalam query DELETE sebagai berikut:
DELETE FROM nama_tabel

[WHERE kriteria]

Misalnya menghapus baris data pada tabel instructor dengan ID=12348


DELETE FROM instructor WHERE ID='12348';
Tapi jika klausa WHERE dihilangkan, maka semua baris data dalam tabel akan dihapus. Misalnya
menghapus semua baris data pada tabel student
DELETE FROM student;

Semua baris data di tabel student akan terhapus.

6.5.5 Menggunakan Subquery Dalam INSERT


Subquery dapat digunakan dalam statement INSERT. Misalnya membuat data baru di tabel acc_instructor
dengan menggunakan data dari tabel instructor dengan dept_name = Accounting.
INSERT INTO acc_instructor

SELECT * FROM instructor

WHERE dept_name='Accounting';

6.6 Tugas
1. Buat tabel copy_instructor_nim dengan struktur tabel yang sama dengan tabel instructor .
2. Tambahkan baris data berikut pada tabel copy_instructor_nim
ID name dept_name salary

11111 Jean Psychology 234578

11112 Bill Comp. Sci. 98720

11113 Bob Languages 76090

11114 David Physics 56734

11115 Neil Astronomy 102378

3. Ubah nama yang terdapat pada row ke-4 menjadi Donald.


4. Ubah semua salary menjadi 95000.
5. Delete instructor dengan nama Bob.
6. Tambahkan baris data baru pada tabel copy_instructor_nim dengan menggunakan data pada tabel
instructor yang salary-nya lebih dari 100000.
7. Periksa hasilnya dengan menampilkan/mengambil semua isi tabel.
Modul 7 : Menampilkan Data Dari Banyak Tabel

7.1 Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
a. 10 menit untuk penjelasan singkat tentang modul
b. 100 menit untuk pengayaan
c. 60 menit pembahasan

7.2 Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Dapat menulis statement SELECT yang mengakses data ke lebih dari satu tabel dengan
menggunakan operator JOIN.
2. Menampilkan data yang tidak memenuhi kondisi JOIN dengan menggunakan operator OUTER
JOIN.
3. Melakukan JOIN terhadap tabel itu sendiri (self join).

7.3 Alat & Bahan


1. Komputer

7.4 Dasar Teori


Penggabungan Tabel dengan JOIN
Perintah SELECT sederhana pada SQL merupakan perintah untuk memilih satu atau lebih kolom
yang terdapat pada satu tabel. Kesulitan meningkat adalah ketika perintah SELECT menggunakan tabel
sebanyak dua atau lebih tabel sebagai sumber data yang ingin ditampilkan. Hal ini membuat banyak
kemungkinan mengenai hasil akhir yang di dapat. Ada dua tipe penggabungan tabel pada perintah SQL:

1. Inner join
2. Outer join

7.5 Prosedur Praktikum


7.5.1 INNER JOIN
Inner join adalah bentuk penggabungan yang paling sering digunakan pada perintah SQL. Inner join
dapat diklasifikasikan ke dalam bentuk:

7.5.1.1 Equi-Join
Bentuk ini digunakan ketika dua tabel digabungkan berdasarkan kesamaan kolom yang telah
ditentukan. Penggunaan equi-join ini sebenarnya sama dengan Cartesian product. Misalnya dari relasi
berikut.

Student Department

Gambar 7.1 Contoh record pada relasi student dan department


Apaila kita ingin menampilkan nama siswa beserta nama program studi, dengan melakukan join pada relasi
student dan department pada atribut dept_name yang sama-sama ada pada relasi student dan
department, maka query equi-join yang kita berikan sebagai berikut:
SELECT student.name, department.dept_name

FROM student, department

WHERE student.dept_name=department.dept_name

Gambar 7.2 Hasil equi-join yang berasal dari relasi student dan department

7.5.1.2 Menggunakan JOIN ON


Join On merupakan operasi inner join pada dua tabel atau lebih. Pada operasi inner join kita juga
bisa menambahkan klausa WHERE. Misalnya kita ingin menampilkan nama siswa beserta nama program
studi, dengan melakukan join pada relasi student dan department pada atribut dept_name yang sama-
sama ada pada relasi student dan department, dengan syarat hanya nama program studi ”Accounting”
yang ditampilkan, maka query equi-join yang kita berikan sebagai berikut:
SELECT student.name, department.dept_name

FROM student join department

ON student.dept_name=department.dept_name

WHERE department.dept_name='Accounting';

Gambar 7.3 Hasil join on

7.5.1.3 Menggabungkan Lebih Dari Dua Tabel


Untuk menggabungkan lebih dari 2 tabel, kita bisa menggunakan query seperti berikut. Misalnya
kita ingin menampilkan nama siswa (name), nama program studi (dept_name), dan course_id dengan
melakukan join pada relasi student, department dan course, atribut dept_name adalah atribut yang sama-
sama ada pada ketiga relasi tersebut.

SELECT A.name, B.dept_name, C.course_id


FROM student A, department B, course C

WHERE A.dept_name=B.dept_name and C.dept_name=B.dept_name

Gambar 7.4 Hasil join 3 tabel

7.5.1.4 Cross Join


Cross join merupakan penggabungan dari tabel menggunakan metode Cartesian product
sederhana, contohnya adalah sebagai berikut.
SELECT *

FROM student, department

Gambar 7.5 Hasil cross join

7.5.2 OUTER JOIN


Outer join merupakan bentuk penggabungan khusus yang digunakan pada perintah SQL. Pada outer
join, tabel pertama yang ditentukan pada perintah SQL pada klausa FROM, ditandai sebagai tabel KIRI dan
tabel selain itu ditandai sebagai tabel KANAN. Outer join dibagi menjadi tiga tipe yaitu left, right, dan full
outer join.
Gambar 7.6 Perbedaan tipe outer join

7.5.2.1 LEFT OUTER JOIN


Pada left outer join, hasil akhir merupakan perpaduan (union) dari hasil akhir equi-join, termasuk
beberapa baris dari tabel KIRI yang tidak cocok. Berikut merupakan contoh query serta pengembaliannya
dari left outer join:
SELECT *

FROM course left outer join prereq

ON course.course_id=prereq.course_id

Gambar 7.7 Hasil Left Outer Join

7.5.2.2 RIGHT OUTER JOIN


Pada right outer join, hasil akhir merupakan perpaduan (union) dari hasil akhir equi-join, termasuk
beberapa baris dari tabel KANAN yang tidak cocok. Berikut merupakan contoh query serta
pengembaliannya dari right outer join:
SELECT *

FROM course right outer join prereq

ON course.course_id=prereq.course_id

Gambar 7.8 Hasil right outer join

7.5.2.3 FULL OUTER JOIN


Pada full outer join, hasil akhir merupakan perpaduan (union) dari hasil akhir equi-join, termasuk
beberapa baris dari tabel KANAN dan KIRI yang tidak cocok. Berikut merupakan contoh query serta
pengembaliannya dari full outer join:
SELECT *

FROM course full outer join prereq

ON course.course_id=prereq.course_id

Gambar 7.9 Hasil full outer join

7.5.3 SELF JOIN


Terkadang sebuah tabel perlu di-join-kan dengan tabel itu sendiri. Pendekatan self join jarang sekali
digunakan. Kata kunci self join bisa menggunakan alias, pada relasi takes.

SELECT *

FROM takes A join takes B

ON A.ID=B.ID and A.course_id=B.course_id


WHERE A.ID=10033 and A.course_id=338 and A.year < B.year

Contoh query di atas digunakan untuk mencari kuliah dengan course_id 338 yang diambil oleh siswa
dengan ID 10033 (tabel takes dengan alias A) dan diambil ulang pada semester/tahun berikutnya (tabel
takes dengan alias B).

Gambar 7.10 Contoh hasil self join

7.6 Tugas
1. Tampilkan semua nama student beserta nama department.
2. Tampilkan semua nama student beserta nama department yang memiliki total SKS (total credit) lebih
dari 100.
3. Tampilkan nama student dan nama instructor yang bekerja pada department yang sama
Modul 8 : Operator
8.1. Waktu Pelaksanaan Praktikum
Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

8.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Mahasiswa mengetahui operator-operator yang ada pada DBMS SQL Server.
2. Mahasiswa mengetahui kondisi apa yang mengharuskan penggunaan operator tertentu.
3. Mahasiswa memahami contoh-contoh kasus operator.

8.3. Alat Dan Bahan


1. Komputer

8.4. Dasar Teori


8.4.1 Operator
Operator adalah simbol yang menentukan suatu aksi yang dilakukan pada satu atau lebih expression.
Ada beberapa operator yang dapat digunakan dalam statement SQL, antara lain:
• Operator aritmetika • Operator String
• Operator penugasan (assignment) • Operator bitwise
• Operator logika • Operator compound
• Operator pembandingan • Operator set

8.4.2. Operator Aritmetika


Operator aritmetika adalah simbol yang digunakan untuk melakukan operasi terhadap atribut
(semisal atribut nilai dikalikan 0.5) bertipe numerik. Operator aritmetika antara lain + (penjumlahan), -
(pengurangan), * (perkalian) dan / (pembagian). Berikut ini adalah contoh penggunaan operator
aritmetika.

SELECT *, salary * 0.05 as tax, Salary - (salary*0.05) as paid


FROM instructor
Perintah di atas menampilkan gaji kotor, pajak (5% dari gaji), dan gaji yang dibayar (95% dari gaji
kotor) menggunakan operator aritmetika.
Berikut ini adalah contoh penggunaan operator aritmetika pada syarat.

SELECT *, salary * 0.05 as tax, Salary - (salary*0.05) as paid


FROM instructor
WHERE salary - (salary* 0.05) < 50000

Query di atas menampilkan instructor yang gaji bersihnya kurang dari 50.000.

8.4.3. Precedence dari Operator


Operator perkalian dan pembagian memiliki prioritas (precedence) lebih tinggi daripada
penambahan dan pengurangan.

SELECT *, 2 * salary + 300 as salary_with_bonus


FROM instructor

8.4.4. Penggunaan Tanda Kurung


Penggunaan tanda kurung memiliki prioritas paling tinggi dibandingkan precedence dengan operator
yang lain. Penggunaan tanda kurung ini dapat digunakan untuk mengubah prioritas dari suatu ekspresi.
Pada contoh query sebelumnya, maka operasi 2 * salary akan dilakukan terlebih dahulu baru kemudian
hasilnya + 300 atau sama dengan (2 * salary) + 300. Pada contoh berikut maka operasi (salary + 300) akan
dilakukan terlebih dahulu baru kemudian dikalikan 2.

SELECT *, 2 * (salary + 300) as salary_with_bonus


FROM instructor
8.4.5. Operator Compound
Operator compound mengeksekusi sejumlah operasi dan memberikan hasil dari nilai asal dengan
hasil operasi. Operator compound pada SQL Server antara lain:
1. += 2. %=
3. -= 4. &=
5. *= 6. ^=
7. /= 8. |=
Operator ini mirip dengan operator compound dalam pemrograman Java atau bahasa lain yang
sesuai.

8.4.6. Operator Pembandingan


Operator pembandingan digunakan untuk menguji apakah dua expression memberikan hasil yang
sama.

Operator Deskripsi Tipe Data

= Sama dengan Numerik, String

<> Tidak sama dengan Numerik, String


!= Tidak sama dengan

> Lebih dari Numerik

>= Lebih dari sama dengan Numerik

< Kurang dari Numerik

<= Kurang dari sama dengan Numerik

Perintah berikut digunakan untuk menampilkan semua course yang berada pada dept_name ‘Comp.
Sci’.
SELECT * FROM course
WHERE dept_name = 'Comp. Sci.'
Berikut ini adalah contoh lainnya untuk menampilkan suatu course dengan credit > 3
SELECT * FROM course
WHERE credits > 3

Contoh berikut adalah contoh untuk menampilkan kuliah yang memiliki course_id lebih dari 125.
SELECT * FROM course
WHERE course_id >= 125

8.4.7. Operator Logika


Operator logika digunakan untuk menguji kebenaran dari suatu kondisi yang menghasilkan nilai
Boolean TRUE, FALSE, atau UNKNOWN.
Operator Deskripsi Tipe Data

ALL TRUE jika semua himpunan pembandingan bernilai TRUE

AND TRUE jika kedua ekspresi Boolean bernilai TRUE

ANY TRUE jika salah satu dari himpunan pembandingan bernilai


TRUE
BETWEEN TRUE jika nilai berada di antara suatu rentang Numerik

EXISTS TRUE jika subquery menghasilkan baris record Array (numerik,


string)

IN TRUE jika operand sama dengan salah satu dari daftar Array (numerik,
ekspresi/tuple string)

LIKE TRUE jika sesuai dengan pola tertentu % atau _ String

NOT Kebalikan nilai dari operator Boolean apapun

OR TRUE jika salah satu ekspresi Boolean bernilai TRUE

SOME TRUE jika beberapa dari himpunan pembandingan bernilai


TRUE

Operator LIKE merupakan operator yang digunakan untuk tipe data String, bedanya jika ‘=’ itu
artinya sama persis, akan tetapi LIKE dapat digunakan untuk membandingkan dengan pola tertentu atau
sebagian string saja. Berikut ini adalah pola yang didukung oleh LIKE.

Wildcard Description Example


character

% Any string of zero or WHERE title LIKE '%computer%' finds all book titles with
more characters. the word 'computer' anywhere in the book title.

_ (underscore) Any single WHERE au_fname LIKE '_ean' finds all four-letter first
character. names that end with ean (Dean, Sean, and so on).

[] Any single WHERE au_lname LIKE '[C-P]arsen' finds author last


character within names ending with arsen and starting with any single
the specified range character between C and P, for example Carsen, Larsen,
([a-f]) or set Karsen, and so on. In range searches, the characters
([abcdef]). included in the range may vary depending on the sorting
rules of the collation.

[^] Any single WHERE au_lname LIKE 'de[^l]%' all author last names
character not starting with de and where the following letter is not l.
within the specified
range ([^a-f]) or set
([^abcdef]).

8.4.8. Syarat Dengan Satu Kondisi


Dalam contoh berikut, syarat yang terdapat pada klausa WHERE hanya berisi satu kondisi saja.
Contoh untuk mencari semua course yang berasal dari semua department (dept_name) yang mengandung
kata ‘eng’.
SELECT * FROM course
WHERE dept_name LIKE '%eng%'
8.4.9. Syarat Lebih Dari Satu Kondisi
Seringkali kita jumpai permasalahan yaitu syarat lebih dari satu kondisi. Oleh sebab itu SQL
menyediakan operator logika yang dapat digunakan untuk mengatasi permasalahan tersebut. Operator
logika yang dapat digunakan dalam SQL Server adalah AND, NOT, dan OR.
SELECT s.id, s.name, t.semester, t.year, c.title, t.grade
FROM takes t
JOIN student s ON t.ID=s.ID
JOIN course c ON t.course_id=c.course_id
WHERE s.name = 'colin' AND (t.grade='B' OR t.grade='A')

8.4.10. Conditional Operator Bertipe Array (IN, BETWEEN)


Adakalanya kita juga menjumpai syarat yang berupa suatu range tertentu. Sebagai contoh
menampilkan data nilai dengan syarat mulai 10 sampai 100. Bisa dibayangkan banyaknya ekspresi kalau
menggunakan OR, maka akan ada sebanyak elemen mulai 10 sampai 100. SQL menyediakan BETWEEN
untuk memudahkan permasalahan tersebut. Berikut ini adalah contoh penggunaan operator BETWEEN
dalam query.

SELECT s.id, s.name, t.semester, t.year, c.title, t.grade


FROM takes t
JOIN student s ON t.ID=s.ID
JOIN course c ON t.course_id=c.course_id
WHERE s.name = 'colin' AND year BETWEEN 2006 AND 2009
ORDER BY year ASC
Query di atas menampilkan nilai kuliah Colin mulai tahun 2006 sampai 2009.

Permasalahan lain yang juga dijumpai yaitu pembanding tidak hanya 2 tetapi sekumpulan
data/array. Berikut ini adalah contoh penggunaan IN dalam membandingkan dengan sekumpulan data.

SELECT s.id, s.name, t.semester, t.year, c.title, t.grade


FROM takes t
JOIN student s ON t.ID=s.ID
JOIN course c ON t.course_id=c.course_id
WHERE s.name = 'colin' AND t.grade IN ('A', 'A-', 'B+', 'C+')

Query di atas bertujuan untuk menampilkan semua nilai dari Colin yang bernilai 'A', 'A-', 'B+',
'C+'. Cara lain bisa dengan menggunakan logika OR akan tetapi hal tersebut akan sangat banyak ekspresi
sebanyak kemungkinan nilai. Penggunaan IN lebih lanjut dapat dijumpai pada materi Subquery.

8.4.11. Predicate
Predicate adalah ekspresi untuk mengevaluasi hasil berupa TRUE, FALSE, atau UKNOWN. Predicate
digunakan dalam kondisi pencarian pada klausa WHERE dan HAVING, kondisi join pada klausa FROM, dan
konstruksi lainnya yang memerlukan nilai Boolean.

Operator Deskripsi Tipe Data

CONTAINS Digunakan untuk pencarian full text atau indeks full text String

IS NULL Bernilai NULL -

IS NOT Bernilai Non-NULL -


NULL

Eksekusi perintah query berikut, untuk menambahkan data ke dalam tabel course.

INSERT INTO course (course_id, title) VALUES (1111, 'Sastra Jawa')


INSERT INTO course (course_id, title) VALUES (1112, 'Bahasa Daerah')

Dari hasil penambahan di atas untuk menampilkan data yang memiliki nilai NULL, contohnya:
SELECT * FROM course
WHERE dept_name IS NULL
Sebaliknya apabila mengunakan IS NOT NULL maka akan menampilkan semua data yang tidak berisi
NULL.

SELECT * FROM course


WHERE dept_name IS NOT NULL

8.4.12. Fungsi
Fungsi adalah sintaksis untuk memanggil fungsional tertentu pada SQL. Fungsi digunakan untuk
memudahkan dalam melakukan konversi, manipulasi data, dan fungsi-fungsi lain. Sintaksis penulisan fungsi:
function_name(column|expression, [arg1, arg2, …])

Pemanggilan fungsi dapat dilakukan di dalam klausa SELECT maupun WHERE atau HAVING.

8.4.13. Fungsi Karakter/String


Berikut ini adalah fungsi manipulasi string yang didukung oleh SQL Server.
ASCII LTRIM SOUNDEX

CHAR NCHAR SPACE

CHARINDEX PATINDEX STR

CONCAT QUOTENAME STRING_ESCAPE

DIFFERENCE REPLACE STRING_SPLIT

FORMAT REPLICATE STUFF

LEFT REVERSE SUBSTRING

LEN RIGHT UNICODE

LOWER RTRIM UPPER

Contoh pemanggilan fungsi UPPER untuk mengubah menjadi huruf kapital adalah sebagai berikut.
SELECT title, UPPER(title) as upper_title
FROM course

8.4.14. Fungsi Bilangan


Berikut ini adalah fungsi numerik yang didukung SQL Server.
ABS DEGREES RAND
ACOS EXP ROUND
ASIN FLOOR SIGN
ATAN LOG SIN
ATN2 LOG10 SQRT
CEILING PI SQUARE
COS POWER TAN
COT RADIANS

8.4.15. Fungsi Tanggal


Berikut ini fungsi tanggal yang didukung oleh SQL Server.
Function Return value Return Determinism
data type

CURRENT_TIMESTAMP Returns a datetime value that contains datetime Nondeterministic


the date and time of the computer on
which the instance of SQL Server is
running. The time zone offset is not
included.

GETDATE ( ) Returns a datetime value that contains datetime Nondeterministic


the date and time of the computer on
which the instance of SQL Server is
running. The time zone offset is not
included.

GETUTCDATE ( ) Returns a datetime value that contains datetime Nondeterministic


the date and time of the computer on
which the instance of SQL Server is
running. The date and time is returned as
UTC time (Coordinated Universal Time).

DATENAME ( Returns a character string that represents nvarchar Nondeterministic


datepart , date ) the specified datepart of the specified
date.

DATEPART ( Returns an integer that represents the int Nondeterministic


datepart , date ) specified datepart of the specified date.

DAY ( date ) Returns an integer that represents the day int Deterministic
day part of the specified date.

MONTH ( date ) Returns an integer that represents the int Deterministic


month part of a specified date.

YEAR ( date ) Returns an integer that represents the int Deterministic


year part of a specified date.

DATEDIFF ( datepart Returns the number of date or time int Deterministic


, startdate , datepart boundaries that are crossed
enddate ) between two specified dates.

DATEDIFF_BIG ( Returns the number of date or time bigint Deterministic


datepart , datepart boundaries that are crossed
startdate , between two specified dates.
enddate )

8.4.16. Fungsi COALESCE


Fungsi COALESCE digunakan untuk menampilkan suatu nilai default yang ditentukan apabila berisi
NULL. Fungsi ini tidak akan mengubah nilai NULL yang tersimpan dan tidak berpengaruh apabila isinya
bukan NULL.
SELECT course_id, title, COALESCE(dept_name, 'NO_DEPARTMENT') as dept_name, credits
FROM course

WHERE dept_name IS NULL

8.5. Latihan
1. Tampilkan data dari tabel course yang memiliki credits selain 3!
2. Tampilkan data dari tabel course yang memiliki course_id mulai 140 sampai ke atas!
3. Tampilkan data (dari join) student_id, nama, course, grade (dari tabel takes) dengan syarat
grade mengandung huruf “C” (bisa C/C+/C-) !

4. Modifikasi query untuk menampilkan semua nilai Colin semester spring dan tahun 2007 dan
2008!
5. Tampilkan gaji bersih instructor dengan pembulatan!
6. Tampilkan gabungan field name dan dept_name dari student menjadi bentuk “name is a
student of departement” (contoh Colin is student of Civil eng.) dengan salah satu fungsi string!
Modul 9 : Column Ffunction dan Grouping

9.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

9.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Menyebutkan fungsi kolom yang umum dalam MS SQL Server
2. Menggunakan fungsi kolom untuk menampilkan data

9.3. Alat Dan Bahan


1. Komputer

9.4. Dasar Teori


9.4.1. Fungsi Group
Fungsi kelompok (group) melakukan operasi pada dua atau lebih baris data dan memberikan satu
hasil per group. Tipe-tipe fungsi group yang bisa digunakan: AVG, COUNT, MAX, MIN, SUM.

9.4.2. Fungsi COUNT


Fungsi COUNT digunakan untuk menghasilkan nilai jumlah data (baris) dari sekelompok data tabel
maupun view. Sintaksis (cara penulisan) dari penggunaan fungsi group:
SELECT [DISTINCT] {*, column [alias] group_function(column)}

FROM table

[WHERE condition(s)]

[GROUP BY column]

Contoh untuk mencari jumlah total dari student adalah:


SELECT count(*) AS tot_students

FROM student;

9.4.3. Fungsi AVG dan SUM


Fungsi AVG digunakan untuk menghasilkan group nilai rata-rata sekelompok nilai dari sebuah field
numerik.
SELECT AVG(nama_field) FROM nama_tabel;

Contoh untuk mencari gaji (salary) rata-rata dari instructor adalah.


SELECT avg(salary) ASavg_salary
FROM Instructor;

Fungsi SUM ini digunakan untuk menghasilkan nilai total jumlah sekelompok dari sebuah kolom.
SELECT SUM(nama_field) FROM nama_tabel;
Contoh untuk mencari jumlah total semua gaji (salary) dari instructor.
SELECT sum(salary) AS sum_salary

FROM Instructor;

9.4.4. Fungsi MIN dan MAX


Fungsi MIN digunakan untuk menghasilkan nilai terendah dari sekelompok data dalam sebuah kolom.
SELECT MIN(nama_field) FROM nama_tabel;
Contoh mencari gaji terendah dari instructor:
SELECT min(salary) AS min_salary

FROM Instructor;

Fungsi MAX digunakan untuk menghasilkan nilai tertinggi dari sekelompok data dalam sebuah kolom.
SELECT MAX(nama_field) FROM nama_tabel;

Contoh mencari gaji tertinggi dari instructor:


SELECT max(salary) AS max_salary FROM Instructor;

9.4.5. Mengelompokkan Data dengan GROUP BY


Perintah yang digunakan untuk mengelompokan beberapa data pada perintah SELECT.
SELECT nama_kolom, agregasi(nama_kolom)

FROM (nama_tabel)

GROUP BY nama_kolom;

Contohnya:
1. Mencari banyak student tiap-tiap department.
SELECT dept_name, count(*) AS student_count

FROM student

GROUP BY dept_name

2. Mencari rerata gaji instructor tiap-tiap department.


SELECT dept_name, AVG(salary) AS avg_salary

FROM Instructor

GROUP BY dept_name;

9.4.6. Klausa HAVING


Fungsi HAVING berkaitan dengan GROUP BY dan AGREGASI. biasanya digunakan untuk menentukan
kondisi tertentu pada GROUP BY dan kondisi tersebut berkaitan dengan fungsi agregasi. Fungsi ini memiliki
kemiripan dengan WHERE dalam penggunaannya. HAVING digunakan dalam SQL karena WHERE tidak dapat
digunakan dengan fungsi agregasi.
SELECT atribut

FROM nama_tabel

GROUP BY atribut
HAVING fungsi_agregasi;

9.4.7. Fungsi Karakter/String


Contoh mengambil department dan jumlah student yang berada di department “Engineering”
(berakhiran “Eng.”)
SELECT dept_name, count(*) as number_student

FROM student

GROUP BY dept_name

HAVING RIGHT(dept_name, 4) = 'Eng.';

9.4.8. Fungsi Bilangan


Contohnya mencari department dan rerata gaji dari department yang memiliki rerata gaji lebih dari
70.000.
SELECT dept_name, AVG(salary) avg_salary

FROM Instructor

GROUP BY dept_name

HAVING AVG(salary) >70000;

9.4.9. Fungsi Tanggal


Fungsi tanggal merupakan fungsi untuk mengambil sebagian data dari kolom bertipe DATE dan
TIMESTAMP. Sebagai contoh, kita bisa menggunakan fungsi YEAR() untuk mengambil bagian tahun.
Contohnya:
SELECT YEAR(CURRENT_TIMESTAMP) AS Tahun_skrg;

SELECT YEAR(GETDATE()) AS Tahun_skrg;


SELECT MONTH(CURRENT_TIMESTAMP) AS Bulan_skrg;

SELECT MONTH(GETDATE()) AS Bulan_skrg;

SELECT DAY(CURRENT_TIMESTAMP) AS Tgl_skrg;

SELECT DAY(GETDATE()) AS Tgl_skrg;

9.5. Latihan
1. Dapatkan banyaknya student yang memiliki total credit > 100 tiap-tiap department.
2. Dapatkan course_id dan banyak student yang mengambil masing-masing course tersebut pada
tahun 2006.
Modul 10 : Union, Intersection, Difference

10.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

10.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami operasi union
2. Memahami operasi intersection
3. Memahami operasi difference

10.3. Alat Dan Bahan


1. Komputer

10.4. Dasar Teori


10.4.1. Operasi Union
Operasi union atau gabungan dari himpunan A dan B dalam teori himpunan adalah gabungan
semua anggota A atau semua anggota B atau keduanya. Ilustrasi himpunan A yang digabungkan dengan
himpunan B adalah sebagai berikut.

A B

Gambar 10.1. Ilustrasi operasi union A ∪ B

10.4.1.1 UNION
Union (operatornya adalah UNION) merupakan operasi menggabungkan dua data set yang memiliki
kolom dengan definisi dan urutan yang sama. Apabila ada duplikasi data (data yang sama) maka hanya
dimunculkan sekali.
Contoh operasi union adalah sebagai berikut.
SELECT building, room_number FROM dbo.classroom WHERE building like 'A%'

UNION

SELECT building,room_number FROM dbo.section WHERE room_number like '7%'

Dari sintaksis tersebut akan ditampilkan building dan room_number yang memiliki awalan A dan
awalan 7.
Contoh lain adalah sebagai berikut.
SELECT ID, course_id, semester FROM takes

WHERE ID = 10033 and course_id between 300 and 410

UNION

SELECT ID, course_id, semester FROM takes

WHERE ID = 10454 and course_id between 450 and 500

10.4.1.2. UNION ALL


Serupa dengan union, operator UNION ALL juga menggabungkan dua himpunan data, namun
UNION ALL akan menampilkan seluruh himpunan data yang digabung walaupun hal itu menyebabkan
duplikasi data.
Contoh operasi UNION ALL adalah sebagai berikut.
SELECT ID, course_id, semester FROM takes
WHERE ID = 10033
UNION ALL
SELECT ID, course_id, semester FROM takes
WHERE ID = 10454
Dari sintaksis tersebut akan ditampilkan seluruh ID, course_ID, semester yang dari student ID 10033
dan 10454 tanpa memperhatikan duplikasi data.
Contoh di atas menghasilkan student 10033 yang memiliki duplikasi data pada course_id 338, 408
dan student 10454 yang memiliki duplikasi data pada course_id 468.

10.4.2. Operasi Intersection


Operasi intersection atau irisan dari himpunan A dan B dalam teori himpunan adalah semua
anggota A yang juga anggota B (atau kebalikannya). Ilustrasi himpunan A yang diiriskan dengan himpunan B
adalah sebagai berikut.

A A∩B B

Gambar 10.2. Ilustrasi operasi intersection A ∩ B

10.4.2.1. INTERSECT
Intersection (operatornya adalah INTERSECT) merupakan operasi irisan himpunan yang
menghasilkan result set berupa data-data yang sama dari beberapa himpunan data yang diiriskan. Contoh
berikut mengambil student beserta course yang diambil hanya tahun 2005 dan diiriskan dengan student
beserta course yang diambil course pada semester “Fall” semua tahun.
SELECT ta.ID, s.name, s.dept_name, ta.course_id, c.title, ta.semester, ta.year,
ta.grade FROM takes ta
join student s on s.ID=ta.ID
join course c on c.course_id=ta.course_id
WHERE ta.year = 2005
INTERSECT
SELECT ta.ID, s.name, s.dept_name, ta.course_id, c.title, ta.semester, ta.year,
ta.grade FROM takes ta
join student s on s.ID=ta.ID
join course c on c.course_id=ta.course_id
WHERE ta.semester = 'Fall'
Dari sintaksis di atas maka menghasilkan student beserta course pada tahun 2005 pada semester
“Fall”.
10.4.3. Operasi Difference
Operasi difference atau selisih dari himpunan A dan B adalah himpunan yang anggotanya semua dari
A tetapi bukan anggota B. Ilustrasi himpunan A yang diselisihkan dengan himpunan B adalah sebagai
berikut.

A\B B

Gambar 10.3. Ilustrasi operasi difference A \ B

Operasi difference pada SQL Server adalah operasi except (operatornya adalah EXCEPT) merupakan
operasi yang menghasilkan hasil kembalian berupa himpunan yang merupakan data-data dari set pertama
diselisihkan data-data dari himpunan kedua. Contoh berikut mengambil student beserta course yang
diambil hanya tahun 2005 yang bukan dengan student beserta course yang diambil course pada semester
“Fall” semua tahun.
SELECT ta.ID, s.name, s.dept_name, ta.course_id, c.title, ta.semester, ta.year,
ta.grade FROM takes ta
join student s on s.ID=ta.ID
join course c on c.course_id=ta.course_id
WHERE ta.year = 2005
EXCEPT
SELECT ta.ID, s.name, s.dept_name, ta.course_id, c.title, ta.semester, ta.year,
ta.grade FROM takes ta
join student s on s.ID=ta.ID
join course c on c.course_id=ta.course_id
WHERE ta.semester = 'Fall'

Dari sintaksis di atas maka menghasilkan student beserta course pada tahun 2005 namun bukan
yang berada di semester “Fall”.

10.4.4. Operasi Gabungan Dari UNION, INTERSECTION, dan DIFFERENCE


Untuk menyelesaikan kasus tertentu, kita dapat menggabungkan operasi UNION, INTERSECT, maupun
EXCEPT. Contoh berikut adalah query untuk mengambil student yang mengambil course pada year 2003 dan
2005 tapi bukan semester Fall.
SELECT * FROM takes ta
JOIN student s ON s.ID=ta.ID
WHERE s.dept_name = 'Accounting' and year = 2003
union
SELECT * FROM takes ta
JOIN student s ON s.ID=ta.ID
WHERE s.dept_name = 'Accounting' and year = 2005
except
SELECT * FROM takes ta
JOIN student s ON s.ID=ta.ID
WHERE s.dept_name = 'Accounting' and semester = 'Fall'
Query di atas bisa saja dioptimasikan dengan cara lain ekuivalensinya tanpa menggunakan operasi
union, except, tapi adakalanya suatu query nanti tidak punya query yang ekuivalen.

10.5. Latihan
1. Tampilkan ID, semester, dan course ID yang memiliki ID depan 10, grade-nya A dan tahun ajaran
2002.
2. Tampilkan dept_name yang memiliki salary dari instructor lebih besar dari 54000 dan credit dari
course-nya lebih dari 3.
Modul 11 : Subquery SQL

11.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

11.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Menggambarkan tipe persoalan yang dapat dipecahkan oleh subquery
2. Mendefinisikan subquery
3. Memahami tipe-tipe subquery
4. Menulis subquery baris tunggal dan baris berganda

11.3. Alat Dan Bahan


1. Komputer

11.4. Dasar Teori


11.4.1. Sub Query Untuk Menyelesaikan Masalah
Pengertian subquery, nested query akan dijelaskan melalui ilustrasi berikut ini: "Misal kita ingin
membuat suatu query untuk mencari gaji semua instructor yang lebih besar dari gaji yang dimiliki oleh
instructor bernama ‘Moreira’. Untuk memecahkan persoalan ini, kita membutuhkan dua query, satu query
untuk mencari gaji yang dimiliki oleh Moreira dan satu query lagi untuk mencari instructor yang memiliki
gaji lebih besar daripada gaji Moreira.

11.4.2. Sub Query


Sebuah subquery adalah query yang bersarang dalam sebuah pernyataan SELECT, INSERT, UPDATE
atau DELETE, atau berada dalam subquery yang lain. Sebuah subquery dapat digunakan di mana saja
ekspresi diperbolehkan jika ia mengembalikan nilai tunggal. Sebuah subquery disebut juga sebagai inner
query atau inner select, sedangkan pernyataan yang mengandung subquery disebut juga dengan outer query
atau outer select. Inner query akan menghasilkan suatu nilai yang nantinya dipakai oleh outer query. Query
SELECT dari subquery harus selalu berada dalam tanda kurung.

SELECT * FROM instructor WHERE salary > outer query


(
SELECT salary FROM instructor WHERE name='Moreira'
inner query
)
11.4.3. Penempatan Sub Query
Subquery dapat diletakkan di klausa SELECT, di klausa FROM atau di klausa WHERE.

11.4.3.1. Sub Query di Klausa SELECT


Contoh: Menggunakan subquery untuk menampilkan id, name dan jumlah course yang telah diambil oleh
student.
SELECT id, name, (SELECT COUNT(*) FROM takes t WHERE t.id=s.id) AS course_count

FROM student s

11.4.3.2. Sub Query di Klausa FROM


Contoh: Menggunakan subquery untuk menampilkan id, name, min_score (nilai course terendah) dan
max_score (nilai course tertinggi) dari setiap student.
SELECT a.id, name, min_score, max_score
FROM (SELECT id, MIN(score) AS min_score, MAX(score) AS max_score
FROM takes GROUP BY id) a, student s
WHERE a.id = s.id

11.4.3.3. Sub Query di Klausa WHERE


Contoh: Menggunakan subquery untuk menampilkan instructor yang memiliki gaji di atas rata-rata.
SELECT * FROM instructor WHERE salary > (SELECT AVG(salary) FROM instructor)

11.4.4. Petunjuk Penggunaan Sub Query


Berikut beberapa petunjuk dari penggunaan subquery:
• Letakkan subquery di dalam tanda kurung
• Tempatkan subquery pada sisi kanan dari kondisi perbandingan
• Klausa ORDER BY dalam subquery tidak diperlukan jika yang dibentuk adalah Top-N analysis.
• Gunakan operator baris tunggal dengan subquery baris tunggal dan operator baris ganda
dengan subquery baris ganda.

11.4.5. Tipe-Tipe Sub Query


Beberapa tipe dari subquery:
• Single row, subquery baris tunggal
• Multiple-row, subquery baris ganda
• Correlated subquery

11.4.5.1. Sub Query Baris Tunggal


Single row subquery memberikan hasil hanya satu baris data (scalar value). Untuk single row
subquery ini yang digunakan adalah operator perbandingan: = , > , >= , < , <= , atau <>. Semua contoh
subquery di atas merupakan subquery baris tunggal.

11.4.5.2. Sub Query Baris Ganda


Multiple row subquery adalah subquery yang menghasilkan lebih dari satu baris. Untuk multiple row
subquery ini operator perbandingan yang dapat digunakan antara lain: IN/ NOT IN, ANY, ALL atau EXIST/
NOT EXIST.

11.4.5.3. Sub Query dengan Operator IN/ NOT IN


Operator IN mengambil output dari inner query yang mana bisa saja 0 atau lebih nilai yang akan
dikirim ke outer query. Outer query akan mem-fetch semua baris yang match.
Contoh: Menggunakan subquery untuk menampilkan semua course yang memiliki section lebih dari
satu.
SELECT * FROM course
WHERE course_id IN (
SELECT course_id FROM section
GROUP BY course_id HAVING COUNT(sec_id) >1
)

11.4.5.4. Sub Query dengan Operator EXISTS/NOT EXISTS


Kata kunci EXISTS hanya menghasilkan nilai Boolean [TRUE/FALSE]. Klausa WHERE dari outer query
menguji apakah subquery menghasilkan baris data atau tidak (TRUE jika menghasilkan baris data/FALSE jika
tidak menghasilkan baris data sama sekali). Subquery dengan EXIST tidak memproduksi data apapun, selain
TRUE/FALSE.
Contoh: Menggunakan subquery untuk menampilkan semua course yang tidak memiliki prerequisite.
SELECT * FROM course a WHERE NOT EXISTS (
SELECT * FROM prereq b WHERE b.course_id=a.course_id
)

11.4.5.5. Correlated Sub Query


Kebanyakan subquery dieksekusi sekali dan hasilnya akan menggantikannya nilai atau nilai-nilai yang
dihasilkan dalam klausa WHERE dari outer query. Pada query yang melibatkan correlated subquery (juga
dikenal sebagai repeating subquery), subquery bergantung pada outer query untuk nilai-nilainya. Ini berarti
bahwa subquery dieksekusi berulang kali, sekali untuk setiap baris yang mungkin terpilih oleh outer query.
Sebuah correlated subquery memerlukan sebuah nilai dari outer query sebagai bagian dari inner query (data
dari setiap baris di main query di-passing ke subquery untuk diproses).Contoh: Menggunakan subquery
untuk menampilkan instructor yang memiliki gaji di atas rata-rata gaji dalam satu department yang sama.
SELECT name, dept_name, salary
FROM instructor a
WHERE salary > (
SELECT AVG(salary) FROM instructor b WHERE b.dept_name=a.dept_name
)

11.5. Latihan
Buat subquery untuk:
1. Menampilkan instructor yang belum pernah mengajar!
2. Menampilkan course yang pernah diajar setidaknya 2 instructor!
3. Menampilkan student yang paling banyak mendapat nilai A!
Modul 12 : Transaction

12.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

12.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami transaksi (transaction) dalam DBMS
2. Membuat query transaksi (transaction) dalam tugas tertentu

12.3. Alat Dan Bahan


1. Komputer

12.4. Dasar Teori


12.4.1. Transaction
Transaction adalah suatu satu kesatuan unit eksekusi tugas. Apabila suatu transaksi atau transaction
berhasil, maka semua modifikasi data yang dilakukan selama transaction akan di-commit dan perubahannya
tersimpan secara permanen di dalam basis data. Sebaliknya, apabila suatu transaksi mengalami kegagalan
(error) dan harus dibatalkan atau di-rollback, maka semua modifikasi harus dihapus. Singkatnya dalam
transaksi, perubahannya sukses terjadi atau tidak sama sekali tidak boleh setengah-setengah.

12.4.2. Membuat Transaksi Dengan BEGIN TRANSACTION


Untuk membuat suatu transaksi digunakan sintaksis
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
Adanya sintaksis BEGIN TRAN atau BEGIN TRANSACTION di atas menandakan bahwa transaction
dibuat secara explicit dan membuat lock pada suatu tabel hingga suatu transaction berhasil terjadi (di-
commit) atau gagal dan dibatalkan (di-rollback). Semua perintah setelah BEGIN TRAN atau BEGIN
TRANSACTION akan dieksekusi namun perubahannya masih belum permanen tersimpan sampai dilakukan
commit (atau rollback bila batal). Apabila ingin melakukan modifikasi yang banyak dalam suatu basis data
(INSERT, UPDATE, DELETE) biasakan untuk membuat transaction supaya masih bisa dilakukan penggagalan
perubahan apabila ada kesalahan. Pada contoh berikut, gunakan query berikut untuk melihat advisor
(pembimbing akademik) dari student bernama Manber.
SELECT * FROM advisor a
JOIN student s ON s.ID=a.s_ID
JOIN instructor i ON i.ID=a.i_ID
WHERE s.name='Manber' OR i.name = 'Bill'
Dapat dilihat dari hasil query, advisor dari Manber adalah Yazdi.

Pada contoh transaksi berikut, instructor baru bernama Bill ditambahkan ke tabel instructor dan
advisor (dosen pembimbing akademik) dari Manber digantikan oleh Bill di tabel advisor. Perubahan ini
dalam satu kesatuan tugas yang tidak terpisahkan.
BEGIN TRANSACTION
INSERT INTO instructor VALUES(99999, 'Bill', 'Comp. Sci.', 120000);
UPDATE advisor SET i_ID = (
SELECT ID FROM instructor
WHERE name = 'Bill')
where s_ID = (
SELECT ID FROM student
WHERE name = 'Manber'
);

Untuk melihat hasilnya maka gunakan query berikut.


SELECT * FROM instructor WHERE name = 'Bill';
SELECT * FROM advisor a
JOIN student s ON s.ID=a.s_ID
JOIN instructor i ON i.ID=a.i_ID
WHERE s.name='Manber' OR i.name = 'Bill';

Dari hasil query di atas, dapat dilihat instructor baru bernama Bill ditambahkan ke tabel instructor
dan advisor dari student Manber diubah menjadi Bill.
CATATAN

Suatu transaksi akan selalu menunggu commit atau rollback. Commit digunakan untuk menyimpan
perubahan secara permanen di dalam basis data. Rollback digunakan untuk menggagalkan perubahan yang
dilakukan transaksi ke keadaan semula sebelum terjadi BEGIN TRAN.

12.4.3. Membatalkan Transaksi Dengan ROLLBACK TRANSACTION


Rollback digunakan untuk menggagalkan transaksi. Sintaksis untuk menggagalkan transaksi adalah
sebagai berikut.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Pada contoh di atas, misalkan untuk menggagalkan perubahan advisor dari Manber maka
tambahkan dan jalankan perintah berikut.
ROLLBACK TRANSACTION
Untuk mengecek apakah perubahan pada transaksi sebelumnya digagalkan jalankan perintah berikut.
SELECT * FROM instructor WHERE name = 'Bill';
SELECT * FROM advisor a
JOIN student s ON s.ID=a.s_ID
JOIN instructor i ON i.ID=a.i_ID
WHERE s.name='Manber' OR i.name = 'Bill';

Dari hasil rollback dapat dilihat bahwa penambahan instructor dan pengubahan advisor akan
digagalkan semuanya. Apabila rollback dijalankan kembali maka akan muncul pesan bahwa rollback tidak
dapat dijalankan karena tidak ada transaction yang sedang berlangsung.
ROLLBACK TRANSACTION

12.4.5. Menjalankan Transaksi Dengan COMMIT TRANSACTION


Commit digunakan untuk menandakan keberhasilan suatu transaction dan menyimpan perubahan di
basis data secara permanen. Sintaksis untuk melakukan commit transaksi adalah sebagai berikut.
COMMIT [ { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Misalnya pada query transaction sebelumnya dijalankan ulang dan ditambahkan baris COMMIT TRAN
atau COMMIT TRANSACTION maka semua perubahannya akan disimpan secara permanen. Transaksi yang
sudah di-commit tidak lagi bisa di-rollback.
BEGIN TRANSACTION
INSERT INTO instructor VALUES(99999, 'Bill', 'Comp. Sci.', 120000);
UPDATE advisor SET i_ID = (
SELECT ID FROM instructor
WHERE name = 'Bill')
where s_ID = (
SELECT ID FROM student
WHERE name = 'Manber'
);
COMMIT TRANSACTION;
Apabila dicek dengan query berikut maka hasilnya sudah tersimpan secara permanen.
SELECT * FROM instructor WHERE name = 'Bill';
SELECT * FROM advisor a
JOIN student s ON s.ID=a.s_ID
JOIN instructor i ON i.ID=a.i_ID
WHERE s.name='Manber' OR i.name = 'Bill';
12.4.6. Nested Transaction
SQL Server memungkinkan untuk melakukan transaksi bersarang (nested transaction), yang mana
dalam blok transaksi dapat berisi blok transaksi. Melalui cara ini suatu blok transaksi baru dapat dijalankan
meskipun blok transaksi sebelumnya belum selesai. Transaksi bersarang dilakukan dengan membuat BEGIN
TRAN di dalam BEGIN TRAN.
Variabel @@TRANCOUNT merupakan variabel di server untuk menyimpan tingkat kedalaman sarang
(level of nesting). @@TRANCOUNT bernilai 0 berarti tidak ada blok transaksi bersarang, 1 menandakan ada 1
blok tingkat kedalaman sarang, dst. Ketika transaksi explicit dibuat, maka @@TRANCOUNT otomatis bertambah,
dari 0 menjadi 1. Apabila dalam transaksi dilakukan COMMIT maka nilai @@TRANCOUNT akan berkurang satu,
misalnya dari 2 ke 1 (apabila ada dua tingkat), 1 ke 0 (apabila ada 1 tingkat). Apabila dalam transaksi ada
ROLLBACK maka nilai akan @@TRANCOUNT berkurang menjadi 0 (tidak peduli berapa pun tingkatnya). Ilustrasi
perubahan @@TRANCOUNT ditunjukkan pada gambar berikut

(a) (b)

Gambar Ilustrasi perubahan @@TRANCOUNT pada transaksi

Pada gambar ditunjukkan bahwa tiap perintah COMMIT akan mengurangi nilai @@TRANCOUNT
dengan satu, sedangkan satu perintah ROLLBACK akan me-rollback seluruh transaksi. Contoh ilustrasi
transaksi nested adalah sebagai berikut.
SELECT 'Before BEGIN TRAN', @@TRANCOUNT
BEGIN TRAN
SELECT 'After BEGIN TRAN', @@TRANCOUNT
DELETE advisor
PRINT 'DELETE ALL advisor'
BEGIN TRAN nested
SELECT 'After BEGIN TRAN nested', @@TRANCOUNT
DELETE instructor
PRINT 'DELETE ALL instructor'
COMMIT TRAN nested;
SELECT 'After COMMIT TRAN nested', @@TRANCOUNT
ROLLBACK TRAN
SELECT 'After COMMIT TRAN nested', @@TRANCOUNT
SELECT * FROM advisor
PRINT 'SELECT ALL advisor'
SELECT * FROM instructor
PRINT 'SELECT ALL instructor'

Hasil eksekusi dari transaksi di atas adalah sebagai berikut.

12.4.7. Penanganan Kesalahan (Error)


Penanganan kesalahan menggunakan mulai SQL Server 2008 menggunakan blok TRY…CATCH.
Sekelompok perintah atau statement dijalankan di dalam blok TRY. Apabila ada kesalahan yang terjadi di
blok TRY, maka kendali akan dikirimkan ke statement di dalam blok CATCH. Sintaksis untuk penanganan
kesalahan exception adalah sebagai berikut.
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
Untuk mengetahui kode kesalahan gunakan variabel server @@ERROR. Selain @@ERROR untuk
mengetahui kode kesalahan gunakan fungsi ERROR_NUMBER(), untuk mengetahui pesan kesalahannya
gunakan fungsi ERROR_MESSAGE(). Berikut ini adalah contoh untuk mengetahui apabila ada kesalahan
dalam suatu query dan memberitahukan nomor kesalahan dan pesan kesalahan yang terjadi.
BEGIN TRY
INSERT INTO instructor VALUES(99999, 'Mark', 'Comp. Sci.', 120000)
END TRY
BEGIN CATCH
--PRINT digunakan untuk mencetak di console/Messages
--CAST digunakan untuk type cast dari suatu tipe data ke tipe data lain
--CAST di bawah contoh untuk mengubah @@ERROR (INTEGER) menjadi NVARCHAR(255)
PRINT 'Kode error = '+ CAST(@@ERROR AS NVARCHAR(255))
PRINT ERROR_MESSAGE()
END CATCH
Apabila query INSERT di atas dijalankan dan perintah-perintah sebelumnya sudah dijalankan maka
akan terjadi error karena dari query sebelumnya instructor dengan ID 99999 sudah ada, yaitu instructor
bernama Bill. Hasil query di atas adalah sebagai berikut.

12.4.8. Penanganan Kesalahan (Error) Dalam Transaksi


Untuk menangani kesalahan (error) yang mungkin terjadi dalam suatu transaksi (yang kita tidak
ketahui kapan bisa terjadi) maka transaksi dapat dibungkus dalam blok penanganan kesalahan (error
handling). Dengan cara ini maka dapat dipastikan suatu transaksi apabila berhasil akan di-commit, bila tidak
maka gagalkan dengan di-rollback.
BEGIN TRANSACTION
BEGIN TRY
PRINT 'BEFORE INSERT 1'
INSERT INTO instructor VALUES(100000, 'Steve', 'Comp. Sci.', 120000)
PRINT 'AFTER INSERT 1'
PRINT 'BEFORE INSERT 2'
INSERT INTO instructor VALUES(99999, 'Mark', 'Comp. Sci.', 120000)
PRINT 'AFTER INSERT 2'
UPDATE advisor SET i_ID = (
SELECT ID FROM instructor
WHERE name = Mark)
where s_ID = (
SELECT ID FROM student
WHERE name = 'Manber'
)
PRINT 'AFTER UPDATE'
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRANSACTION;
END
END TRY
BEGIN CATCH
PRINT 'Error occurred: Rollback all.'
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRAN
END
END CATCH
Pada contoh query di atas statement INSERT pertama berhasil dijalankan namun pada INSERT
kedua terjadi kesalahan karena sudah ada instructor dengan ID 99999. Adanya kesalahan di dalam blok TRY
untuk transaksi menyebabkan blok CATCH dijalankan dan melakukan ROLLBACK transaksi. Apabila
instructor dengan ID 99999 tidak ada (sehingga berhasil ditambahkan ke tabel instructor) dan transaksi
berhasil COMMIT, maka berikut ini adalah hasil dari query di atas.

12.5. Latihan
Buat transaksi dengan ketentuan perintah-perintah berikut.
1. Tambahkan data kuliah baru (course dengan nama “Game Programming”) beserta nilainya (ke tabel
takes) oleh student bernama “Manber” menggunakan subquery dengan ketentuan:
• Tabel takes hanya berisi ID student sehingga pengisian ID Student dari “Manber” harus
dilakukan melalui subquery (tidak dengan cara mengisikan ID secara langsung/hard code).
• Tabel takes hanya berisi ID course sehingga pengisian ID Course dari “Game Programming”
harus dilakukan melalui subquery (tidak dengan cara mengisikan ID secara langsung/hard
code).

2. Apabila data kuliah baru berhasil ditambahkan maka update total credit (tot_cred) pada tabel student
sesuai SKS (credit) dari “Game Programming” melalui. Untuk mengetahui banyak SKS yang
ditambahkan gunakan subquery.
Bungkus transaksi di atas dalam error handling TRY…CATCH.
Modul 13 : Dasar Pemrograman T-SQL

13.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

13.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami dasar pemrograman T-SQL seperti deklarasi variabel, penugasan variabel, seleksi
kondisi, iterasi
2. Membuat stored procedure dan user defined function (UDF)

13.3. Alat Dan Bahan


1. Komputer

13.4. Dasar Teori


13.4.1. Dasar Pemrograman T-SQL
Bab ini berisi dasar-dasar pemrograman pada DBMS. Tiap-tiap DBMS memiliki bahasa dan struktur
pemrograman masing-masing. Transact-SQL atau T-SQL merupakan bahasa pemrograman yang proprietary
dari Microsoft SQL Server. Materi dalam dasar pemrograman ini meliputi deklarasi variabel, penugasan,
struktur kendali seperti seleksi kondisi, iterasi, stored procedure, user defined function (UDF).

13.4.2. Deklarasi Variabel


Untuk mendeklarasikan variabel dalam T-SQL sintaksis yang digunakan adalah:
DECLARE @namaVariabel tipe_data [ = nilai_inisialisasi ]

Misalnya apabila ingin membuat variabel bertipe data VARCHAR(255) maka sintaksisnya:
DECLARE @name VARCHAR(255) = 'Budi';

13.4.3.Penugasan/Pengisian Variabel
Untuk mengisi variabel selain melalui inisialisasi melalui deklarasi, digunakan sintaksis berikut.
SET @namaVariabel = nilai

Misalnya apabila ingin mengisi variabel @name maka sintaksisnya:


SET @name = 'Ani';

Apabila nilai suatu variabel diisi melalui hasil query SELECT maka sintaksis yang digunakan adalah
sebagai berikut.
SELECT @nameVariabel = namaKolom FROM tabel

Misalnya apabila ingin mengisi variabel @name dari hasil query SELECT pada instructor:
SELECT @name = name FROM instructor where ID=14365;

13.4.4.Mencetak Variabel di Console/Messages


Untuk mencetak suatu variabel atau pesan tertentu di console/messages gunakan perintah PRINT.
Misalnya untuk mencetak variabel @name sebagai berikut.
PRINT 'Nama instructor yang dipilih = ' + @name

13.4.5. Mengonversi tipe data dengan CAST/CONVERT


Untuk mengubah atau mengonversi suatu variabel ke tipe data lain, gunakan fungsi CAST atau
CONVERT. Fungsi ini berguna misalnya apabila ingin mencetak variabel yang bukan string. Misalnya berikut
ini contoh mengonversi tipe data INT menjadi VARCHAR(5).
DECLARE @nilai INT = 85

PRINT CAST(@nilai as VARCHAR(5))

Contoh lain misalnya mengubah dari VARCHAR menjadi INT pada klausa SELECT:
SELECT CAST(ID AS INT) as ID_INT, * FROM instructor

13.4.6. Seleksi Kondisi


Untuk melakukan seleksi kondisi ada dua sintaksis yang dapat digunakan yaitu sintaksis IF dan CASE.
a. IF…ELSE

Sintaksis untuk seleksi kondisi menggunakan IF…ELSE adalah sebagai berikut.


IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
Misalnya:
DECLARE @nilai INT
SET @nilai = 80
IF @nilai > 80
BEGIN
PRINT 'Nilai '+ CAST(@nilai as varchar(5)) +' = Baik'
END
ELSE IF @nilai > 60
BEGIN
PRINT 'Nilai '+ CAST(@nilai as varchar(5)) +' = Cukup Baik'
END
ELSE
BEGIN
PRINT 'Nilai '+ CAST(@nilai as varchar(5)) +' = Kurang'
END

b. CASE…WHEN

Sintaksis untuk seleksi kondisi menggunakan IF…ELSE adalah sebagai berikut.


Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Misalnya dalam contoh berikut melakukan seleksi kondisi CASE…WHEN untuk menampilkan nama
hari berdasarkan inisial dari kolom day dari tabel time_slot.
SELECT *, day_name =
CASE
WHEN day = 'M' THEN 'Monday'
WHEN day = 'T' THEN 'Tuesday'
WHEN day = 'W' THEN 'Wednesday'
WHEN day = 'R' THEN 'Thursday'
WHEN day = 'F' THEN 'Friday'
END
FROM time_slot

13.4.7.Iterasi
Sintaksis untuk melakukan iterasi dalam T-SQL menggunakan WHILE adalah sebagai berikut. WHILE
sangat penting untuk digunakan dalam iterasi data yang dikenal dengan CURSOR. Namun, materi ini tidak
akan membahas penggunaan CURSOR itu sendiri.
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Misalnya untuk mencetak angka 1 sampai 5 menggunakan WHILE adalah sebagai berikut.
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
Dalam iterasi untuk keluar dari iterasi keyword yang digunakan adalah BREAK sedangkan untuk
melewati (skip) iterasi keyword yang digunakan adalah CONTINUE.

13.4.8. STORED PROCEDURE


Stored procedure (SP) merupakan suatu prosedur seperti dalam bahasa pemrograman umumnya
yang dapat dipanggil dan dijalankan di suatu DBMS. SQL Server memiliki system stored procedure yang
bersifat global dan dapat dipanggil dari database apapun. System stored procedure menggunakan awalan
sp_ Namun pengguna juga dapat membuat sendiri prosedur yang berlaku dalam suatu database tertentu.

13.4.8.1. Pembuatan Stored Procedure


Sintaksis untuk membuat stored procedure adalah sebagai berikut.
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]
Contoh berikut adalah stored procedure untuk menampilkan instructor sebagai advisor serta student yang
dibimbing.
CREATE PROCEDURE GetAdvisor
AS
SELECT * FROM instructor i
JOIN advisor a ON i.ID=a.i_ID
JOIN student s ON s.ID=a.s_ID

13.4.8.2. Pemanggilan Stored Procedure


Untuk memanggil stored procedure gunakan keyword EXEC atau EXECUTE. Contoh pemanggilan
stored procedure GetAdvisor di atas adalah sebagai berikut.
EXECUTE GetAdvisor
13.4.8.3. Parameter
Stored procedure dapat menerima suatu parameter masukan seperti halnya prosedur dalam
pemrograman. Stored procedure memiliki dua jenis parameter, yaitu input dan output.

a. Parameter Input

Input parameter berfungsi untuk memasukkan nilai argumen ke parameter untuk diproses di dalam
prosedur. Sintaksis untuk stored procedure dengan parameter input adalah sebagai berikut.
CREATE { PROC | PROCEDURE } procedure_name @parameter1 tipe_data, ...

Berikut ini adalah contoh stored procedure untuk menampilkan instructor sebagai advisor serta
student yang dibimbing tergantung dari suatu instructor tertentu (dengan satu parameter yaitu nama
instructor-nya).
CREATE PROCEDURE GetAdvisor2
@name VARCHAR(50)
AS
SELECT * FROM instructor i
JOIN advisor a ON i.ID=a.i_ID
JOIN student s ON s.ID=a.s_ID
WHERE i.name LIKE @name
GO
Untuk memanggil stored procedure dengan parameter maka setelah nama stored procedure
tambahkan spasi kemudian nilai dari parameternya, pisahkan dengan koma untuk parameter kedua, dst.
EXEC GetAdvisor2 '%na%'

b. Parameter Output
Output parameter berfungsi untuk mengeluarkan/mengembalikan suatu nilai dari dalam prosedur
ke parameter supaya nantinya dapat diproses di luar prosedur. Sintaksis untuk stored procedure dengan
parameter output adalah sebagai berikut.
CREATE { PROC | PROCEDURE } procedure_name @parameter1 tipe_data OUT/OUTPUT, ...

Contoh berikut untuk membuat stored procedure untuk menampilkan daftar instructor yang berada
di suatu department (misalnya “Comp. Sci.”) beserta salary tertinggi yang dikembalikan melalui parameter
output.
CREATE PROCEDURE GetInstructorSalary
@dept_name VARCHAR(50),
@max_salary MONEY OUTPUT
AS
SELECT * FROM instructor
WHERE dept_name = @dept_name

SELECT @max_salary = MAX(salary) FROM instructor


WHERE dept_name = @dept_name
GO
Untuk memanggil stored procedure dengan parameter output maka buat dulu variabel untuk
menyimpan nilai hasil output parameter dan di perintah EXEC/EXECUTE di akhir nama variabel tambahkan
keyword OUT/OUTPUT
DECLARE @max_salary MONEY;
DECLARE @dept_name VARCHAR(50) = 'Statistics';
EXECUTE GetInstructorSalary @dept_name, @max_salary OUT
PRINT 'Maximum salary in Dept. ' + @dept_name + ' = ' + CAST(@max_salary AS
VARCHAR(50))

13.4.9. User Defined Function (UDF)


Berbeda dengan stored procedure, user defined function (UDF) digunakan untuk mengembalikan
suatu nilai seperti halnya fungsi dalam pemrograman. UDF dapat dipanggil di dalam suatu klausa SELECT,
WHERE, HAVING, pada DML UPDATE, INSERT, DELETE sedangkan stored procedure tidak bisa. UDF juga
dapat digunakan untuk mendefinisikan kolom, mendefinisikan CHECK constraint. UDF memiliki beberapa
jenis nilai kembalian, antara lain scalar (nilai tunggal) dan result-set/table (beberapa baris).
Materi berikut ini hanya menjelaskan tentang pembuatan UDF yang mengembalikan nilai scalar.
Sintaksis untuk membuat UDF adalah sebagai berikut.
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] [ READONLY ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
Keyword RETURNS digunakan untuk menentukan tipe data nilai kembalian, sedangkan RETURN digunakan
untuk mengembalikan nilai.

CONTOH UDF 1

UDF berikut berfungsi untuk mengembalikan nama hari tergantung dari inisial namanya adalah sebagai
berikut.
CREATE FUNCTION GetDayName
(@initial VARCHAR(1))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @name VARCHAR(50)
SET @name =
CASE
WHEN @initial = 'M' THEN 'Monday'
WHEN @initial = 'T' THEN 'Tuesday'
WHEN @initial = 'W' THEN 'Wednesday'
WHEN @initial = 'R' THEN 'Thursday'
WHEN @initial = 'F' THEN 'Friday'
END
RETURN @name
END;

13.4.9.1. Pemanggilan UDF


Untuk memanggil UDF bisa dilakukan di dalam SELECT, WHERE, HAVING, pada DML UPDATE, INSERT,
DELETE. Misalnya contoh berikut untuk memanggil Contoh UDF 1 GetDayName di atas menggunakan
SELECT.
SELECT dbo.GetDayName('W')

Contoh berikut untuk memanggil UDF menggunakan query SELECT.


SELECT *, dbo.GetDayName(day) as day_name FROM time_slot

CONTOH UDF 2

UDF berikut berfungsi untuk mengembalikan lama suatu time_slot (jadwal kuliah) dalam satuan
menit.
CREATE FUNCTION GetSlotDuration(

@start_hour INT,

@start_min INT,

@end_hour INT,

@end_min INT
)

RETURNS INT

AS

BEGIN

DECLARE @total_min INT;

SET @total_min = (@end_hour*60+@end_min) - (@start_hour*60+@start_min);

RETURN @total_min

END

Contoh berikut untuk memanggil UDF GetSlotDuration menggunakan query SELECT dan pada klausa
WHERE, yang mana GetSlotDuration > 50 menit.
SELECT *, dbo.GetSlotDuration(start_hr,start_min,end_hr,end_min) as Duration

FROM time_slot

WHERE dbo.GetSlotDuration(start_hr,start_min,end_hr,end_min) > 1*50

13.5. Latihan
1. Buat stored procedure yang menampilkan advisor termasuk data instructor dan student dengan
parameter nama student yang dicari (sebagai masukan dalam parameter input).
2. Buat stored procedure yang menampilkan kuliah yang diambil pada tabel takes termasuk data student
dengan parameter nama student yang dicari (sebagai masukan dalam parameter input).
3. Buat fungsi GetNilaiHuruf untuk mengembalikan nilai akhir huruf dari nilai angka dengan ketentuan
sebagai berikut.
No Rentang nilai angka Nilai Huruf
1 85 < nilai < 100 A
2 80 < nilai <= 85 A-
3 75 < nilai <= 80 B+
4 70 < nilai <= 75 B
5 65 < nilai <= 70 B-
6 60< nilai <= 65 C+
7 55 < nilai <= 60 C
8 40 < nilai <= 55 D
9 Nilai < 40 E

4. Gunakan fungsi di atas untuk mencari data kuliah yang diambil (pada tabel takes) beserta data student
dengan yang memiliki nilai A dan A- dengan memanfaatkan fungsi GetNilaiHuruf.
Contoh penggunaannya pada klausa SELECT/WHERE adalah GetNilaiHuruf(score).
Modul 14 : Dasar Pemrograman Database

14.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

14.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Mampu membuat aplikasi dengan bahasa pemrograman java untuk menampilkan dan
memodifikasi data dalam tabel.
2. Mampu menggunakan preparedstatement untuk mengelola data dalam database.

14.3. Alat Dan Bahan


1. Komputer

14.4. Dasar Teori


Untuk mengakses database menggunakan bahasa pemrograman java, diperlukan library untuk
membuat koneksi antara aplikasi yang kita buat dengan database. Library yang dibutuhkan disini adalah java
archive dalam bentuk file dengan ekstensi jar. Library untuk mengakses database MsSql dapat diunduh di
http://jtds.sourceforge.net/. Kemudian untuk menggunakan library ini dalam aplikasi yaitu dengan cara
ditambahkan kedalam classpath.

14.4.1. Membuka Koneksi ke Database.


Langkah pertama untuk mengakses database adalah memuat database library dan membuat koneksi
ke database server. Perintah untuk memuat library adalah
Class.forName("net.sourceforge.jtds.jdbc.Driver");

Parameter pada perintah diatas adalah nama class database Driver. Setiap databse memiliki library
dan nama class yang berbeda. Driver yang digunakan dalam library jtds untuk mengakses MsSql Server
adalah "net.sourceforge.jtds.jdbc.Driver".
Perintah untuk membuka koneksi
Connection conn=DriverManager.getConnection(<url>, <userName>, <password>);

Keterangan parameter dalam perintah diatas adalah :


url : Alamat atau IP address server database dan nama database.
username : Nama pengguna yang digunakan untuk mengakses database.
Password : Kata kunci untuk mengakses database .

Format url untuk koneksi diatas adalah


jdbc:<subprotocol>://<ip address>:<port>/<nama database>
Subprotocol untuk koneksi ke MsSql Server adalah jtds:sqlserver . Jadi untuk koneksi ke
database dengan nama TestDB yang berada pada komputer kita sendiri pada port 1433 url-nya adalah :
jdbc:jtds:sqlserver://localhost:1401/TestDB

atau

jdbc:jtds:sqlserver://127.0.0.1:1401/TestDB

14.4.2. Menampilkan Data dari Tabel.


Perintah membaca data dari dalam tabel adalah menggunakan perintah executeQuery. Statement
ini digunakan untuk mengeksekusi query select.
Statement st = conn.createStatement();

ResultSet rs = st.executeQuery(<sql>);

Parameter sql adalah query select yang akan dieksekusi. Untuk menganbil data dari ResultSet
dilakukan perulangan dari baris pertama sampai terakhir dalam resultset. Perintah untuk mengambil data
masing-masing sel dalam tabel ditunjukkan pada tabel berikut.

Tipe Data Statement


Int getInt(<nomor kolom/nama kolom>)
Varchar, Char getString(<nomor kolom/nama kolom>)
Float getFloat(<nomor kolom/nama kolom>)
Date getDate(<nomor kolom/nama kolom>)
Time, DateTime getTime(<nomor kolom/nama kolom>)

14.4.3. Memodifikasi Data Dalam Tabel.


Perintah mengubah data dalam tabel adalah menggunakan perintah executeUpdate. Statement
ini digunakan untuk mengeksekusi query yang melakukan perubahan data dalam tabel yauti insert, update
dan delete.
Statement st = conn.createStatement();

st.executeUpdate(<sql>);

14.4.4. Menggunakan Prepared Statement.


PreparedStatement digunakan untuk melakukan perubahan data dalam tabel. Kelebihan
preparedstatement adalah perubahan data bisa dilakukan pada beberapa baris sekaligus.
PreparedStatement st = conn.prepareStatement(<sql>);

st.setInt(1, 4);

st.setString(2, "Melon ");

st.setInt(3, 110);

st.executeUpdate();

st.setInt(1, 5);

st.setString(2, "Kiwi ");

st.setInt(3, 120);

st.executeUpdate();
14.5. Prosedur Praktikum
1. Buatlah database “TestDB”
2. Buatlah tabel “Inventory” sebagai berikut
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
INSERT INTO Inventory VALUES (1, 'banana', 150);
INSERT INTO Inventory VALUES (2, 'orange', 154);

3. Buatlah program Sbd1.java sebagai berikut. Sesuaikan url, userName dan password dengan
konfigurasi database server masing-masing.

1 package id.ac.ub.filkom;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.sql.Statement;
9
10 public class Sbd1 {
11 static String url = "jdbc:jtds:sqlserver://localhost:1443/TestDB";
12 static String userName = "SA";
13 static String password = "password1%";
14
15 public static void main(String[] args) {
16 Connection conn = null;
17 Sbd1 sbd1 = new Sbd1();
18 try {
19 conn = sbd1.getConnection(url, userName, password);
20 System.out.println("Before Insert");
21 sbd1.statementQuery(conn);
22 sbd1.statementInsert(conn);
23 System.out.println("After Insert");
24 sbd1.statementQuery(conn);
25 sbd1.preparedStatementInsert(conn);
26 System.out.println("After Insert with preparedstatement");
27 sbd1.statementQuery(conn);
28 sbd1.statementDelete(conn);
29 } catch (Exception e) {
30 e.printStackTrace();
31 } finally {
32 try {
33 conn.close();
34 } catch (Exception e) {
35 e.printStackTrace();
36 }
37 }
38 }
39
40 public Connection getConnection(String url, String userName, String passwd)
41 throws SQLException, ClassNotFoundException {
42 Class.forName("net.sourceforge.jtds.jdbc.Driver");
43 Connection conn = DriverManager.getConnection(url, userName, passwd);
44 return conn;
45 }
46
47 public void statementQuery(Connection conn) throws SQLException {
48 Statement st = conn.createStatement();
49 ResultSet rs = st.executeQuery("select * from Inventory");
50 System.out.println("==========================================");
51 System.out.println("| ID | NAMA | JUMLAH");
52 System.out.println("==========================================");
53 while (rs.next()) {
54 Integer id = rs.getInt(1);
55 String nama = rs.getString(2);
56 Integer jml = rs.getInt(3);
57 System.out.println("| " + id + " | " + nama + " | " +
jml);
58 }
59 }
60
61 public void statementInsert(Connection conn) throws SQLException {
62 //. . . . .
63 }

64 public void preparedStatementInsert(Connection conn) throws SQLException {


65 //. . . . . .
66 }
67
public void statementDelete(Connection conn) throws SQLException {
68 Statement st = conn.createStatement();
69 st.executeUpdate("delete from Inventory where id=3");
70 st.executeUpdate("delete from Inventory where id=4");
71 st.executeUpdate("delete from Inventory where id=5");
72 }
73
74 }

Jalankan program diatas.

4. Tambahkan program berikut dalam method statementInsert pada baris 62, kemudian jalankan
program tersebut

Statement st = conn.createStatement();
st.executeUpdate("insert into Inventory(id, name, quantity) values
(3,'grapes',100)");

5. Tambahkan program berikut dalam method preparedStatementInsert pada baris 65, kemudian
jalankan program tersebut

String sql = "insert into Inventory(id, name, quantity) values(?,?,?)";


PreparedStatement st = conn.prepareStatement(sql);
st.setInt(1, 4);
st.setString(2, "Melon ");
st.setInt(3, 110);
st.executeUpdate();
st.setInt(1, 5);
st.setString(2, "Kiwi ");
st.setInt(3, 120);
st.executeUpdate();

14.6. Latihan
1. Buatlah dua tabel berikut :
◦ Tabel Mahasiswa dengan kolom sebagai berikut:
Nama Kolom Tipe data
NIM Varchar
Nama varchar

◦ Tabel Nilai dengan kolom sebagai berikut:


Nama Kolom Tipe data
NIM Varchar
Nilai Float

Buatlah program untuk menampilkan data berikut dari dua tabel diatas.

NIM Nama Nilai


Lampiran

Lampiran 1. Struktur Format Laporan


Laporan yang dibuat oleh mahasiswa harus memiliki struktur seperti berikut:
1. Bagian Judul
Bagian judul berisi judul laporan tugas, nama mahasiswa praktikan, kelas, program studi, dan nama
asisten.
2. Bagian Isi
Bagian isi memiliki struktur sebagai berikut untuk setiap nomor jawaban dari soal yang diberikan:
a. Implementasi (Code)
Bagian implementasi berisi kode-kode yang digunakan untuk menyelesaikan masalah yang
diberikan. Bagian ini di tulis tangan oleh mahasiswa yang bersangkutan. Implementasi tidak
boleh ada plagiasi.
b. Tampilan Keluaran (Screenshot)
Bagian ini berisi tampilan atau screenshot (ditempel) dari hasil implementasi yang didapat
dalam menyelesaikan masalah. Gambar screenshot berukuran tidak terlalu besar dan tidak
terlalu kecil demi efisiensi namun tetap masih bisa terbaca dengan baik.
c. Pembahasan dan Analisis Hasil
Bagian pembahasan berisi penjelasan dari masalah dan kode-kode yang digunakan dalam
menyelesaikan masalah. Analisis hasil juga harus dibuat dan dijelaskan misalnya kenapa harus
menggunakan syntax, operator, dll. tertentu dan efeknya apabila tidak menggunakan. Bagian
ini ditulis tangan oleh mahasiswa yang bersangkutan. Pembahasan dan analisis tidak boleh ada
plagiasi bahkan satu baris saja.
Lampiran 2. Contoh Format Laporan

LAPORAN PRAKTIKUM SISTEM BASIS DATA


BAB 1 _____________

Nama : _____________________

Program Studi : _____________________

Kelas : _____________________

Asisten 1 : _____________________

Asisten 2 : _____________________
1. Implementasi
1 SELECT * FROM xxx
2 WHERE xxx
3 JOIN ON xxx = xxx
4 ORDER BY xxx ASC

Tampilan Keluaran

Pembahasan dan Analisis


(ditulis tangan) Kode implementasi digunakan untuk mengambil data xxx secara terurut.
Data diambil dari tabel xxx dan xxx melalui operasi join. Baris ke-1 digunakan untuk xxx. Baris
ke-2 menunjukkan xxx. Baris ke-3 menunjukkan xxx. Baris ke-4 menunjukkan xxx.
Dari percobaan dan analisis yang telah dilakukan, apabila baris 3 tidak ada maka hasilnya
yyy. Sedangkan apabila baris 4 tidak ada maka hasilnya yyy, sehingga supaya dapat
mengambil data xxx harus yyy dengan mempertimbangkan zzz.
Dilanjutkan dengan penjelasan lain, dst.

2. Implementasi
1 SELECT * FROM xxx
2 WHERE xxx
3 JOIN ON xxx = xxx
4 ORDER BY xxx ASC

Tampilan Keluaran

Pembahasan dan Analisis


(ditulis tangan) Kode implementasi digunakan untuk mengambil data xxx secara terurut.
Data diambil dari tabel xxx dan xxx melalui operasi join. Baris ke-1 digunakan untuk xxx. Baris
ke-2 menunjukkan xxx. Baris ke-3 menunjukkan xxx. Baris ke-4 menunjukkan xxx.
Dari percobaan dan analisis yang telah dilakukan, apabila baris 3 tidak ada maka hasilnya
yyy. Sedangkan apabila baris 4 tidak ada maka hasilnya yyy, sehingga supaya dapat
mengambil data xxx harus yyy dengan mempertimbangkan zzz.
Dilanjutkan dengan penjelasan lain, dst.

DAFTAR PUSTAKA

• …………………….
• …………………….
• …………………….

Anda mungkin juga menyukai