Anda di halaman 1dari 24

Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

KAMUS ISTILAH

Field = atribut
Pernyataan = query
Record = data / baris data
Relasi = tabel

1
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

BAB 1. PERNYATAAN SQL

 Tujuan Instruksional Umum (TIU) : Mahasiswa mampu memahami dan membuat perintah
SQL

 Tujuan Instruksional Khusus :


Mahasiswa mampu :
1. Memahami konsep SQL
2. Membuat pernyataan SQL untuk menambah data, mencari, update dan hapus data
3. Menggunakan fungsi SQL

 Pokok Bahasan : Pernyataan SQL

 Sub Pokok Bahasan :


1. Pendahuluan
2. Pernyataan SQL
3. Kondisi pemilihan
4. Beberapa kondisi pemilihan tambahan
5. Fungsi dalam pernyataan SQL
6. Pernyataan saving dalam SQL
7. Updating database

2
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

1.1. SQL Database


Untuk mengilustrasikan perintah-perintah SQL dalam praktikum ini, akan dibangun
sebuah database StoreHouse yang salah satu kegiatannya adalah menyimpan data permintaan
barang oleh suatu lokasi cabang kantor dan rincian dari setiap barang tersebut. Data-data
tersebut akan disimpan dalam tabel Parts, tabel Requisitions, dan tabel ReqLines.

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

Tabel ReqLines
ReqNo PartNo QtyNeeded QtyFilled
3 pc6 90 10
4 mx7 100 20
5 bb11 70 0
5 pc6 22 15
6 jw3 90 0

Membuat Database Baru


Sintaks dasar :
CREATE DATABASE database_name;

Maka,
CREATE DATABASE StoreHouse;

3
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

Menghapus Database
Sintaks dasar :
DROP DATABASE database_name;

Membuat Tabel Baru


Sintaks dasar :
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,

);

Maka,
CREATE TABLE Parts (
PartNo varchar(255),
Description varchar(255),
Weight real,
MaxDim real,
Color varchar(255)
);

CREATE TABLE Requisitions (


ReqNo int,
ProjNo varchar(255),
DateNeeded int,
WhereNeeded varchar(255)
);

CREATE TABLE ReqLines (


ReqNo int,
PartNo varchar(255),
QtyNeeded int,
QtyFilled int
);

Menghapus Data dalam Tabel


Pernyataan TRUNCATE TABLE digunakan untuk menghapus data yang ada di dalam tabel,
tetapi tidak menghapus tabel itu sendiri.

4
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

Sintaks dasar :
TRUNCATE TABLE table_name;

Menghapus Tabel
Pernyataan DROP TABLE digunakan untuk menghapus tabel yang ada di dalam database.
Sintaks dasar :
DROP TABLE table_name;

Menambah, Mengubah, dan Menghapus Kolom


Penyataan ALTER TABLE digunakan untuk menambah, mengubah, dan menghapus kolom
dalam tabel yang sudah ada. Pernyataan ALTER TABLE juga digunakan untuk menambah dan
menghapus berbagai constraints (primary key, foreign key, index, unique, dan lainnya) pada
tabel yang sudah ada.
Sintaks ALTER TABLE – menambahkan kolom :
ALTER TABLE table_name
ADD column_name datatype;

Sintaks ALTER TABLE – menghapus kolom :


ALTER TABLE table_name
DROP COLUMN column_name;

Sintaks ALTER TABLE – mengubah/memodifikasi kolom :


ALTER TABLE table_name
MODIFY|ALTER COLUMN column_name datatype;

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

5
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

Contoh :
CREATE TABLE Parts (
PartNo varchar(255),
Description varchar(255),
Weight real,
MaxDim real,
Color varchar(255),
PRIMARY KEY (PartNo)
);

Contoh primary key yang terbentuk dari beberapa kolom tabel :


CREATE TABLE Requisitions (
ReqNo int,
ProjNo varchar(255),
DateNeeded int,
WhereNeeded varchar(255),
CONSTRAINT PK_Req PRIMARY KEY (ReqNo, ProjNo)
);

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,
ALTER TABLE Parts
ADD PRIMARY KEY (PartNo);

ALTER TABLE Requisitions


ADD PRIMARY KEY (ReqNo);

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

6
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

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

ALTER TABLE ReqLines


ADD FOREIGN KEY (PartNo) REFERENCES Parts(PartNo);

1.2. Menambahkan (Memasukkan) Data Baru Ke Dalam Tabel


