Anda di halaman 1dari 27

BABI

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

Buka SQL Server Management Studio Express Edition


(SSMSEE) melalui Start Menu

Praktikum Pemrograman Basis Data

SQL (sekuel)
2.

3.
4.

Login:

Isi Server name: dengan .\SQLEXPRESS pilih mode


Windows Authentication klik tombol Connect.
Menu File Open File atau Ctrl+O. Buka script yang telah
diunduh. Lalu jalankan script melalui tombol
Setelah dieksekusi, ada 3 proses yang terjadi:
- Pembuatan database beserta file-nya
- Pembuatan tabel-tabel beserta constraint-nya
- Pengisian data-data kedalam tabel

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

Gambar 1.1Database schema Putra Jaya

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

Praktikum Pemrograman Basis Data

SQL (sekuel)

Gambar 1.2 Database schema PBD

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. Diikuti oleh <select_list>, dapat berupa literal_value


atau column_list atau asterisk (*).
FROM. Diikuti oleh <table_name> sesuai dengan column_list.
Jadi jika ada data yang diambil dari kolom tertentu, harus
diketahui kolom tersebut diambil dari tabel mana. Tabel
pada FROM dapat diikuti dengan alias untuk mempermudah
penulisan khususnya ketika join dan subquery.
WHERE. Diikuti oleh kondisi secara umum.
GROUP BY. Diikuti oleh <select_list>. Bagian ini muncul
ketika ada fungsi-fungsi agregasi.
HAVING. Diikuti oleh kondisi hanya untuk fungsi-fungsi
agregasi.
ORDER BY. Diikuti oleh <select_list>.

Praktikum Pemrograman Basis Data

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';

Contoh pada Kode 1.2mengembalikan 1 baris data dengan 2


kolom. <select_list> dalam contoh tersebut tidak menggunakan
data yang tersimpan dalam tabel, dan inilah yang disebut sebagai
literal_value. Penggunaan konkrit literal_value umumnya
digunakan bersama dengan column_list untuk menghasilkan
sebuah expression.
Mengambil data dari tabel
(data retrieval)
Fungsi utama dari SELECT adalah untuk pengambilan data (data
retrieval) yang tersimpan dalam (beberapa) tabel. Perhatikan
contoh berikut:
Kode 1.3
SELECT
FROM

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

Praktikum Pemrograman Basis Data

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;

Hasil dari querypada Kode 1.4tersebut adalah banyak NIMyang


sama. Untuk mengeliminasi data-data yang sama, dibutuhkan
DISTINCT. Dengan mengimplementasikan DISTINCT, querypada
Kode 1.4menjadi seperti ini:
Kode 1.5
SELECT
FROM

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

Praktikum Pemrograman Basis Data

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

Beberapa contoh penggunaan operator pembanding dapat


dilihat pada query berikut:
Kode 1.7
SELECT
FROM
WHERE

pg.8

*
mahasiswa
nim BETWEEN'05390102208'AND
'05410104190';

Praktikum Pemrograman Basis Data

SQL (sekuel)
SELECT
WHERE

*FROMmahasiswa
nim IN('05390102208','05410104190');

SELECT
WHERE

*FROMmahasiswa
naam LIKE'%amb%';

SELECT
WHERE

*FROMmahasiswa
alamat ISNULL;

Penggunaan operator BETWEEN dan IN pada Kode


1.7menghasilkan data yang sama. Sedangkan untuk LIKE akan
menghasilkan seluruh mahasiswa yang namanya mempunyai
kata amb di tengah-tengahnya. Sedikit berbeda dengan
penggunaan operator lain yang membutuhkan data yang presisi,
LIKE menggunakan wildcards untuk mencari data yang mirip
dengan data yang dicari. Wildcards ini dibagi menjadi 2 yaitu (1)
% untuk merepresentasikan banyak karakter, dan (2) _ untuk
merepresentasikan satu karakter. Contoh penggunaan _ bisa
dilihat pada contoh berikut:
Kode 1.8
SELECT
FROM
WHERE

*
mahasiswa
nama LIKE'_e%';

Pada Kode 1.8, query akan menghasilkan seluruh data


mahasiswa yang karakter kedua namanya memiliki huruf e.
Bagaimana jika kondisi yang dibutuhkan berjumlah lebih dari
satu? Jawabannya adalah dengan menggunakan operator logika
untuk memisahkan kondisi-kondisi tersebut. Operator logika
memakai tabel kebenaran sebagai acuan dalam pembentukan
nilai akhir seluruh kondisi. Perhatikan contoh berikut:
Kode 1.9
SELECT
FROM
WHERE

nim, nama, kota


mahasiswa
kota='Surabaya'and nim='05390102208';

Hasil:
nim
05390102208

nama
Cinta

kota
Surabaya

Praktikum Pemrograman Basis Data

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';

Cara seperti ini akan menampilkan data produk dengan urutan


