Anda di halaman 1dari 43

KOMD70 : PENGENALAN BASIS DATA (PBD)

SQL-Manipulasi Data (lanj-2)

1
Pernyataan SELECT-Grouping

 Query yang menggunakan GROUP BY


disebut query yang mengelompokkan

 Semua nama kolom pada SELECT harus


muncul di GROUP BY kecuali digunakan
pada fungsi agregrasi

2
KOMD70 : PENGENALAN BASIS DATA (PBD)
Pernyataan SELECT-Grouping
(GROUP BY)
 Berapa jumlah staff yang bekerja di setiap
kantor cabang sekaligus jumlahkan gaji mereka
untuk setiap kantor cabang

SELECT branchNo, COUNT(staffNo) AS count,


SUM(salary) AS sum
FROM Staff
GROUP BY branchNo
ORDER BY branchNo;
3
KOMD70 : PENGENALAN BASIS DATA (PBD)
Pernyataan SELECT-Grouping
(GROUP BY)

branchN StaffNo salary


o COUNT SUM
(StaffNo) (Salary)
B003 SG31 12000.00
B003 SG14 18000.00 3 54000.00
B003 SG5 24000.00
2 39000.00
B005 SL21 30000.00
1 9000.00
B005 SL41 9000.00
B007 SA9 9000.00
4
KOMD70 : PENGENALAN BASIS DATA (PBD)
Grouping yang dibatasi (HAVING)
 HAVING digunakan pada GROUP BY untuk
memfilter grup yang akan tampil sebagai
output
 Hampir sama dengan WHERE :
Where memfilter baris
HAVING memfilter grup
 Nama kolom yang muncul dalam HAVING
harus ada pada GROUP BY

5
KOMD70 : PENGENALAN BASIS DATA (PBD)
Grouping yang dibatasi (HAVING)

 Untuk kantor cabang yang mempunyai staff > 1,


Hitung jumlah staff yang bekerja di sana sekaligus
jumlahkan gaji mereka untuk setiap kantor cabang

SELECT branchNo, COUNT(staffNo) AS count, SUM(salary)


AS sum
FROM Staff
GROUP BY branchNo HAVING COUNT(staffNo) > 1
ORDER BY branchNo;

6
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery
 Subquery  pernyataan SELECT lain
yang disisipkan dalam query selain
SELECT utama (yang sudah ada)
 SELECT tersebut bisa terletak di WHERE
dan HAVING  subquery atau nested
query
 SELECT tersebut bisa muncul juga pada
DELETE, UPDATE, & INSERT

7
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery

 Ada 3 macam :
1. Skalar subquery  menghasilkan 1 baris dan
1 kolom
2. Baris subquery  menghasilkan banyak
kolom tapi 1 baris
3. Tabel subquery  menghasilkan satu atau
lebih kolom dengan banyak baris

8
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery dengan “sama dengan”

 Daftar staff yang bekerja pada kantor


cabang di '163 Main St'.
SELECT staffNo, fName, lName, position
FROM Staff
WHERE branchNo =
(SELECT branchNo
FROM Branch
WHERE street = '163 Main St');

9
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery dengan “sama dengan”

 SELECT didalam WHERE digunakan untuk


menemukan no kantor cabang yang terletak di
'163 Main St' ('B003')
 SELECT utama digunakan untuk mendapatkan
keterangan tentang staff yang bekerja pada
kantor cabang tsb.
SELECT staffNo, fName, lName, position
Pernyataan query
FROM Staff setelah SELECT
WHERE branchNo = 'B003'; didalam WHERE
dieksekusi
10
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery dengan agregrasi
 Daftar nama dan jabatan semua staff yang
mempunyai gaji diatas rata-rata dan tunjukkan
selisih gaji mereka dengan gaji rata-rata

SELECT staffNo, fName, lName, position,


salary – (SELECT AVG(salary) FROM Staff) As SalDiff
FROM Staff
WHERE salary >
(SELECT AVG(salary)
FROM Staff);
11
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery dengan agregrasi

Sintak salah : WHERE salary > AVG salary !!!!!!!

12
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery dengan agregrasi

 Sintak setelah subquery dieksekusi :


SELECT staffNo, fName, lName, position,
salary – 17000 As salDiff
FROM Staff
WHERE salary > 17000;

13
KOMD70 : PENGENALAN BASIS DATA (PBD)
Rule dalam Subquery

 Didalam subquery tidak boleh ada


ORDER BY
 SELECT pada subquery hanya boleh
berisi 1 nama kolom (kecuali untuk
subquery dengan EXISTS)
 Bila subquery muncul pada operasi
perbandingan/comparison, maka berada
di sebelah kanan
14
KOMD70 : PENGENALAN BASIS DATA (PBD)
Subquery bersarang (IN)
 Daftar property yang ditangani staff yang berada di
kantor cabang beralamat '163 Main St'.

SELECT propertyNo, street, city, postcode, type, rooms, rent


