KAMUS ISTILAH
Field = atribut
Pernyataan = query
Record = data / baris data
Relasi = tabel
1
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Tujuan Instruksional Umum (TIU) : Mahasiswa mampu memahami dan membuat perintah
SQL
2
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Tabel Warehouses
Warehouse Location Manager
sub1 south J. Black
sub2 west C. Clarence
center1 north J. Tran
center2 south B. Costello
Tabel Inventory
Warehouse PartNo QtyInStore
sub1 pc6 100
sub1 mx7 200
sub2 jw3 120
sub2 bb11 83
sub2 pc6 19
center1 mx7 205
center1 jw3 111
Tabel Parts
PartNo Description Weight MaxDim Color
px1 Drill 70.0 7.0 blue
pc6 Saw 50.0 12.0 black
mx7 Hammer 90.0 7.0 gray
bb11 Saw 60.0 17.0 brown
jw3 Drill 30.0 15.0 blue
Tabel Requisitions
ReqNo ProjNo DateNeeded WhereNeeded
3 pr1 870620 south
4 pr3 870703 north
5 pr1 870612 east
6 pr2 870702 west
3
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Tabel ReqLines
ReqNo PartNo QtyNeeded QtyFilled
3 pc6 90 10
3 jw3 30 0
4 pc6 50 0
4 mx7 100 20
5 jw3 40 10
5 bb11 70 0
5 pc6 22 15
6 jw3 90 0
Maka,
CREATE DATABASE StoreHouse;
Menghapus Database
Sintaks dasar :
DROP DATABASE database_name;
Maka,
CREATE TABLE Parts (
PartNo varchar(255),
Description varchar(255),
Weight real,
MaxDim real,
Color varchar(255)
);
4
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Menghapus Tabel
Pernyataan DROP TABLE digunakan untuk menghapus tabel yang ada di dalam database.
Sintaks dasar :
DROP TABLE table_name;
5
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Catatan. Key MODIFY digunakan pada MySQL dan Oracle, sedangkan key ALTER digunakan
pada SQL Server dan MS Access.
Primary Key
PRIMARY KEY secara unik mengidentifikasi setiap record dalam tabel. Primary key harus
berisi nilai unik, dan tidak boleh berisi nilai NULL. Sebuah tabel hanya dapat memiliki satu
primary key. Primary key dapat dibentuk dari satu kolom atau gabungan beberapa kolom (field).
Contoh :
CREATE TABLE Parts (
PartNo varchar(255),
Description varchar(255),
Weight real,
MaxDim real,
Color varchar(255),
PRIMARY KEY (PartNo)
);
Query SQL di atas, menunjukkan pendefinisian satu primary key untuk tabel Requisitions, yaitu
PK_Req dimana nilai dari primary key tersebut dibentuk dari dua kolom yaitu kolom ReqNo +
ProjNo.
Karena sebelumnya kalian telah membuat tabel Parts dan Requisitions, maka kalian perlu
memodifikasi tabel-tabel tersebut untuk menentukan primary key dari masing-masing tabel.
Maka,
6
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Foreign Key
FOREIGN KEY adalah kunci yang digunakan untuk menghubungkan dua tabel bersama-
sama. Foreign key adalah sebuah kolom (atau kumpulan beberapa kolom) dalam satu tabel yang
merujuk ke primary key di tabel lain.
Kolom PartNo dalam tabel Parts adalah Primary Key pada tabel Parts. Kolom ReqNo dalam
tabel Requisitions adalah Primary Key pada tabel Requisitions. Kolom PartNo dan kolom ReqNo
dalam tabel ReqLines adalah Foreign Key yang masing-masing merujuk ke tabel Parts dan tabel
Requisitions.
Contoh :
CREATE TABLE Requisitions (
ReqNo int,
ProjNo varchar(255),
DateNeeded int,
WhereNeeded varchar(255),
FOREIGN KEY (ReqNo) REFERENCES Requisitions(ReqNo),
FOREIGN KEY (PartNo) REFERENCES Parts(PartNo)
);
Karena sebelumnya kalian telah membuat tabel ReqLines, maka kalian perlu memodifikasi
tabel tersebut untuk menentukan foreign key dari tabel tersebut.
Maka,
ALTER TABLE ReqLines
ADD FOREIGN KEY (ReqNo) REFERENCES Requisitions(ReqNo);
7
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Jika akan menambahkan nilai untuk semua kolom tabel, maka tidak perlu menentukan nama
kolom dalam query SQL seperti cara pertama di atas. Namun, pastikan urutan nilainya dalam
urutan yang sama dengan kolom di tabel.
Cara penulisan kedua, sintaks INSERT INTO adalah :
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
Sintaks diatas digunakan jika kalian ingin memilih semua field yang tersedia di tabel untuk
ditampilkan datanya. Tanda asterik (*) menentukan semua field menjadi output.
Namun, jika kalian ingin memilih beberapa field saja dari tabel yang datanya akan ditampilkan,
maka sintaks SELECT yang digunakan sebagai berikut :
SELECT column1, column2, ...
FROM table_name;
Contoh SELECT * :
SELECT * FROM Requisitions;
8
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Klausa WHERE tidak hanya digunakan dalam pernyataan SELECT, tetapi juga digunakan dalam
pernyataan UPDATE, DELETE, dan lainnya.
Operator berikut dapat digunakan di klausa WHERE :
Operator Keterangan
= Sama dengan
> Lebih besar dari
< Lebih kecil dari
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
<> Tidak sama dengan / !=
BETWEEN Antara rentang tertentu
LIKE Mencari pattern (pola) (% atau _ )
IN Untuk menentukan beberapa nilai yang mungkin untuk kolom
Contoh :
SELECT ReqNo, DateNeeded, WhereNeeded FROM Requisitions
WHERE ProjNo = ‘pr1’;
9
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Query terakhir akan memilih baris data dimana Description dimulai dengan huruf ‘D’.
Pencocokkan string dapat dinyatakan pada awal, akhir atau sembarang tempat dalam string.
Dengan demikian, %D akan menemukan nilai berakhiran dengan ‘D’ dan %D% akan menemukan
nilai yang memasukkan ‘D’ pada sembarang tempat dalam string.
Sintaks AND / OR :
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND|OR condition2 AND|OR condition3 ...;
Sintaks NOT :
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
Contoh :
SELECT PartNo
FROM Parts
WHERE Weight > 55 AND MaxDim > 10;
10
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
SELECT PartNo
FROM Parts
WHERE Description = ’Saw’ OR Description = ‘Hammer’;
Contoh ORDER BY :
SELECT ReqNo, PartNo, QtyNeeded FROM ReqLines
WHERE QtyNeeded > 50
ORDER BY QtyNeeded;
Query SQL di atas menampilkan seluruh data dari tabel ReqLines, data diurutkan berdasarkan
kolom PartNo dan kolom QtyNeeded. Ini artinya bahwa data akan diurutkan berdasarkan PartNo,
tapi jika beberapa baris data mempunyai PartNo yang sama, maka akan diurutkan berdasarkan
QtyNeeded.
11
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Query SQL di atas menampilkan seluruh data dari tabel ReqLines, data diurutkan menaik
berdasarkan kolom PartNo dan diurutkan menurun berdasarkan kolom QtyNeeded.
b. Duplikasi
Pernyataan SELECT DISTINCT digunakan untuk mengembalikan hanya nilai yang
berbeda. Di dalam tabel, sebuah kolom sering kali mengandung banyak nilai duplikat dan
terkadang kalian hanya ingin me-list-kan nilai yang berbeda. Kata kunci DISTINCT menentukan
nilai atribut tidak boleh duplikasi pada output.
Sintaks SELECT DISTINCT :
SELECT DISTINCT column1, column2, ...
FROM table_name;
Contoh :
SELECT DISTINCT ProjNo
FROM Requisitions;
Dari query SQL di atas, sebuah nomor project hanya akan keluar satu kali jika terdapat lebih dari
satu permintaan untuk project tersebut. Jika terdapat lebih dua kolom dalam klausa SELECT
maka DISTINCT diberlakukan pada kombinasi nilai dari kolom-kolom.
Perhatikan klausa WHERE dalam pernyataan UPDATE. Klausa WHERE menentukan record
(baris data) mana yang harus di-update. Jika klausa WHERE dihilangkan, semua record dalam
tabel akan diperbarui.
12
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
UPDATE Requisitions
SET WhereNeeded = ‘west’;
UPDATE Requisitions
SET DateNeeded = 870703
WHERE ProjNo = ‘pr1’;
Perhatikan klausa WHERE dalam pernyataan DELETE. Klausa WHERE menentukan record
mana yang harus dihapus. Jika klausa WHERE dihilangkan, semua record dalam tabel akan
dihapus.
Contoh penggunaan DELETE :
DELETE FROM Requisitions
WHERE ProjNo = ‘pr3’;
Perintah diatas akan menghapus semua baris yang ditentukan pada kondisi WHERE. Kalian juga
dapat menghapus semua baris data dalam tabel tanpa menghapus tabel. Artinya struktur tabel,
atribut, dan indeks akan utuh.
Contoh :
DELETE FROM Requisitions;
13
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
a. MIN() Function
Sintaks dasar :
SELECT MIN(column_name)
FROM table_name;
Jika menggunakan suatu kondisi tertentu, maka gunakan klausa WHERE untuk memfilter record
dari tabel :
SELECT MIN(column_name)
FROM table_name
WHERE condition;
Contoh :
SELECT MIN(Weight)
FROM Parts;
Catatan. AS adalah akronim dari ALIASES. Aliases digunakan untuk memberi nama sementara
pada tabel atau kolom dalam tabel. Alias sering digunakan untuk membuat nama kolom lebih
mudah dibaca. Alias hanya berlaku selama proses query.
b. MAX() Function
Sintaks dasar :
SELECT MAX(column_name)
FROM table_name;
Jika menggunakan suatu kondisi tertentu, maka gunakan klausa WHERE untuk memfilter record
dari tabel :
14
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
SELECT MAX(column_name)
FROM table_name
WHERE condition;
Contoh :
SELECT MAX(Weight)
FROM Parts;
c. COUNT() Function
Sintaks dasar :
SELECT COUNT(column_name)
FROM table_name;
Jika menggunakan suatu kondisi tertentu, maka gunakan klausa WHERE untuk memfilter record
dari tabel :
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
Contoh :
SELECT COUNT(PartNo)
FROM Parts;
SELECT COUNT(*)
FROM Parts;
SELECT COUNT(PartNo)
FROM Parts
WHERE Description = ‘Drill’;
d. AVG() Function
Sintaks dasar :
SELECT AVG(column_name)
FROM table_name;
15
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Jika menggunakan suatu kondisi tertentu, maka gunakan klausa WHERE untuk memfilter record
dari tabel :
SELECT AVG(column_name)
FROM table_name
WHERE condition;
Contoh :
SELECT AVG(MaxDim)
FROM Parts;
e. SUM() Function
Sintaks dasar :
SELECT SUM(column_name)
FROM table_name;
Jika menggunakan suatu kondisi tertentu, maka gunakan klausa WHERE untuk memfilter record
dari tabel :
SELECT SUM(column_name)
FROM table_name
WHERE condition;
Contoh :
SELECT SUM(QtyNeeded)
FROM ReqLines
WHERE PartNo = ‘pc6’;
16
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Tujuan Instruksional Umum (TIU) : Mahasiswa mampu memahami SQL dengan banyak tabel.
17
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Sebelumnya telah dibahas bagaimana data diambil dari sebuah relasi/tabel tunggal. Tetapi,
terdapat banyak kejadian ketika data harus diambil dari lebih dari satu tabel untuk menjawab
sejumlah query. Salah satu cara untuk mengambil data dari lebih dari satu tabel adalah pertama
dengan menggabungkan dua atau lebih tabel menjadi satu relasi, dan kemudian menggunakan
pernyataan/query SQL untuk mengambil data dari tabel yang digabungkan tersebut.
Penggabungan tabel disebut dengan join. Hal ini tentu saja memungkinkan untuk menciptakan
dan menyimpan tabel baru yang terbentuk dalam sistem. Akan tetapi, SQL tidak membutuhkan
tabel yang digabungkan seperti itu untuk benar-benar dibuat. Sebagai gantinya, cara kedua, ada
konstruk yang menerapkan penggabungan yang seperti demikian, dan pernyataan SQL dapat
digunakan untuk menyatakan hal ini atau penggabungan secara virtual tanpa tabel yang sebenar-
benarnya yang disimpan selama pemrosesan pernyataan SQL. Dan data diambil seolah-olah dari
tabel gabungan yang nyata ada.
2.1. Join
Join dua tabel, misalkan tabel ReqLines dan Parts, diilustrasikan pada tabel NewReqLines
berikut.
Tabel Inventory
Warehouse PartNo QtyInStore
sub1 pc6 100
sub1 mx7 200
sub2 jw3 120
sub2 bb11 83
sub2 pc6 19
center1 mx7 205
center1 jw3 111
Tabel ReqLines
ReqNo PartNo QtyNeeded QtyFilled
3 pc6 90 10
3 jw3 30 0
4 pc6 50 0
4 mx7 100 20
5 jw3 40 10
5 bb11 70 0
5 pc6 22 15
6 jw3 90 0
18
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Tabel Parts
PartNo Description Weight MaxDim Color
px1 Drill 70.0 7.0 blue
pc6 Saw 50.0 12.0 black
mx7 Hammer 90.0 7.0 gray
bb11 Saw 60.0 17.0 brown
jw3 Drill 30.0 15.0 blue
Tabel NewReqLines
ReqNo PartNo QtyNeeded QtyFilled Weight Description MaxDim Color
3 pc6 90 10 50.0 Saw 12.0 black
3 jw3 30 0 30.0 Drill 15.0 blue
4 pc6 50 0 50.0 Saw 12.0 black
4 mx7 100 20 90.0 Hammer 7.0 gray
5 jw3 40 10 30.0 Drill 15.0 blue
5 bb11 70 0 60.0 Saw 17.0 brown
5 pc6 22 15 50.0 Saw 12.0 black
6 jw3 90 0 30.0 Drill 15.0 blue
Perhatikan tabel NewReqLines, proses join dua tabel mempunyai sebuah kondisi join. Kondisi
tersebut merincikan kriteria yang digunakan untuk menggabungkan (join) dua baris dari masing-
masing kedua tabel. Pada tabel tersebut, kondisi join adalah nilai PartNo dalam baris yang
digabungkan harus sama. Lalu, informasi dapat diambil dari tabel yang digabungkan dengan
menggunakan pernyataan SELECT.
Penggabungan (join) dinyatakan dalam pernyataan SQL dengan memasukkan semua tabel
untuk digabungkan dalam klausa FROM dan membuat suatu kondisi join dalam klausa WHERE.
Contoh pernyataan SELECT yang menjelaskan tentang join adalah :
SELECT ReqLines.ReqNo, ReqLines.PartNo, Parts.Weight
FROM ReqLines, Parts
WHERE ReqLines.PartNo = Parts.PartNo;
Outputnya adalah :
ReqNo PartNo Weight
3 pc6 50.0
3 jw3 30.0
4 pc6 50.0
4 mx7 90.0
5 jw3 30.0
5 bb11 60.0
19
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
5 pc6 50.0
6 jw3 30.0
Untuk memperoleh join tabel seperti tabel NewReqLines, dapat menuliskan query SQL seperti
berikut :
SELECT *
FROM ReqLines, Parts
WHERE ReqLines.PartNo = Parts.PartNo;
Atau
SELECT ReqLines.*, Parts.*
FROM ReqLines, Parts
WHERE ReqLines.PartNo = Parts.PartNo;
Join tidak hanya dilakukan kepada dua tabel saja, tetapi juga dapat dilakukan kepada lebih dari
dua tabel. Contoh query SQL untuk join yang melibatkan tiga tabel dalam menemukan seluruh
project yang mengorder Saw :
SELECT ProjNo, ReqLines.PartNo
FROM Requisitions, ReqLines, Parts
WHERE Requisitions.ReqNo = ReqLines.ReqNo AND ReqLines.PartNo = Parts.PartNo
AND Parts.Description = ‘Saw’;
Sejauh ini telah diasumsikan bahwa semua contoh join dibuat untuk menemukan baris
yang mempunyai nilai sama dari beberapa atribut. Join juga dapat dibuat untuk menggabungkan
baris yang mempunyai atribut yang memenuhi kondisi selain sama. Contoh join :
SELECT ReqNo, Warehouse, Inventory.PartNo, QtyNeeded - QtyFilled, QtyInStore
FROM ReqLines, Inventory
WHERE ReqLines.PartNo = Inventory.PartNo
AND QtyNeeded – QtyFilled < Inventory.QtyInStore;
20
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
SELECT ReqNo
FROM ReqLines
WHERE PartNo IN
(SELECT PartNo
FROM Parts subquery
WHERE Description = ‘Saw’);
Subquery tersebut akan mengevaluasi pernyataan SQL yang bagian dalam terlebih dahulu.
Pernyataan SQL bagian dalam untuk menemukan PartNo dari tabel Parts dimana Description
adalah ‘Saw’. Diperoleh PartNo-nya adalah {‘pc6’, ‘bb11’}. Nilai-nilai ini sekarang menggantikan
untuk pernyataan SQL bagian dalam tersebut dan kemudian pernyataan SQL di bagian luar
dievaluasi. Pernyataan SQL bagian luar sekarang menjadi :
SELECT ReqNo
FROM ReqLines
WHERE PartNo IN (‘pc6’, ‘bb11’);
Informasi yang diambil dengan menggunakan subquery seperti tersebut dapat juga diperoleh
dengan menggunakan join. Dengan demikian informasi terkait ReqNo dari seluruh permintaan
dapat juga ditemukan dengan menggunakan pernyataan join berikut :
SELECT ReqLines.ReqNo
FROM ReqLines, Parts
WHERE ReqLines.PartNo = Parts.PartNo AND Parts.Description = ‘Saw’;
Terdapat satu perbedaan antara subquery dan join. Pada subquery, tidak mungkin untuk
menyertakan atribut dari tabel bersarang (dalam contoh tersebut adalah atribut dari tabel Parts,
yaitu PartNo) ke bagian output (pada klausa SELECT tabel ReqLines).
Contoh subquery lainnya :
SELECT PartNo
FROM Parts
WHERE Weight >
(SELECT Weight
FROM Parts
WHERE PartNo = ‘pc6’);
Level Subquery
Adalah hal yang mungkin untuk memiliki subquery yang bersarang pada level manapun.
Juga memungkinkan untuk memiliki lebih dari satu subquery pada level yang sama.
21
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Contoh :
SELECT ReqNo
FROM ReqLines
WHERE PartNo IN
(SELECT PartNo
FROM Parts
WHERE Description = ‘Drill’)
AND ReqNo IN
(SELECT ReqNo
FROM Requisitions
WHERE ProjNo = ‘pr1’);
Perhatikan pernyataan SQL diatas, terdapat dua subquery pada level yang sama. Keduanya
dievaluasi sebelum query bagian luar dievaluasi. Sehingga query luar (outer) menjadi :
SELECT ReqNo
FROM ReqLines
WHERE PartNo IN (‘px1’, ‘jw3’) AND ReqNo IN (3, 5);
Subquery Berkorelasi
Terdapat kasus dimana kondisi WHERE dalam subquery harus merujuk ke sebuah kolom
pada query level atas. Perumusan yang demikian disebut dengan subquery berkorelasi.
Contoh :
SELECT ReqNo, PartNo
FROM ReqLines
WHERE PartNo IN
(SELECT PartNo
FROM Inventory
WHERE QtyInStore > ReqLines.QtyNeeded - ReqLines.QtyFilled);
22
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Namun demikian, harus dicatat bahwa ada satu batasan subquery berkorelasi, yaitu masih tidak
memungkinkan untuk mencetak nilai kolom dari kolom dalam subquery. Dengan demikian,
atribut Warehouse tidak dapat ditampilkan karena bukan atribut dari tabel klausa SELECT di
bagian luar (outer query).
Tidak adanya baris data ditentukan dengan menggunakan NOT EXISTS. Contohnya :
SELECT ReqNo
FROM Requisitions
WHERE NOT EXISTS
(SELECT *
FROM ReqLines
WHERE PartNo = ‘jw3’ AND Requisitions.ReqNo = ReqLines.ReqNo);
23
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Contoh :
SELECT Inventory.PartNo, SUM(QtyInStore)
FROM Inventory, Parts
WHERE Inventory.PartNo = Parts.PartNo AND Parts.Description = ‘Saw’
GROUP BY Inventory.PartNo;
Query SQL diatas, pertama kali menggabungkan dua tabel dan mengambil seluruh baris data
dengan Description ‘Saw’. Kemudian mengelompokkan baris data berdasarkan PartNo, sehingga
memberikan sebuah list total dari setiap part dimana haruslah sebuah ‘Saw’. Praktekkan query
SQL diatas terhadap Database yang telah Anda buat agar terlihat outputnya. Amati output dengan
cermat dan analisa query SQL tersebut, apakah sesuai antara query SQL dan outputnya?
Juga dapat untuk menggunakan kombinasi atribut untuk mengelompokkan baris data.
Contoh :
SELECT Requisitions.ProjNo, ReqLines.PartNo, SUM(QtyNeeded)
FROM Requisitions, ReqLines
WHERE Requisitions.ReqNo = ReqLines.ReqNo
GROUP BY Requisitions.ProjNo, ReqLines.PartNo;
24
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Perhatikan query SQL diatas. Praktekkan query SQL tersebut terhadap Database yang telah Anda
buat agar terlihat outputnya. Amati output dengan cermat dan analisa query SQL tersebut,
apakah sesuai antara query SQL dan outputnya?
Perhatikan. Query SQL tersebut mencari warehouse yang dapat men-supply seluruh keperluan
untuk part ‘pc6’. Subquery disini menghitung jumlah part yang masih dibutuhkan, dan totalnya
adalah 137 pcs. Output dari query SQL tersebut adalah list kosong karena tidak ada warehouse
yang memiliki 137 pcs untuk part ‘pc6’. Praktekkan query SQL diatas terhadap Database yang
telah Anda buat agar terlihat outputnya. Amati output dengan cermat dan analisa query SQL
tersebut, apakah sesuai antara query SQL dan outputnya?
25
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Contoh :
SELECT PartNo, Warehouse
FROM Inventory
WHERE QtyInStore >
(SELECT SUM(QtyNeeded – QtyFilled)
FROM ReqLines
WHERE ReqLines.PartNo = Inventory.PartNo);
Perhatikan. Query SQL tersebut mencari part dan warehouse yang dapat men-supply seluruh
keperluan untuk part-part yang ada. Part tersebut dapat di-supply oleh satu warehouse.
Praktekkan query SQL diatas terhadap Database yang telah Anda buat agar terlihat outputnya.
Amati output dengan cermat dan analisa query SQL tersebut, apakah sesuai antara query SQL
dan outputnya?
Pernyataan SQL tersebut mencari warehouse dengan jumlah part ‘pc6’ terbesar. Output-nya
adalah warehouse ‘sub1’. Praktekkan query SQL diatas terhadap Database yang telah Anda buat
agar terlihat outputnya. Amati output dengan cermat dan analisa query SQL tersebut, apakah
sesuai antara query SQL dan outputnya? Lalu, praktekkan pula query SQL dibawah ini. Apakah
menghasilkan output atau syntax error?
Contoh :
SELECT Warehouse, MAX(QtyInStore)
FROM Inventory
WHERE PartNo = ‘pc6’;
Fungsi juga dapat muncul di salah satu dari sejumlah subquery dalam pernyataan SQL. Contoh,
pernyataan SQL berikut mencari request paling awal yang dibuat atas part ‘pc6’ :
26
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
SELECT ReqNo
FROM Requisitions query luar (outer query)
WHERE ReqNo IN
(SELECT ReqNo
FROM ReqLines subquery
WHERE PartNo = ‘pc6’)
AND DateNeeded = query
(SELECT MIN(DateNeeded)
FROM Requisitions subquery
WHERE ReqNo IN
(SELECT ReqNo
FROM ReqLines subquery
WHERE PartNo = ‘pc6’));
Praktekkan query SQL diatas terhadap Database yang telah Anda buat agar terlihat outputnya.
Amati output dengan cermat dan analisa query SQL tersebut, apakah sesuai antara query SQL
dan outputnya?
Penggunaan Fungsi Dalam Klausa WHERE Untuk Menguji Grup Atau Baris Data
Menggabungkan fungsi subquery dengan pengelompokan di tingkat luar (outer).
Membandingkan nilai-nilai yang ditemukan melalui pengelompokkan baris data dalam query
luar (outer) dengan fungsi-fungsi melakukan perhitungan dalam subquery.
Contoh :
SELECT PartNo
FROM Inventory
GROUP BY PartNo
HAVING SUM(QtyInStore)
< (SELECT SUM(QtyNeeded – QtyFilled)
FROM ReqLines
WHERE Inventory.PartNo = ReqLines.PartNo);
Query SQL tersebut mencari part yang total jumlahnya dalam inventori dibawah dari jumlah yang
dibutuhkan dalam seluruh permintaan. Output dari query SQL tersebut adalah part ‘pc6’, karena
total jumlah part ‘pc6’ yang dibutuhkan adalah 137 sedangkan total jumlah part ‘pc6’ dalam
seluruh warehouse hanya 119. Praktekkan query SQL diatas terhadap Database yang telah Anda
buat agar terlihat outputnya. Amati output dengan cermat dan analisa query SQL tersebut,
apakah sesuai antara query SQL dan outputnya?
27
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
28
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
3.1. Pendahuluan
Bahasa SQL yang telah dijelaskan dalam bab sebelumnya sudah cukup untuk aplikasi
single-user yang mengizinkan single-user untuk mengisi data ke dalam database, dan mengambil
data tersebut sesuai kebutuhan. Lingkungan multi-user membutuhkan lebih banyak fasilitas.
Mereka memerlukan pendukung untuk berbagi data antar user dan ketika user mengubah
struktur database tanpa mempengaruhi user lainnya. Mereka juga harus mengizinkan user untuk
memeriksa struktur data dengan mengakses katalog sistem (system catalog).
29
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
membuat view yang hanya berisi data yang dibutuhkan pengguna untuk mengerjakan tugas
mereka.
View Tables
Translation of stored
tables to view tables
Stored Tables
a. Pendefinisian View
View didefinisikan menggunakan pernyataan SQL. Pernyataan pendefinisian view terdiri
dari dua bagian berikut.
CREATE VIEW <view-name> (<column-name> ... <column-name>)
AS <SQL statement>
Bagian pertama adalah klausa CREATE VIEW, dimana mendefinisikan nama tabel view beserta
atribut-atributnya. Bagian kedua adalah klausa AS, mendefinisikan bagaimana view diturunkan
dari tabel yang tersimpan. Bagian kedua ini adalah pernyataan SELECT. View didefinisikan
sebagai bagian (subset) dari tabel (relasi).
Silahkan dipraktekkan query SQL diatas untuk melihat view tabel PROJ1REQUESTS yang
dihasilkan. Tabel view tersebut hanya berisi tiga kolom yaitu, ReqNo, DateNeeded, dan
WhereNeeded dimana penamaan kolomnya diubah menjadi Request, DateWanted, dan
30
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
WhereWanted dalam view. Pengguna yang mendapatkan akses ke view tersebut hanya dapat
memperoleh informasi terkait daftar permintaan yang dibuat oleh project ‘pr1’, tidak project
lainnya. Informasi dari view tersebut dapat diambil dengan cara :
SELECT * FROM PROJ1REQUESTS
Silahkan dipraktekkan query SQL diatas untuk melihat view tabel UNFILLEDPARTS yang
dihasilkan. Tabel UNFILLEDPARTS tersebut dapat digunakan pengguna untuk memperoleh
detail informasi terkait part untuk satu project tertentu melalui pernyataan SELECT seperti
berikut.
SELECT Request, Part, QtyToBeFilled
FROM UNFILLEDPARTS
WHERE Project = ‘pr1’;
Query SQL diatas akan menampilkan semua part yang belum terisi/terpenuhi untuk project ‘pr1’.
Silahkan dipraktekkan query SQL tersebut untuk melihat output yang diperoleh.
View UNFILLEDPARTS terdiri dari dua tabel yang di-join. View juga mungkin untuk di-
create atas join dari banyak tabel. Contoh, sebuah view untuk mengambil informasi terkait
warehouse yang mempunyai jumlah yang cukup untuk mengisi daftar permintaan oleh project
didefinisikan sebagai berikut.
CREATE VIEW PARTLOCATION (Request, Part, QtyToBeFilled, WhereAvailable,
QtyAvailable, Project)
AS SELECT Requisitions.ReqNo, ReqLines.PartNo, QtyNeeded – QtyFilled,
Inventory.Warehouse, Inventory.QtyInStore, Requisitions.ProjNo
FROM Requisitions, ReqLines, Inventory
WHERE Requisitions.ReqNo = ReqLines.ReqNo AND QtyNeeded > QtyFilled AND
Inventory.PartNo = ReqLines.PartNo AND Inventory.QtyInStore > QtyNeeded
- QtyFilled;
31
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
Silahkan dipraktekkan query SQL diatas untuk melihat view tabel PARTLOCATION yang
dihasilkan. Tabel PARTLOCATION tersebut dapat digunakan pengguna untuk memperoleh
detail informasi misalkan terkait lokasi part untuk project tertentu. Contoh :
SELECT Request, Part, WhereAvailable
FROM PARTLOCATION
WHERE Project = ‘pr1’;
32
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi
DAFTAR PUSTAKA
33