yang sama seperti urutan data di-insert-kan. Untuk dapat melihat
urutan rangking harga produk, cukup dengan menambahkan
kata kunci ORDER BY. Pengurutan ini bisa dibentuk dari kecil ke
besar (ASCending) atau sebaliknya (DESCending). Sehingga
query pada Kode 1.10berubah menjadi:
Kode 1.11
SELECT
FROM
WHERE
ORDERBY

pg.10

nim, kode_mk, uas


nilai
nid='010103'
uas DESC;

Praktikum Pemrograman Basis Data

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.

Contoh penggunaan operator aritmatika dapat dilihat pada query


berikut:
Kode 1.12
SELECT 1 + 1;
SELECT

'Tegar'+' '+'Heru';

SELECT

5 1;

SELECT
FROM

uas * 0.3
nilai;

SELECT
FROM

tugas / 4
nilai;

Praktikum Pemrograman Basis Data

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

Penggunaan GROUP BY mampu memilah data yang demikian


besar kedalam kelompok-kelompok data untuk mendapatkan
informasi-informasi yang lebih spesifik. Sebagai contoh, untuk
menampilkan rata-rata nilai UAS, nilai UAS terrendah, dan nilai
UAS tertinggi dari seluruh mata kuliah dapat dilihat pada query
berikut:
Kode 1.14
SELECT
FROM
GROUPBY

pg.12

kode_mk,AVG(uas) rata_nilai,
MAX(uas) nilai_tertinggi,
MIN(uas) nilai_terendah
nilai
kode_mk;

Praktikum Pemrograman Basis Data

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

Untuk dapat menggunakan kata kunci GROUP BY dengan baik,


ada beberapa aturan dalam pemakaian GROUP BY yang harus
diperhatikan. Aturan-aturan tersebut antara lain:
1.
2.
3.

Jika ada agregasi (SUM, MIN, MAX, COUNT, AVG) dalam


<select_list>, kolom tanpa agregasi harus terdaftar dalam
GROUP BY.
Dengan menggunakan WHERE, kita bisa mengabaikan barisbaris tertentu sebelum dilakukan agregasi dan
pengelompokan.
Isi dari GROUP BY adalah kolom, bukan alias.

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

Praktikum Pemrograman Basis Data

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

Praktikum Pemrograman Basis Data

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

Querypada Kode 1.18menghasilkan sejumlah baris yang


merupakan kombinasi jumlah data antara mahasiswa dan nilai.
Dari operator pembanding yang digunakan, sudah jelas bahwa
query ini menghasilkan baris yang mempunyai data yang sama
diantara duatable (produk dan kategori). Join jenis ini dapat juga
disebut dengan equijoin.
Perkembangan SQL ANSI sejak tahun 1990-an, menambahkan
model baru dalam join, yaitu menggunakan hanya kata kunci
FROM sebagai referensi utama baik untuk tabel maupun untuk
penggabungannya. Sintak untuk join tipe ini adalah sebagai
berikut:
Kode 1.19
SELECT <select_list>
FROM
<table1> JOIN <table2>
ON < table1.PK = table2.FK> [[AND ...]
JOIN ...];

Praktikum Pemrograman Basis Data

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;

Antara model lama dengan model baru, tidak ada perbedaan


signifikan pada performa dan execution plan untuk data-data
sederhana, namun berbeda halnya dengan data-data komplek
dengan ruang lingkup yang besar.
Ada 2 tipe join, yaitu INNER JOIN yang lebih menekankan pada
data yang sama, dan OUTER JOIN (yang merupakan kebalikan
dari INNER JOIN).
Inner Join
Tujuan utama dari inner joinadalah menyamakan nilai baris pada
sebuah tabel dengan tabel lain menggunakan kolom yang sama
(tipe dan panjang [jika ada]). 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. Cara yang dapat dipakai untuk menampilkan data Indah
tersebut tanpa nilainya adalah dengan menggunakan outer join.
Pengubahan sintak joinmenjadi outer join dapat dilihat pada
Kode 1.21:
Kode 1.21
SELECT <select_list>
FROM
<tabel1 sebagai kiri>
<LEFT/RIGHT> [OUTER] JOIN
<tabel2 sebagai kanan>
ON <table1.PK = table2.FK> [AND ...];

Dalam sintak tersebut, ada LEFT/RIGHT. Penggunaan LEFT akan


memproses seluruh data yang ada pada tabel sebelah kiri
pg.16

Praktikum Pemrograman Basis Data

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';

Praktikum Pemrograman Basis Data

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>);

Namun, tidak menutup kemungkinan penggunaan subquery


sebagai bagian dari data. Dalam artian query didalam kata kunci
SELECT ataupun didalam kata kunci FROM. Queryjenis ini biasa
disebut sebagai INLINE VIEW. Sebagai contoh penggunaan
subquery, perhatikan contoh berikut:
Kode 1.25
SELECT nim, nama
FROM
mahasiswa
WHERE
LEFT(nim,2)=
(SELECT LEFT(nim,2)
FROM
mahasiswa
WHERE
nama='Entin');

