Professional Documents
Culture Documents
SQL (sekuel)
Sub-Materi:
Select
Join
Subquery
DML
SQL (sekuel)
BabI
SQL (sekuel)
Sub-Materi:
Select
Join
Subquery
DML
Perkenalan
Matakuliah Praktikum Pemrograman Basis Data (PBD)
merupakan MK praktek dari matakuliah PBD.Matakuliah ini
mengintegrasikan pemrograman di sisi database server dan
pemrograman di sisi client. Karena itulah matakuliah ini
mempunyai 2 matakuliah prasyarat, yaitu (1) matakuliah Sistem
Basis Data (SBD) dan (2) matakuliah Bahasa Pemrograman
(BPro).
Dalam matakuliah SBD, materi yang dibahas meliputi desain dan
pembuatan database mengikuti normalisasi, penyimpanan data,
dan data retrieval (temu kembali data). Penyimpanan data dalam
database menggunakan sintak-sintak data manipulation
language (DML), sedangkan untuk data retrieval menggunakan
perintah SELECT. Keduanya dalam dunia programming disebut
sebagai CRUD (Create-Read-Update-Delete). Semua materi
tersebut merupakan bagian dari pembelajaran dasar structured
query language (SQL baca sekuel), yaitu bahasa native bagi
database. Native ibarat bahasa
inggris bagi orang Amerika, dan
bahasa indonesia bagi orang
Indonesia.
Pemrograman disisi database
server lebih umum disebut
dengan SQL Programming, yaitu
Praktikum Pemrograman Basis Data
pg.1
SQL (sekuel)
bahasa pemrograman yang memakai SQL sebagai dasar
pemrogramannya. Karena menggunakan SQL, maka dari itu,
pembahasan pada pertemuan 1 ini difokuskan pada penyegaran
kembali (refresh) materi-materi SQL.
Sedangkan dalam matakuliah BPro, materi yang dibahas meliputi
variable, control-flow statement, serta procedureandfunction. SQL
Programming, sesuai dengan namanya, juga menggunakan
semua materi dalam matakuliah BPro. Jadi pembelajaran pada
matakuliah Praktikum PBD seutuhnya merupakan pemakaian
kembali dan kelanjutan dari matakuliah SBD dan BPro.
Selain SQL Programming, juga ada pemrograman di sisi client.
Fokus utamanya adalah bagaimana melakukan komunikasi
dengan database server serta menerapkan SQL dan SQL
Programming dalam aplikasi client.
SQL Server
Database Management System (DBMS)
yang dipakai dalam matakuliah Praktikum
PBD adalah SQL Server 2005 Express
Edition. Selain ringan dan bebas dipakai,
versi ini juga memiliki beberapa fitur penting seperti keamanan.
Namun SQL Server Management Studio, sebuah kakas
bantuuntuk mengelola 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 di-install SQL Server 2005 Express Edition beserta
Management Studio-nya.
Langkah pertama yang dilakukan adalah membuat database
yang akan dipakai selama 8x minggu praktikum. Untuk script
pembuatan
database
dapat
diunduh
di
http://192.168.100.3/latihan/132/BDS/create table.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
diberikan ke satu atau lebih user (atau login). Dalam matakuliah
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.
Database schemayang dipakai untuk TUGAS PRAKTIKUM selama
8x pertemuan dapat dilihat padaGambar 1.1, yaitu Putra Jaya.
Sedangkan untuk LATIHAN PRAKTIKUM dapat dilihat pada
Gambar 1.2, yaitu PBD . Setiap tabel saling berelasi, karena itulah
dinamakan Relational Database. Tabel yang dihubungkan dengan
tanda kunci merupakan tabel yang ber-PK, atau Parent Table
Praktikum Pemrograman Basis Data
pg.3
SQL (sekuel)
(tabel induk). Sedangkan tabel yang tidak ada tanda kunci
merupakan tabel yang ber-FK, atau Child Table (tabel anak).
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
namakonsumen pada tabel konsumen mempunyai tipe
varchar untuk menyimpan karakter dengan panjang
semaksimalnya 100 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.
pg.5
SQL (sekuel)
Kode 1.1
SELECT
[FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
<select_list>
<table_name>]
<kondisi1> [AND/OR <kondisi2>]]
<select_list>]
<kondisi1> [AND/OR <kondisi2>]]
<select_list>]
Select_list
Merupakan daftar select. Dapat berupa literal value atau
column_list. Perhatikan contoh berikut:
Kode 1.2
SELECT
1,'STIKOM Surabaya';
1'1','STIKOM Surabaya'STIKOM,
nim,nim+'@stikom.edu'EMAIL
mahasiswa;
Hasil:
1
1
1
..
1
pg.6
STIKOM
STIKOM Surabaya
STIKOM Surabaya
STIKOM Surabaya
nim
05390102208
05410104001
07410104800
EMAIL
05390102208@stikom.edu
05410104001@stikom.edu
07410104800@stikom.edu
SQL (sekuel)
Contoh pada Kode 1.3menampilkan seluruh data di tabel
Mahasiswa. Tanpa kata kunci FROM, query tersebut
menghasilkan error.
Muncul pertanyaan, bagaimana jika ada data yang sama, tetapi
ingin ditampilkan satu kali? Misal, kebutuhan untuk mengetahui
siapa saja konsumen yang telah melakukan pembelian.
Perhatikan contoh berikut:
Kode 1.4
SELECT
FROM
nim
nilai;
DISTINCTnim
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
hanyalah sebuah data, contohnya data karyawan milik Tegar
Heru Susilo. Untuk efektifitas query, perlu ditambahkan kata
kunci WHERE.Perhatikan contoh berikut:
Kode 1.6
SELECT
FROM
WHERE
*
mahasiswa
nama='Alif';
Hasil:
nim
05410104001
nama
Alif
alamat
Jl. Jagir 20
kota
Surabaya
jns_kel..
P
sts_nikah
B
pg.7
SQL (sekuel)
Penyaringan data membutuhkan kondisi. Ada 3 bagian dalam
penulisan kondisi, antara lain (1) expression, (2) operator
pembanding, dan (3) value.
Sedangkan nilai yang dihasilkan dari kondisi ini ada 3 macam,
yaitu TRUE, FALSE, dan UNKNOWN. TRUE berarti kondisi
menghasilkan nilai benar, FALSE berarti kondisi menghasilkan
nilai salah, sedangkan UNKNOWN berkaitan dengan nilai NULL
(secara default bernilai FALSE, kecuali menggunakan operator
IS).
Dari 3 bagian kondisi, yang perlu diperhatikan adalah operator
pembanding. Operator pembanding menentukan nilai akhir
kondisi (TRUE, FALSE, atau UNKNOWN). Dalam kode 1.6,
operator pembanding yang digunakan adalah sama dengan (=).
Selain sama dengan, beberapa operator pembanding lainnya
dapat dilihat padaTabel 1.1.
Tabel 1.1 Operator Pembanding
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.8
*
mahasiswa
nim BETWEEN'05390102208'AND
'05410104190';
SQL (sekuel)
SELECT
WHERE
*FROMmahasiswa
nim IN('05390102208','05410104190');
SELECT
WHERE
*FROMmahasiswa
naam LIKE'%amb%';
SELECT
WHERE
*FROMmahasiswa
alamat ISNULL;
*
mahasiswa
nama LIKE'_e%';
Hasil:
nim
05390102208
nama
Cinta
kota
Surabaya
pg.9
SQL (sekuel)
Ada 3 macam operator logika yaitu AND, OR dan NOT. Untuk
AND, nilai TRUE muncul jika semua kondisi TRUE. Sedangkan
untuk OR, nilai FALSE muncul jika semua kondisi FALSE.
Sedangkan untuk NOT, merupakan kebalikan dari nilai akhir
kondisi.
Ada prioritas dalam penggunaan kondisi seperti yang terlihat
padaTabel 1. 2, namun prioritas ini dapat diabaikan dengan
menggunakan parentheses (tanda kurung).
Tabel 1. 2 Prioritas Penggunaan Operator Pembanding
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. Perhatikan contoh
berikut:
Kode 1.10
SELECT nim, uas
FROM
nilai
WHERE
nid='010103';
pg.10
SQL (sekuel)
Hasil:
nim
05390102208
06390102666
07390102802
kode_mk
MK-001
MK-001
MK-001
uas
80
40
20
Operator Aritmatika
Dalam menampilkan data, ada kalanya data yang ditampilkan
merupakan hasil perhitungan missal mencari nilai total
penjualan setelah PPn 10%. Untuk mendukung perhitungan ini,
diperlukan operator aritmatika. Ada 4 macam operator
aritmatika, yang dapat dilihat padaTabel 1.3.
Tabel 1.3 Operator Aritmatika
Operator Aritmatika
+
*
/
Keterangan
Untuk operasi penambahan. Jika + ini dipakai untuk
tipe data karakter, menjadi operasi penggabungan
karakter.
Untuk operasi pengurangan.
Untuk operasi perkalian.
Untuk operasi pembagian.
'Tegar'+' '+'Heru';
SELECT
5 1;
SELECT
FROM
uas * 0.3
nilai;
SELECT
FROM
tugas / 4
nilai;
pg.11
SQL (sekuel)
Agregasi dan Pengelompokan Data
Dalam pemrosesan data mentah menjadi data statistik,
diperlukan fungsi-fungsi yang dapat meng-agregasi data-data
tersebut. Fungsi-fungsi ini meliputi SUM, MIN, MAX, COUNT, dan
AVG. SUM untuk menghitung jumlah nilai data, MIN untuk
menentukan data paling kecil, MAX untuk menentukan data
paling besar, COUNT untuk menghitung jumlah data, dan AVG
untuk menghitung rata-rata nilai data.
Dengan melihat pola data yang ada untuk kemudian dilakukan
agregasi dan pengelompokan, visualisasi informasi dapat
dilakukan dengan mudah. Sebagai contoh, untuk menampilkan
rata-rata nilai UAS, nilai UAS terrendah, dan nilai UAS
tertinggidapat dilihat pada query berikut:
Kode 1.13
SELECT
FROM
AVG(uas) rata_nilai,
MAX(uas) nilai_tertinggi,
MIN(uas) nilai_terendah
nilai;
Hasil:
rata_nilai
49.41
nilai_tertinggi
90
nilai terendah
0
pg.12
kode_mk,AVG(uas) rata_nilai,
MAX(uas) nilai_tertinggi,
MIN(uas) nilai_terendah
nilai
kode_mk;
SQL (sekuel)
Hasil:
kode_mk
MK-001
MK-002
MK-003
MK-102
MK-103
rata_nilai
46.66
43.33
54.00
65.00
42.00
nilai_tertinggi
80
70
90
80
80
nilai terendah
20
0
0
50
20
Dari data hasilKode 1.14, kita bisa melakukan filter misal hanya
untuk mata kuliah yang rata-rata nilai UAS-nya dibawah 50. Hasil
perubahan query pada Kode 1.14untuk proses filter, dapat dilihat
pada query berikut:
Kode 1.15
SELECT
FROM
GROUPBY
HAVING
kode_mk,AVG(uas) rata_nilai,
MAX(uas) nilai_tertinggi,
MIN(uas) nilai_terendah
nilai
kode_mk
AVG(uas)>50;
Hasil:
kode_mk
MK-003
MK-102
rata_nilai
54
65
nilai_tertinggi
90
80
nilai terendah
0
50
pg.13
SQL (sekuel)
Untuk kondisi dalam fungsi agregasi, dibutuhkan kata kunci
HAVING. HAVING mempunyai cara kerja yang sama dengan
WHERE. Namun memiliki fungsi yang berbeda. Sehingga jika
pada Kode 1.15 diberi kondisi hanya untuk MK-003, maka query
menjadi seperti berikut ini:
Kode 1.16
SELECT
FROM
WHERE
GROUPBY
HAVING
kode_mk,AVG(uas) rata_nilai,
MAX(uas) nilai_tertinggi,
MIN(uas) nilai_terendah
nilai
kode_mk ='MK-003'
kode_mk
AVG(uas)>50;
Hasil:
kode_mk
MK-003
rata_nilai
54
nilai_tertinggi
90
nilai terendah
0
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
constraintFOREIGN KEY dan constraintPRIMARY KEY.
Karena itulah, untuk mendapatkan informasi yang tersebar,
dibutuhkan metode untuk menggabungkan property tabel-tabel
tersebut. Metode yang digunakan ada 2 macam, yaitu JOIN
danSUBQUERY.
Perbedaannya sederhana, JOIN menggunakan satu SELECT,
sedangkan SUBQUERY menggunakan dua atau lebih SELECT
(umumnya dikatakan sebagai SELECT within a SELECT).
Join
Bentuk joinpertama kali adalah menggunakan kata kunci WHERE
untuk melakukan penggabungan tabel. Jadi tabel-tabel yang
ingin digabungkan ditulis dalam kata kunci FROM, sedangkan
pg.14
SQL (sekuel)
penggabungannya ditulis dalam WHERE. Sintak
joinmenggunakan WHERE adalah sebagai berikut:
untuk
Kode 1.17
SELECT <select_list>
FROM
<table1>, <table2> [, ...]
WHERE
<table1.PK = table2.FK> [AND ...]
Contoh:
Kode 1.18
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
pg.15
SQL (sekuel)
Contoh:
Kode 1.20
SELECT m.nama, n.kode_mk, n.uas
FROM
mahasiswa m JOIN nilai n
ON m.nim = n.nim;
SQL (sekuel)
kemudian dilanjutkan dengan data yang sama pada tabel sebelah
kanan. Artinya, seluruh data pada tabel kiri ditampilkan semua,
baru setelah itu data yang sama di tabel sebelah kanan,
ditampilkan. Untuk data yang tidak ada di tabel sebelah kanan,
ditampilkan kata NULL. Sedangkan RIGHT bekerja sebaliknya.
Dengan demikian, outer join fokus pada nilai yang tidak sama
antara kolom-kolom yang sama (tipe dan panjang [jika ada])
pada tabel yang di-join-kan. Nilai yang tidak sama,
direpresentasikan oleh NULL. Sehingga dari contoh inner join,
solusinya adalah mengubah query menjadi seperti berikut:
Kode 1.22
SELECT m.nama, n.kode_mk, n.uas
FROM
mahasiswa m LEFTJOIN 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
Non-Equijoin
Berbeda dengan equijoin yang selalu memakai operator sama
dengan, non-equijoin memakai operator selain sama dengan.
Contoh permasalahan misalnya kita ingin mencari mahasiswa
dengan angkatan lebih muda dari Entin. Perhatikan query
berikut:
Kode 1.23
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';
pg.17
SQL (sekuel)
Hasil:
Namaproduk
Kemeja Lengan Panjang
Jepit Rambut
hargapersatuan
25000.00
10000.00
Subquery
Subquery Merupakan querydidalam 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:
Kode 1.24
SELECT <select_list>
FROM
<tabel>
WHERE
<column> =
(SELECT <single_column>
FROM
<tabel>
WHERE
<kondisi>);
pg.18
SQL (sekuel)
SQL Function
Fungsi-fungsi dalam SQL (bukan User Defined Function) lebih
dikhususkan pada masing-masing penyedia layanan database.
Secara umum, fungsi-fungsi dalam SQL Server dapat dibagi
menjadi:
1.
2.
3.
4.
5.
Aggregation
Mengembalikan nilai tunggalyang 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()
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()
pg.19
SQL (sekuel)
mengambil nilai bagian tertentu dalam tanggal seperti tahun,
bulan, hari, jam, menit. DATEADD digunakan untuk
menambahkan nilai tertentu pada bagian tertentu dalam tanggal.
Sesuai contoh, DATEADD menambahkan nilai 2 pada tahun
sekarang, sehingga nilai yang dihasilkan adalah 2016.
Kode 1.26
SELECT CONVERT(VARCHAR, 1000)+' Rupiah.';
SELECT
FROM
LEN(nama),
SUBSTRING(nama, 5, 2),
UPPER(nama),
LOWER(nama),
LEFT(nama, 5),
RIGHT(nama, 5)
mahasiswa;
SELECT
CEILING(5.25),FLOOR(5.25),
ROUND(5.25, 0),POWER(5,2),SQRT(25);
SELECT
GETDATE(),
DATEPART('yyyy',GETDATE()),
DATEADD('yyyy', 2,GETDATE());
Pada Kode 1.27, kondisi dituliskan dalam kata kunci WHEN dan
apa yang dilakukan (jika kondisi bernilai TRUE) dituliskan dalam
kata kunci THEN. Jika ada kondisi lain, dituliskan dalam kata
kunci ELSE.
Masih banyak fungsi-fungsi lain yang diberikan oleh SQL Server
untuk membantu dalam pengolahan data.
pg.20
SQL (sekuel)
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).
Penambahan data
Sebelum melakukan penambahan data, perlu diperhatikan halhal sebagai berikut:
Kolom mana yang membutuhkan nilai.
Kolom mana yang mempunyai constraint.
Kolom mana yang diatur oleh database melalui fungsi.
Kolom mana yang mempunyai nilai default atau yang
memperbolehkan nilai NULL.
Apa tipe data kolom tujuan.
Untuk menambahkan data, diperlukan INSERT. Sintak INSERT
dapat dilihat pada.
Kode 1.28
INSERT INTO <tabel>[(<column_list>)]
VALUES (<value_list>);
pg.21
SQL (sekuel)
PadaKode 1.29, <column_list> tidak diberikan dengan asumsi
bahwa data dimasukkan kedalam seluruh kolom. Untuk
menambahkan data dengan mengabaikan beberapa kolom tabel
tujuan, bisa mengikuti contoh berikut:
Kode 1.30
INSERT INTO mahasiswa
(nim, nama)
VALUES ('08410104003','Jenny');
mahasiswa
sts_nikah ='M'
nim ='08410104003';
pg.22
SQL (sekuel)
Penghapusan data
Ada kalanya data yang sudah ada tidak diperlukan lagi, sehingga
data tersebut harus dihapus dari tabel. Untuk menghapus data,
digunakan perintah DELETE. Perintah ini mempunyai perlakuan
yang sama seperti UPDATE. Yang perlu diperhatikan disini
adalah adanya referential constraint (hubungan antara PK dan
FK). Dalam arti kata lain, data tidak dapat dihapus ketika data
tersebut dipakai sebagai data acuan dalam tabel lain(melalui
fitur foreign key). Sintak DELETE dapat dilihat pada kode berikut:
Kode 1.33
DELETE <tabel>
WHERE
<kondisi1>;
mahasiswa
nim ='08410104003';
pg.23
SQL (sekuel)
Latihan
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
pg.24