FROM PropertyForRent
WHERE staffNo IN (SELECT staffNo
FROM Staff
WHERE branchNo =
(SELECT branchNo
FROM Branch
WHERE street = '163 Main St'));

15
KOMD70 : PENGENALAN BASIS DATA (PBD)
ANY dan ALL

 ANY dan ALL dapat digunakan dalam


suatu subquery untuk menghasilkan
sebuah kolom tunggal
 Pada ALL, kondisi akan “benar” jika
semua nilai hasil query bernilai benar
 Pada ANY , kondisi akan “benar” jika hasil
query bernilai benar dari sebuah atau lebih
nilai
16
KOMD70 : PENGENALAN BASIS DATA (PBD)
ANY dan ALL

 Jika subquery kosong, ALL bernilai


benar/true, dan ANY bernilai salah/false
 SOME dapat digunakan untuk
menggantikan ANY

17
KOMD70 : PENGENALAN BASIS DATA (PBD)
Penggunaan ANY dan ALL
 Temukan staff yang gajinya lebih besar
dari gaji semua staff di kantor cabang
B003
SELECT staffNo, fName, lName, position, salary
FROM Staff
WHERE salary > ALL {12000,18000,24000}
(SELECT salary
FROM Staff
WHERE branchNo = 'B003');

18
KOMD70 : PENGENALAN BASIS DATA (PBD)
Penggunaan ANY dan ALL
 Temukan staff yang gajinya lebih besar
dari minimal 1 atau lebih gaji staff di kantor
cabang B003
SELECT staffNo, fName, lName, position, salary
FROM Staff
WHERE salary > SOME
(SELECT salary
FROM Staff
WHERE branchNo = 'B003');

19
KOMD70 : PENGENALAN BASIS DATA (PBD)
Query pada banyak tabel

 Subquery dapat menghasilkan kolom-


kolom dari lebih satu tabel menggunakan
join
 Untuk melakukan join, tuliskan semua
nama tabel yang terkait pada FROM
 Gunakan yanda koma (,) untuk
memisahkan nama2x tabel tersebut

20
KOMD70 : PENGENALAN BASIS DATA (PBD)
Query pada banyak tabel
 Dapat menggunakan alias untuk nama
tabel pada FROM
 Alias dipisahkan dengan spasi dari nama
tabelnya
 Alias digunakan untuk menghilangkan
kerancuan nama kolom yang sama untuk
tabel yang berbeda
 Misal : FROM staff S, Branch B
21
KOMD70 : PENGENALAN BASIS DATA (PBD)
Join sederhana
 Daftar nama semua client yang telah “viewing”
beserta komentarnya
SELECT c.clientNo, fName, lName, propertyNo,
comment
FROM Client C, Viewing v
WHERE c.clientNo = v.clientNo;

 Hanya nilai yang “match” (c.clientNo = v.clientNo)


yang muncul pada kolom output ClientNo

22
KOMD70 : PENGENALAN BASIS DATA (PBD)
Mengurutkan/sorting join
 Untuk setiap kantor cabang, buat daftar
nomor dan nama staff yang mengelola
property sekaligus property-nya

SELECT s.branchNo, s.staffNo, fName, lName,


propertyNo
FROM Staff s, PropertyForRent p
WHERE s.staffNo = p.staffNo
ORDER BY s.branchNo, s.staffNo, propertyNo;

23
KOMD70 : PENGENALAN BASIS DATA (PBD)
Inner Join
 Jika ada baris yang tidak “match” dalam join tabel maka
baris tersebut akan dihilangkan dalam tabel hasil
 Operasi outer join mempertahankan baris tersebut
 Perhatikan tabel dibawah ini:

24
KOMD70 : PENGENALAN BASIS DATA (PBD)
Inner Join
 (Inner) join kedua tabel tersebut :
SELECT b.*, p.*
FROM Branch1 b, PropertyForRent1 p
WHERE b.bCity = p.pCity;

25
KOMD70 : PENGENALAN BASIS DATA (PBD)
Outer Join

 Tabel hasil mempunyai 2 baris dengan


kota yang sama
 Baris yang tidak match yaitu Briston adan
Aberdeen
 Untuk mengikutkan baris yang tidak
“match” tersebut digunakan outer join

26
KOMD70 : PENGENALAN BASIS DATA (PBD)
Outer Join Kiri

Buat daftar kantor cabang dan property


yang berada pada kota yang sama
termasuk kantor cabang yang tidak
“match”

SELECT b.*, p.*


FROM Branch1 b LEFT JOIN PropertyForRent1 p
ON b.bCity = p.pCity;

27
KOMD70 : PENGENALAN BASIS DATA (PBD)
Outer Join Kanan
Buat daftar kantor cabang dan property
yang berada pada kota yang sama
termasuk kantor cabang yang tidak
“match”

SELECT b.*, p.*


FROM Branch1 b RIGHT JOIN
PropertyForRent1 p ON
b.bCity = p.pCity;