Pernyataan INSERT INTO digunakan untuk menambahkan atau memasukkan record
(baris data) baru ke dalam tabel. Ada dua cara penulisan sintaks (query) INSERT INTO.
Cara pertama, menentukan nama kolom dan nilai yang akan disisipkan :
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

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

Contoh penggunaan INSERT INTO :


INSERT INTO Requisitions (ReqNo, ProjNo, DateNeeded, WhereNeeded)
VALUES (3, ‘pr1’, 870620, ‘south’);

7
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

INSERT INTO Requisitions


VALUES (4, ‘pr3’, 870703, ‘north’);

INSERT INTO Requisitions (ReqNo, ProjNo, WhereNeeded)


VALUES (7, ‘pr3’, ‘east’);

1.3. Menampilkan Data Yang Terdapat Di Dalam Tabel


Pernyataan SELECT digunakan untuk memilih data dari database dan kemudian
menampilkannya. Data yang dikembalikan (hasil dari query SQL SELECT) disimpan dalam tabel
hasil (temporary), yang disebut kumpulan hasil.
Sintaks SELECT :
SELECT * FROM table_name;

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;

Contoh SELECT column :


SELECT ReqNo, ProjNo, DateNeeded
FROM Requisitions;

1.4. Kondisi Pemilihan


Klausa WHERE digunakan untuk memfilter atau memilih record yang ingin diambil atau
ditampilkan. Klausa WHERE digunakan untuk mengekstrak record yang hanya memenuhi
kondisi tertentu.
Sintaks WHERE :
SELECT column1, column2, ...
FROM table_name
WHERE condition;

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

SELECT * FROM Parts


WHERE Weight <> 70.0;

SELECT PartNo, Weight, MaxDim, Color


FROM Parts
WHERE MaxDim BETWEEN 12.0 AND 17.0;

SELECT * FROM Parts


WHERE Description LIKE ‘D%’;

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.

SELECT * FROM Parts


WHERE Description IN (‘Hammer’, ‘Saw’);

SELECT * FROM Parts


WHERE Description NOT IN (‘Hammer’);

9
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

1.5. Kondisi AND dan OR


Operator AND dan OR digunakan untuk memfilter atau memilih record berdasarkan lebih
dari satu kondisi.
 Operator AND menampilkan record jika semua kondisi yang dipisahkan oleh AND adalah
TRUE.
 Operator OR menampilkan record jika salah satu kondisi yang dipisahkan oleh OR adalah
TRUE.
 Operator NOT menampilkan record jika kondisi NOT TRUE.

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;

SELECT PartNo
FROM Parts
WHERE Description = ’Saw’ OR Description = ‘Hammer’;

1.6. Pengurutan dan Duplikasi


a. Pengurutan (Sorting)
SQL memiliki metode untuk mengontrol urutan output dan mengeliminasi duplikat dari
output. ORDER BY digunakan untuk mengurutkan hasil dalam urutan naik atau turun. Secara
default, ORDER BY mengurutkan record dalam urutan menaik. Untuk mengurutkan record
dalam urutan menurun, gunakan kata kunci DESC.

10
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

Sintaks ORDER BY :
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

Contoh ORDER BY :
SELECT ReqNo, PartNo, QtyNeeded FROM ReqLines
WHERE QtyNeeded > 50
ORDER BY QtyNeeded;

SELECT ReqNo, PartNo, QtyNeeded FROM ReqLines


WHERE QtyNeeded > 50
ORDER BY QtyNeeded ASC;

SELECT ReqNo, PartNo, QtyNeeded FROM ReqLines


WHERE QtyNeeded > 50
ORDER BY QtyNeeded DESC;

ORDER BY Dengan Beberapa Kolom


Contoh :
SELECT * FROM ReqLines
ORDER BY PartNo, 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.

SELECT * FROM ReqLines


ORDER BY PartNo ASC, QtyNeeded DESC;

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

11
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

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.

1.7. Memperbarui Data Dalam Tabel


Pernyataan UPDATE digunakan untuk mengubah data atau record yang ada di dalam suatu
tabel. Sintaks UPDATE :
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

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.
Contoh penggunaan UPDATE :
UPDATE Requisitions
SET DateNeeded = 870720
WHERE ReqNo = 3;

UPDATE Requisitions
SET WhereNeeded = ‘west’;

UPDATE Requisitions
SET DateNeeded = 870703
WHERE ProjNo = ‘pr1’;

12
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

1.8. Menghapus Data Dalam Tabel