Kode 1.25merupakan versi subquery dariKode 1.23.


Menghasilkan data yang sama namun dengan solusi yang
berbeda. Solusi subquery pada Kode 1.25mencari terlebih
dahuluangkatan si Entin. Hasil dari pencarian ini digunakan
sebagai acuan untuk main query.

pg.18

Praktikum Pemrograman Basis Data

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()

Beberapa contoh penggunaan SQL Function dapat dilihat pada


Kode 1.26. CONVERT digunakan untuk mengubah nilai 1000 dari
bentuk numeric ke bentuk varchar agar bisa digabungkan dengan
kata Rupiah. CEILING, FLOOR, dan ROUND digunakan masingmasing untuk pembulatan keatas, pembulatan kebawah,
pembulatan berdasarkan nilai dibelakang koma (sesuai dengan
tingkat presisi yg dipakai). GETDATE digunakan untuk
mengambil tanggal sistem. DATEPART digunakan untuk
Praktikum Pemrograman Basis Data

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());

Satu lagi fungsi yang bisa dipakai untuk melakukan conditional


expression (untuk menggantikan peran IF ELSE dalam
programming), yaitu CASE. Sintak CASE dapat dilihat pada kode
berikut:
Kode 1.27
CASE
WHEN <kondisi> THEN <statement>
[WHEN <kondisi> THEN <statement>]
[WHEN <kondisi> THEN <statement>]
...
ELSE <statement>
END

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

Praktikum Pemrograman Basis Data

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>);

Perhatikan contoh berikut:


Kode 1.29
INSERT INTO mahasiswa
VALUES ('08410104003','Jenny',
'Jl. Krembangan 50','Surabaya',
'W','B');

Praktikum Pemrograman Basis Data

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');

Bagaimana jika data yang dimasukkan adalah data dari tabel


lain? Untuk menjawab pertanyaan ini, SQL Server menggunakan
perintah INSERT INTO SELECT.
Modifikasi data
Modifikasi data diperlukan ketika terjadi perubahan pada data
orisinilnya. Untuk memodifikasi data, dibutuhkan perintah
UPDATE. Perintah ini dapat memodifikasi satu, banyak, atau
semua baris data dalam sebuah tabel. Jumlah data yang
dimodifikasi bergantung pada kondisi (kriteria) yang diberikan
dalam query UPDATE. Sintak UPDATE dapat dilihat pada kode
berikut:
Kode 1.31
UPDATE <tabel>
SET
<kolom1> = <nilai1>
[,<kolom2> = <nilai2>]
WHERE
<kondisi1>;

Perhatikan contoh berikut:


Kode 1.32
UPDATE
SET
WHERE

mahasiswa
sts_nikah ='M'
nim ='08410104003';

Kode 1.32mencoba memodifikasi data mahasiswa. Modifikasi


dilakukan untuk mengubah status nikahmahasiswa, dengan nim
08410104003, dari yang awalnya B menjadi M. Jadi bisa dilihat
bahwa nilai yang diberikan pada kata kunci SET merupakan nilai
baru.

pg.22

Praktikum Pemrograman Basis Data

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>;

Contoh sederhananya adalah sebagai berikut:


Kode 1.34
DELETE
WHERE

mahasiswa
nim ='08410104003';

Kode 1.34mencoba untuk menghapus data mahasiswa dengan


nim 08410104003. Penghapusan bisa sukses jika data
mahasiswa tersebut tidak dipakai di tabel Nilai.

Praktikum Pemrograman Basis Data

pg.23

SQL (sekuel)

Latihan
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

13.
14.

Tampilkan seluruh data mahasiswa.


Tampilkan data mahasiswa yang tinggal di kota Surabaya.
Tampilkan nama mahasiswa yang mempunyai huruf a atau
huruf A.
Tampilkan nama mahasiswa yang huruf kedua terakhir dari
namanya mempunyai huruf n.
Tampilkan nim, namadan nilai tugas mahasiswa.
Tampilkan 3 karakter terakhir dari nama mahasiswa.
Buat email berdasarkan nama mahasiswa dan gabungkan
dengan @gmail.com.
Hitung jumlah mahasiswa masing-masing dosen. Ambil
datanya dari tabel nilai.
Tampilkan nama mahasiswa dan nama dosen untuk dosen
dengan nid 010306.
Tampilkan mahasiswa yang mempunyai dosen yang sama
dengan Entin.
Tampilkan mahasiswa yang tidak memiliki nilai.
Masukkan data mahasiswa berikut ini:
NIM: nim Anda
Nama: nama lengkap Anda
Alamat: alamat rumah/kos Anda
Kota: sesuai alamat
Jns_kelamin: jenis kelamin Anda
Sts_nikah: M
Ubah status nikah Anda dari M menjadi B.
Hapus data Anda.

pg.24

Praktikum Pemrograman Basis Data