28
KOMD70 : PENGENALAN BASIS DATA (PBD)
Outer Join Kiri & Kanan

 Bandingkan hasilnya

 Apa kesimpulannya ??????????

29
KOMD70 : PENGENALAN BASIS DATA (PBD)
Outer Join Penuh
Buat daftar kantor cabang dan property
yang berada pada kota yang sama
termasuk kantor cabang yang tidak
“match”

SELECT b.*, p.*


FROM Branch1 b FULL JOIN
PropertyForRent1 p ON
b.bCity = p.pCity;

30
KOMD70 : PENGENALAN BASIS DATA (PBD)
UNION, INTERCEPT & DIFERRENCE

 Dapat digunakan untuk


mengkombinasikan hasil dari dua atau
lebih query ke dalam 1 tabel tunggal
 Union dari 2 tabel A dan B  sebuah tabel
yang berisi semua baris di A atau B atau
keduanya

31
KOMD70 : PENGENALAN BASIS DATA (PBD)
UNION, INTERSECT & DIFERRENCE

 Intersect dari 2 tabel A dan B  sebuah


tabel yang berisi semua baris yang ada di
A dan sekaligus di B (common row)
 Diferrence dari 2 tabel A dan B  sebuah
tabel yang berisi semua baris di A tapi
tidak di B
 Kedua tabel harus union compatible.

32
KOMD70 : PENGENALAN BASIS DATA (PBD)
UNION, INTERSECT & DIFERRENCE

 Format of set operator clause in each


case is:
op [ALL] [CORRESPONDING [BY {column1 [, ...]}]]

Dilakukan pada semua kolom

Dilakukan pada common kolom

Duplikat baris

33
KOMD70 : PENGENALAN BASIS DATA (PBD)
UNION, INTERSECT & DIFERRENCE

34
KOMD70 : PENGENALAN BASIS DATA (PBD)
Penggunaan UNION

 Buat daftar nama kota yang mempunyai


kantor cabang sekaligus property

(SELECT city
FROM Branch
WHERE city IS NOT NULL) INTERSECT
(SELECT city
FROM PropertyForRent
WHERE city IS NOT NULL);

35
KOMD70 : PENGENALAN BASIS DATA (PBD)
Penggunaan UNION
 Atau

(SELECT *
FROM Branch
WHERE city IS NOT NULL)
UNION CORRESPONDING BY city
(SELECT *
FROM PropertyForRent
WHERE city IS NOT NULL);

36
KOMD70 : PENGENALAN BASIS DATA (PBD)
Penggunaan INTERSECT
 Buat daftar semua kota yang terdapat kantor
cabang dan property
(SELECT city FROM Branch)
INTERSECT
(SELECT city FROM PropertyForRent);

 Atau
(SELECT * FROM Branch)
INTERSECT CORRESPONDING BY city
(SELECT * FROM PropertyForRent);

37
KOMD70 : PENGENALAN BASIS DATA (PBD)
Penggunaan EXCEPT/DIFERRENCE

 Buat daftar semua kota yang terdapat


kantor cabang tetapi tidak terdapat property
(SELECT city FROM Branch)
city FROM EXCEPT
(SELECT PropertyForRent);

 Atau
(SELECT * FROM Branch)
EXCEPT CORRESPONDING BY city
(SELECT * FROM PropertyForRent)

38
KOMD70 : PENGENALAN BASIS DATA (PBD)
Insert
INSERT INTO TableName [ (columnList) ]
VALUES (dataValueList)

 Insert sebuah baris ke tabel Staff untuk


staff baru
INSERT INTO Staff (staffNo, fName, lName, position,
salary, branchNo) optional
VALUES ('SG44', 'Anne', 'Jones', 'Assistant', 8100,

'B003');
39
KOMD70 : PENGENALAN BASIS DATA (PBD)
Update
UPDATE TableName
SET columnName1 = dataValue1
[, columnName2 = dataValue2...]
[WHERE searchCondition]

 Kenaikan gaji untuk semua staff sebesar 3%


UPDATE Staff
SET salary = salary*1.03;

40
KOMD70 : PENGENALAN BASIS DATA (PBD)
Update
 Kenaikan gaji untuk manager sebesar 5%
UPDATE Staff
SET salary = salary*1.03;

 Kenaikan pangkat untuk David Ford (staffNo =


'SG14') menjadi Manager dan gajinya 18,000.
UPDATE Staff
SET position = 'Manager', salary = 18000
WHERE staffNo = 'SG14';
41
KOMD70 : PENGENALAN BASIS DATA (PBD)
DELETE
DELETE FROM TableName
[WHERE searchCondition]
 Hapus semua data viewing untuk property
PG4.
DELETE FROM Viewing
WHERE propertyNo = 'PG4';

 Hapus semua record dari tabel viewing


DELETE FROM Viewing;

42
KOMD70 : PENGENALAN BASIS DATA (PBD)
KOMD70 : PENGENALAN BASIS DATA (PBD)

SELESAI

43

Anda mungkin juga menyukai