Professional Documents
Culture Documents
Pertemuan 1:
SQL (sekuel)
Sub-Materi:
Select
Multiple-table query
SQL Function
Transaction
Perkenalan
Praktikum PBD (Pemrograman Basis Data) merupakan bagian
dari MK PBD. PBD mengintegrasikan pemrograman di sisi
database server dan pemrograman di sisi client. Karena itulah
dalam MK PBD, ada prasyarat yang harus ditempuh oleh
mahasiswa untuk dapat mengambil MK ini. Prasyarat ini ada dua,
yaitu (1) MK SBD (Sistem Basis Data) dan (2) MK Bahasa
Pemrograman.
Dalam MK SBD, materi meliputi desain dan pembuatan database
mengikuti normalisasi, penyimpanan data, dan data retrieval
(temu kembali data). Penyimpanan data dalam database
menggunakan sintak-sintak DML, sedangkan untuk data retrieval
menggunakan perintah SELECT. Keduanya dalam dunia
programming disebut sebagai CRUD (Create-Read-UpdateDelete). Semua ini merupakan bagian dari SQL (baca sekuel),
yaitu bahasa native bagi database. Ibarat bahasa inggris bagi
orang Amerika, dan bahasa indonesia bagi orang Indonesia.
Pemrograman disisi database
server lebih umum disebut
dengan SQL Programming, yaitu
bahasa
pemrograman
yang
memakai SQL sebagai basisnya.
Karena menggunakan SQL, maka
dari itu, pembahasan pada
pertemuan 1 ini difokuskan pada
Pemrograman Basis Data
pg. 1
SQL (sekuel)
penyegaran kembali (refresh) materi-materi SQL yang telah
diterima dalam MK SBD.
Sedangkan dalam MK Bahasa Pemrograman, materi meliputi
variable, control-flow statement, serta procedure and function.
SQL Programming, sesuai dengan namanya, menggunakan
semua materi tersebut. Jadi pembelajaran pada PBD seutuhnya
merupakan pemakaian kembali dan kelanjutan dari MK SBD dan
Bahasa Pemrograman.
Selain SQL Programming, juga ada pemrograman di sisi client.
Fokus utamanya adalah tentang bagaimana melakukan
hubungan timbal balik dengan database server serta menerapkan
SQL dan SQL Programming dalam aplikasi client.
SQL Server
Database management system yang
dipakai dalam Praktikum PBD adalah SQL
Server 2005 Express Edition. Selain
ringan dan bebas dipakai, versi ini juga
memiliki beberapa fitur penting dalam versi lain seperti security.
Namun SQL Server Management Studio, sebuah tool untuk memanage lingkungan SQL Server, tidak ada dalam paket instalasi
SQL Server 2005 Express Edition. Tool ini harus didownload
sendiri di situs resminya. Di laboratorium komputer, telah
diinstall SQL Server 2005 Express Edition beserta Management
Studio-nya.
Langkah pertama yang akan kita lakukan adalah membuat
database yang akan kita pakai selama 8x masa latihan praktikum.
Untuk script pembuatan database dapat diunduh di
http://172.25.87.13/pbdsi/p1/createdb.sql. Setelah diunduh,
ikuti langkah-langkah berikut:
1.
pg. 2
SQL (sekuel)
2.
3.
4.
Login:
Struktur database
Database dibangun oleh database schema. Dalam database
schema inilah obyek-obyek database dibangun. Setiap schema diassign ke satu atau lebih user (atau login). Dalam Praktikum PDB,
hanya dibahas obyek-obyek antara lain Table, Function, Stored
Procedure dan Trigger. Pertemuan pertama difokuskan pada
Table serta bagaimana DML dan SELECT pada Table (tabel).
Database schema yang dipakai dalam selama 8x pertemuan
dapat dilihat pada Gambar 1. Setiap tabel saling berelasi, karena
itulah dinamakan Relational Database. Tabel yang dihubungkan
dengan tanda kunci merupakan tabel yang ber-PK, atau Parent
Table (tabel induk). Sedangkan tabel yang tidak ada tanda kunci
merupakan tabel yang ber-FK, atau Child Table (tabel anak).
Pemrograman Basis Data
pg. 3
SQL (sekuel)
Tabel terdiri dari Row (baris) dan Column (kolom). Setiap baris
merepresentasikan data, sedangkan kolom merepresentasikan
struktur data yang disimpan. Struktur ini dibagi menjadi 2
bagian yaitu tipe-nya dan panjang-nya. Sebagai contoh, kolom
nim pada tabel mahasiswa mempunyai tipe char untuk
menyimpan karakter dengan panjang 11 karakter. Dengan
perbedaan tipe dan panjang, otomatis akan berpengaruh pada
cara kita dalam melakukan DML dan SELECT.
pg. 4
SQL (sekuel)
SELECT
SELECT merupakan salah satu pondasi dalam SQL Programming.
SELECT digunakan untuk menampilkan data, terlebih untuk
mencari informasi dalam kumpulan data.
Sintak
SELECT dibagi kedalam 6 komponen, antara lain:
1.
2.
3.
4.
5.
6.
Select_list
Merupakan daftar select. Dapat berupa literal value atau
column_list. Perhatikan contoh berikut:
SELECT 1, 'STIKOM Surabaya';
pg. 5
SQL (sekuel)
Mengambil data dari tabel
(data retrieval)
Fungsi utama dari SELECT adalah untuk data retrieval (atau
pengambilan data) yang tersimpan dalam (beberapa) tabel.
Perhatikan contoh berikut:
SELECT 1 '1', 'STIKOM Surabaya' STIKOM,
nim, nim + '@stikom.edu' EMAIL
FROM mahasiswa;
Hasil:
1
1
1
..
1
STIKOM
STIKOM Surabaya
STIKOM Surabaya
STIKOM Surabaya
nim
05390102208
05410104001
07410104800
EMAIL
05390102208@stikom.edu
05410104001@stikom.edu
07410104800@stikom.edu
Hasil dari query tersebut adalah banyak nim yang sama. Untuk
mengeliminasi data-data yang sama, dibutuhkan DISTINCT.
Query menjadi seperti ini:
SELECT DISTINCT nim
FROM nilai;
Menyaring data
Tidak semua data yang ada pada tabel, ingin ditampilkan.
Terlebih ketika tabel terbagi kedalam banyak kolom dengan
jumlah data yang sangat besar. Padahal data yang diambil
Pemrograman Basis Data
pg. 6
SQL (sekuel)
hanyalah sebuah data, contohnya data mahasiswa milik Alif.
Dapat dibayangkan berapa waktu yang diperlukan untuk proses
ini jika tidak ada penyaringan. Untuk mengoptimalkan waktu
pencarian, ditambahkan WHERE pada query. Perhatikan contoh
berikut:
SELECT *
FROM mahasiswa
WHERE nama='Alif';
Hasil:
nim
05410104001
nama
Alif
alamat
Jl. Jagir 20
kota
Surabaya
jns_kel..
P
sts_nikah
B
Operator
=
>
>=
<
<=
<> atau !=
BETWEEN .. AND ..
IN (set)
LIKE
IS NULL
Keterangan
Sama dengan
Lebih besar dari
Lebih besar sama dengan
Kurang dari
Kurang dari sama dengan
Tidak sama dengan
Diantara 2 nilai
Cocok dengan salah satu diantara daftar nilai
Cocok dengan pola karakter
Sama dengan NULL
pg. 7
SQL (sekuel)
Bagaimana jika kondisi lebih dari satu? Terkait dengan predikat
dalam kondisi, dapat dipastikan bahwa penggunaan operator
logika diantara 2 kondisi memisahkan kondisi-kondisi tersebut.
Acuan yang dipakai adalah tabel kebenaran. Perhatikan contoh
berikut:
SELECT nim, nama, kota
FROM mahasiswa
WHERE kota='Surabaya' and nim='05390102208';
Hasil:
nim
05390102208
nama
Cinta
kota
Surabaya
Prioritas
1
2
3
Keterangan
NOT
AND
OR
Pengurutan data
Dalam visualisasi informasi, hasil pemrosesan data dapat lebih
mudah dibaca ketika data tersebut dapat diurutkan berdasarkan
nilai tertentu. Sebagai contoh ketika dalam tabel Nilai, seorang
dosen ingin melihat 10 nilai UAS terbesar:
SELECT nim, uas
FROM nilai
WHERE nid='010103'
pg. 8
SQL (sekuel)
Cara seperti ini akan menampilkan seluruh nilai dengan urutan
yang sama seperti urutan data di-insert-kan. Untuk dapat melihat
peringkat mahasiswa dengan catatan bahwa mahasiswa dengan
nilai tertinggi ada diposisi teratas, kita bisa menambahkan
ORDER BY dengan tambahan DESCending.
SELECT nim, kode_mk, uas
FROM nilai
WHERE nid='010103'
ORDER BY uas DESC;
Hasil:
nim
05390102208
06390102666
07390102802
kode_mk
MK-001
MK-001
MK-001
uas
80
40
20
Hasil:
kode_mk
MK-003
MK-102
rata_nilai
54
65
nilai_tertinggi
90
80
nilai terendah
0
50
pg. 9
SQL (sekuel)
Dapat dilihat pada contoh, bahwa kita bisa melakukan
pengelompokan data menjadi kelompok-kelompok lebih kecil
dengan menggunakan GROUP BY. Beberapa aturan dalam
GROUP BY:
1.
2.
3.
Multiple-table Query
Data-data yang tersimpan dalam database, tersebar kedalam
beberapa tabel. Tabel-tabel ini dihubungkan dengan yang
namanya referential constraint, yaitu hubungan antara FOREIGN
KEY dan PRIMARY KEY. Dan tidak hanya pada single field, namun
dapat juga berbentuk multiple field referential constraint.
Karena itulah, untuk mendapatkan informasi yang tersebar,
dibutuhkan metode untuk menggabungkan property tabel-tabel
tersebut. Metode yang digunakan ada 2 macam, yaitu JOIN dan
SUBQUERY.
Perbedaannya sederhana, JOIN menggunakan satu SELECT,
sedangkan SUBQUERY menggunakan dua atau lebih SELECT
(umumnya dikatakan sebagai SELECT within a SELECT).
Join
Awal munculnya join adalah menggunakan WHERE. Jadi tabeltabel ditulis dalam FROM, sedangkan penggabungannya ditulis
dalam WHERE. Sintak untuk join menggunakan WHERE adalah
sebagai berikut:
Pemrograman Basis Data
pg. 10
SQL (sekuel)
SELECT <select_list>
FROM <table1>, <table2> [, ...]
WHERE <table1.PK = table2.FK> [AND ...]
Contoh:
SELECT m.nama, n.kode_mk, n.uas
FROM mahasiswa m, nilai n
WHERE m.nim=n.nim;
Hasil:
nama
Cinta
Cinta
Alif
Gala
kode_mk
MK-001
MK-002
MK-002
MK-103
uas
80
0
70
40
Contoh:
SELECT m.nama, n.kode_mk, n.uas
FROM mahasiswa m JOIN nilai n
ON m.nim = n.nim;
pg. 11
SQL (sekuel)
sederhana, namun jika dihadapkan pada data-data komplek
dengan ruang lingkup yang besar, hal ini menjadi sebuah hal
yang perlu diperhitungkan.
Ada 2 tipe JOIN, yaitu INNER JOIN yang lebih menekankan pada
data yang sama, dan OUTER JOIN.
Inner Join
Tujuan utama dari INNER JOIN adalah menyamakan nilai baris
pada sebuah tabel dengan tabel untuk kolom yang bersesuaian.
Jika salah satu kolom tidak memiliki kesamaan nilai atau tidak
mempunyai nilai sama sekali, maka baris ini tidak akan
ditampilkan dalam hasil query. Jadi, masih sama dengan equijoin.
Outer Join
Dalam contoh equijoin, data dengan nama mahasiswa Indah,
tidak ada. Hal ini dikarenakan Indah memang tidak mempunyai
nilai. Sebagai seorang dosen, kita tentu ingin agar si Indah ini
juga tampil sebagai hasil dari query. Salah satu cara adalah
dengan menggunakan outer join. Sintak join lebih detilnya
menjadi seperti berikut:
SELECT <select_list>
FROM <tabel1 sebagai kiri>
<LEFT/RIGHT> [OUTER] JOIN
<tabel2 sebagai kanan>
ON <table1.PK = table2.FK> [AND ...];
pg. 12
SQL (sekuel)
SELECT m.nama, n.kode_mk, n.uas
FROM mahasiswa m LEFT JOIN nilai n
ON m.nim = n.nim;
Hasil:
nama
Cinta
Cinta
Indah
Gala
Gala
kode_mk
MK-001
MK-002
NULL
MK-003
MK-103
uas
80
0
NULL
0
40
Nonequi Join
Berbeda dengan equijoin yang selalu memakai operator sama
dengan, nonequi join memakai operator selain sama dengan.
Contoh permasalahan misalnya kita ingin mencari mahasiswa
dengan angkatan lebih muda dari Entin. Perhatikan query
berikut:
SELECT entin.nim, m.nim, m.nama
FROM mahasiswa m, mahasiswa entin
WHERE LEFT(m.nim,2) > LEFT(entin.nim,2)
AND entin.nama='Entin';
Hasil:
nim
06390102666
06390102666
06390102666
nim
07390102802
07390102900
07410104800
nama
Henny
Indah
Gala
Subquery
Merupakan query dalam query. Umumnya, subquery ini dipakai
untuk mencari data yang belum diketahui. Penggunaan query
didalam query ini umumnya menjadi bagian dari kondisi. Sintak
subquery adalah sebagai berikut:
Pemrograman Basis Data
pg. 13
SQL (sekuel)
SELECT <select_list>
FROM <tabel>
WHERE <column> =
(SELECT <single_column>
FROM <tabel>
WHERE <kondisi dgn hasil 1 baris>);
SQL Function
Fungsi-fungsi dalam SQL (bukan User Defined Function) lebih
dikhususkan pada masing-masing provider. Secara umum,
fungsi-fungsi ini dapat dibagi menjadi:
1.
2.
Aggregation
Mengembalikan nilai scalar yang merepresentasikan sebuah
agregasi dari sejumlah nilai.
Macam: AVG(), MAX(), COUNT(), MIN(), SUM()
Conversion
Mengubah nilai dari satu tipe data ke tipe data lain. Selain
itu konversi digunakan juga untuk mengaplikasikan
karakteristik pada format date, time, dan numeric.
Macam: CAST(), CONVERT()
pg. 14
SQL (sekuel)
3.
4.
5.
6.
String Manipulation
Digunakan untuk mengubah, mengganti, dan memanipulasi
karakter.
Macam: LEN(), SUBSTRING(), UPPER(), LOWER(), LEFT(),
RIGHT(), REPLACE()
Mathematical
Digunakan untuk operasi matematis, mulai dari algebra,
trigonometri, statistik, peramalan, dan bahkan operasi
finansial.
Macam: CEILING(), FLOOR(), ROUND(), POWER(), SQRT()
Date and Time
Mengubah porsi date dan time, komparasi dan manipulasi
nilai-nilai date/time.
Macam: GETDATE(), DATEPART(), DATEADD(), DATEDIFF()
dll
Transaction
Mungkin lebih umum jika disebut sebagai DML atau Data
Manipulation Language. Lebih umum lagi jika disebut dalam
bentuk Insert, Update, Delete. Bersama dengan SELECT,
transaction secara ilmiah dikenal sebagai CRUD (Create Read
Update Delete).
Sederhananya, transaksi adalah sebuah mekanisme untuk
memastikan bahwa data masuk sesuai dengan tempatnya.
Tentunya dengan beberapa aturan. Aturan-aturan ini
didefinisikan secara khusus melalui constraint, relationship, dan
tipe data. Dari aturan ini, sistem yang menentukan apakah
transaksi sukses atau tidak (dengan mengembalikan nilai
kesalahan).
Pembahasan untuk transaksi akan diberikan pada modul lain.
untuk saat ini, fokus transaksi adalah pada CRUD (lets do CRUD
with data).
Penambahan data
Sebelum melakukan penambahan data, perlu diperhatikan halhal sebagai berikut:
Pemrograman Basis Data
pg. 15
SQL (sekuel)
pg. 16
SQL (sekuel)
Penghapusan data
Menggunaan DELETE dengan perlakuan sama seperti UPDATE.
Yang perlu diperhatikan disini adalah adanya referential
constraint (hubungan antara PK dan FK). Data tidak dapat
dihapus ketika data tersebut direferensi oleh tabel lain.
DELETE <tabel>
WHERE <kondisi1>;
pg. 17