Pernyataan DELETE digunakan untuk menghapus data atau record yang ada di dalam
suatu tabel. Sintaks DELETE :
DELETE FROM table_name
WHERE condition;

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;

1.9. Aggregate Function (Fungsi Aggregate)


Fungsi Aggregate adalah fungsi yang menerima koleksi nilai dan mengembalikan nilai
tunggal sebagai hasilnya, seperti jumlah data, nilai minimum, nilai maksimum dan nilai rata-rata.
Fungsi aggregate dapat digunakan untuk mencari jumlah data, nilai minimum, nilai maksimum,
nilai rata-rata dalam field yang terdapat pada tabel.
Beberapa fungsi aggregate :
Fungsi Aggregate Keterangan
Min() Mencari nilai terkecil dari suatu kolom
Max() Mencari nilai terbesar dari suatu kolom
Count() Menghitung jumlah baris data (record)
Avg() Mencari nilai rata-rata dari suatu kolom numerik
Sum() Menghitung jumlah total dari suatu kolom numerik

a. MIN() Function
Sintaks dasar :
SELECT MIN(column_name)
FROM table_name;

13
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 MIN(column_name)
FROM table_name
WHERE condition;

Contoh :
SELECT MIN(Weight)
FROM Parts;

SELECT MIN(Weight) AS SmallestWeight


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 :
SELECT MAX(column_name)
FROM table_name
WHERE condition;

Contoh :
SELECT MAX(Weight)
FROM Parts;

SELECT MAX(Weight) AS LargestWeight


FROM Parts;

14
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

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;

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;

15
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

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

BAB 2. PERNYATAAN SQL: QUERY BANYAK TABEL

 Tujuan Instruksional Umum (TIU) : Mahasiswa mampu memahami SQL dengan banyak tabel.

 Tujuan Instruksional Khusus :


Mahasiswa mampu :
1. Memahami konsep pencarian bertingkat
2. Menggunakan perintah SQL untuk mengambil informasi dari banyak tabel
3. Menggunakan fungsi untuk banyak tabel

 Pokok Bahasan : Pernyataan SQL: query banyak tabel

 Sub Pokok Bahasan :


1. Pendahuluan
2. Join
3. Subquery
4. Fungsi dalam pernyataan join
5. Fungsi dalam kondisi

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

2.2. Subquery : Sebuah Alternatif Untuk Join


SQL juga menyertakan sebuah alternative untuk menggabungkan tabel guna mengambil
data dari lebih dari satu tabel, yaitu dengan menggunakan subquery. Pernyataan SELECT dalam
sebuah subquery adalah bersarang (nested) untuk sejumlah level. Setiap level merincikan
terkait pengambilan data dari satu tabel. Pernyataan SQL berikut mengilustrasikan sebuah
subquery dua level :

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.
Contoh :

21
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

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

2.3. Mencampurkan (Mixing) Join dan Subquery


Disamping penggunaan subquery sebagai alternative untuk join, juga memungkinkan
untuk mencampurkan (mixing) join dan subquery dalam pernyataan SQL yang sama.
Contoh :
SELECT ProjNo
FROM Requisitions, ReqLines
WHERE Requisitions.ReqNo = ReqLines.ReqNo
AND ReqLines.PartNo IN
(SELECT PartNo
FROM Parts
WHERE Description = ‘Saw’);

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

EXISTS dan NOT EXISTS


Pernyataan SQL juga memungkinkan digunakan untuk perbandingan yang menguji
keberadaan baris yang memenuhi kondisi tertentu. Pernyataan EXISTS digunakan untuk
melakukan hal ini. EXISTS adalah alternative lain yang dapat digunakan dalam subquery SQL.
EXISTS berbeda dengan ANY atau IN karena EXISTS tidak mengecek nilai individu tapi
mengecek keberadaan baris data yang memenuhi kondisi tertentu.
Contoh :
SELECT ReqNo
FROM Requisitions
WHERE EXISTS
(SELECT *
FROM ReqLines
WHERE PartNo IN
(SELECT PartNo
FROM Parts
WHERE Description = ‘Saw’));

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

Output dari pernyataan SQL tersebut adalah :


ReqNo
4

23
Modul Praktikum Basis Data II | Rizqa Raaiqa Bintana – Universitas Jambi

DAFTAR PUSTAKA

Hawryszkiewycz, I. T. 1990. Relational database design: an introduction. Prentice-Hall, Inc.


https://www.w3schools.com/ [diakses, 01 September 2020]

24

Anda mungkin juga menyukai