Anda di halaman 1dari 35

SQL

(Structured Query Language)


- BAGIAN II -

Sistem Berkas & Basis Data

Outline

Fungsi Agregasi
Null Value
Nested Subquery
View
Complex Query

Fungsi Agregasi
Fungsi agregasi digunakan untuk melakukan
operasi pada kelompok-kelompok baris data.
Fungsi ini akan menghasilkan satu baris data
untuk setiap kelompok baris data yang ada.
Yang termasuk fungsi-fungsi agregasi adalah :

Average
Minimum
Maximum
Total
Count

: AVG
: MIN
: MAX
: SUM
: COUNT

Average
Fungsi AVG digunakan untuk memperoleh
nilai rata-rata dari seluruh nilai pada suatu
kolom.
Pemakaian Fungsi Avg:
SELECT AVG (nama_kolom)
FROM (nama_tabel);

Minimum
Digunakan untuk memperoleh nilai
minimum (yang terkecil) dari suatu kolom.
Pemakaian Fungsi Min:
SELECT MIN (nama_kolom)
FROM (nama_tabel);

Maximum
Digunakan untuk memperoleh nilai
maksimum (yang terbesar) dari suatu
kolom.
Pemakaian Fungsi Max:
SELECT MAX (nama_kolom)
FROM (nama_tabel);

Total
Digunakan untuk memperoleh nilai
penjumlahan seluruh baris pada suatu
kolom.
Pemakaian Fungsi Sum:
SELECT SUM (nama_kolom)
FROM (nama_tabel);

Count
Fungsi agregrasi count sering digunakan untuk
menghitung jumlah tuple dalam suatu relasi.
Pemakaian Fungsi Count:
SELECT COUNT (nama_kolom)
FROM (nama_tabel);
Contoh: Untuk menentukan jumlah tuple dalam
relasi customer, ditulis :
SELECT count(*) FROM customer

Fungsi Agregasi Group By

Jika fungsi agregasi ini ingin diterapkan pada kelompok himpunan


tuple, maka digunakan klausa GROUP BY.
Nama atribut/kel. Atribut dalam klausa group by digunakan untuk
membentuk grup/kelompok. Artinya tuple-tuple yang mempunyai
nilai yang sama pada semua atribut dalam klausa group-by
dimasukkan dalam satu grup/kelompok.
Contoh : tampilkan jumlah depositor untuk setiap cabang
select branch-name, count (distinct customer-name)
from depositor D, account A
where D.account-number = A.account-number
group by branch-name
Note: Atribut pada klausa select (selain pada fungsi agregasi)
harus muncul dalam daftar group by

Fungsi Agregasi Having


Jika suatu fungsi diterapkan pada
grup/kelompok yang dibentuk oleh group by
maka digunakan klausa having setelah group
by.
Contoh : tampilkan nama cabang yang
mempunyai rata-rata saldo lebih dari 1200
SELECT branch-name, avg(balance)
FROM account
GROUP BY branch-name
HAVING avg (balance)>1200

Null Values
Tuple-tuple mungkin memiliki nilai NULL pada satu
atau beberapa atributnya
null menunjukkan unknown value atau nilai untuk
atribut tersebut tidak ada
Predikat is null dapat digunakan untuk memeriksa
keberasaan nilai null
Contoh: tampilkan semua loan number yang ada
di relasi loan yang memiliki nilai amount NULL
select loan-number
from loan
where amount is null

Null Values
Hasil ekspresi aritmetik yang melibatkan null
adalah null
Contoh: 5 + null hasilnya null
Semua operasi perbandingan dengan null
hasilnya unknown
Contoh:
5 < null
null <> null
null = null

Null Values
OR:
(unknown or true) = true,
(unknown or false) = unknown
(unknown or unknown) = unknown

AND:
(true and unknown) = unknown,
(false and unknown) = false
(unknown and unknown) = unknown

NOT:
(not unknown) = unknown

Hasil dari klausa where dianggap false jika hasil


evaluasi bernilai unknown

Null Values
Total semua loan amounts
select sum (amount)
from loan
Statement di atas mengabaikan null amount
Hasilnya NULL jika tidak terdapat non-null
amount,

Semua operasi agregasi kecuali count(*)


mengabaikan tuple dengan null values
pada atribut yang diagregasi.

Nested Subquery
SQL menyediakan mekanisme untuk subquery
bersarang (nesting of subqueries)
Sebuah subquery adalah ekspresi select-fromwhere yang bersarang di dalam query yang lain.
Penggunaan subquery yang umum, dilakukan
untuk menguji set membership, set
comparisons, dan set cardinality.

Skema Contoh

Set Membership
SQL menggambarkan kalkulus relasional
untuk operasi yang mengizinkan
mengecekan tuple untuk menentukan
keanggotaan dalam relasi
IN dan NOT IN
Koneksi IN menguji keikutsertaan
KOneksi NOT IN menguji ketidakikutsertaan

Contoh Query
Tampilkan semua customer yang memiliki account dan loan di
bank
select distinct customer-name
from borrower
where customer-name in
(select customer-name from depositor)
Tampilkan semua customer yang memiliki loan tapi tidak
memiliki account
select distinct customer-name
from borrower
where customer-name not in
(select customer-name from depositor)

Contoh Query
Tampilkan semua customer yang memiliki
account dan loan di cabang Perryridge
select distinct customer-name
from borrower, loan
where borrower.loan-number =
loan.loan-number and branch-name =
Perryridge and (branch-name,
customer-name) in
(select branch-name, customer-name
from depositor, account
where depositor.account-number =
account.account-number)

Set Comparison
Contoh: Tampilkan semua cabang yang
memiliki aset lebih dari aset pada cabang
lain yang berlokasi di Brooklyn
Query yang bisa dipakai:
select distinct T.branch-name
from branch as T, branch as S
where T.assets > S.assets and
S.branch-city = Brooklyn

Set Comparison
SQL menawarkan variasi gaya berbeda
dalam penulisan query
lebih besar dari minimal satu > some
select branch-name
from branch
where assets > some
(select assets from branch
where branch-city=Brooklyn)

Set Comparison
Subquery
select assets
from branch
where branch-city=Brooklyn)
Men-generate semua nilai aset dari cabang-cabang di
Brooklyn

Perbandingan > some bernilai TRUE jika aset


dari tuple tersebut lebih besar dari aset
setidaknya satu cabang di Brooklyn

Definisi Klausa SOME


F <comp> some r t r sehingga (F <comp> t)
Dimana <comp> dapat berupa:
(5< some

0
5
6

) = true (baca: 5 < beberapa tuple dalam relasi)

(5< some

0
5

) = false

0
5

) = true

(5 = some

0
(5 some 5 ) = true (karena 0 5)
(= some) in
Namun, ( some) not in

Definisi Klausa ALL


F <comp> all r t r (F <comp> t)
(5< all

0
5
6

) = false

(5< all

6
10

) = true

(5 = all

4
5

) = false

4
(5 all 6 ) = true (karena 5 4 dan 5 6)
( all) not in
Namun, (= all) in

Contoh Query
Tampilkan semua nama cabang yang memiliki
aset lebih besar dari semua cabang yang
berlokasi di Brooklyn.
select branch-name
from branch
where assets > all
(select assets
from branch
where branch-city = Brooklyn)

Pengujian Relasi Kosong


Perintah exists mengembalikan nilai true
jika argumen pada subquery tidak kosong.
exists r r
not exists r r =

Contoh Query

Tampilkan semua customer yang memiliki account di seluruh


cabanga di Brooklyn.
select distinct S.customer-name
from depositor as S
where not exists (
(select branch-name
from branch
where branch-city = Brooklyn)
except
(select R.branch-name
from depositor as T, account as R
where T.account-number = R.account-number and
S.customer-name = T.customer-name))
Perhatikan bahwa X Y = X Y
Catatan: Query ini tidak dapat ditulis dengan menggunakan klausa
= all atau sejenisnya

Pengujian Duplikasi Tuple


Perintah unique menguji apakah suatu subquery
memiliki duplikasi tuple pada hasilnya.
Contoh: Tampilkan semua customer yang memiliki
hanya satu account di cabang Perryridge
select T.customer-name
from depositor as T
where unique

(select R.customer-name
from account, depositor as R
where T.customer-name = R.customer-name
and R.account-number=account.account-number
and account.branch-name = Perryridge)

Contoh Query
Tampilkan semua customer yang memiliki
setidaknya dua account di cabang Perryridge
select distinct T.customer-name
from depositor T
where not unique
(select R.customer-name
from account, depositor as R
where T.customer-name = R.customer-name
and R.account-number = account.account-number
and account.branch-name = Perryridge)

View
DBMS menyediakan suatu mekanisme untuk
menyembunyikan detil data tertentu.
View merupakan sebuah tabel semu / tabel lojik, dimana
datanya berasal dari satu atau lebih tabel lain yang
disebut sebagai tabel sumber. View biasa dibuat untuk
memudahkan user menampilkan data.
Untuk membuat view, gunakan perintah berikut:
create view v as <query expression>
dimana:
v adalah nama view

Contoh View
Sebuah view berisi cabang dan customernya
create view all-customer as
(select branch-name, customer-name
from depositor, account
where depositor.account-number =
account.account-number)
union
(select branch-name, customer-name
from borrower, loan
where borrower.loan-number =
loan.loan-number)

Contoh Query
Tampilkan semua customer di cabang
Perryridge
select customer-name
from all-customer
where branch-name = Perryridge
Perhatikan klausa FROM, relasi yang dilibatkan
adalah view all-customer

Complex Query: Derived Relation


Contoh: Tampilkan rata-rata saldo account di cabang
yang memiliki rata-rata saldo account di atas $1200.
select branch-name, avg-balance
from (select branch-name, avg (balance)
from account
group by branch-name)
as result (branch-name, avg-balance)
where avg-balance > 1200
perhatikan kita tidak perlu menggunakan klausa having,
karena kita menghitung hasil sementara pada klausa
from, dan atribut result dapat digunakan langsung pada
klausa where.

Complex Query: Klausa WITH


Klausa WITH memperbolehkan view
didefinisikan secara lokal pada query.
Contoh: tampilkan semua account dengan
saldo maksimum
with max-balance(value) as
select max (balance)
from account
select account-number
from account, max-balance
where account.balance =
max-balance.value

Contoh Query
Tampilkan semua cabang dimana total deposit account
lebih besar dari rata-rata total deposit account di semua
cabang
with branch-total (branch-name, value) as
select branch-name, sum (balance)
from account
group by branch-name
with branch-total-avg(value) as
select avg (value)
from branch-total
select branch-name
from branch-total, branch-total-avg
where branch-total.value >=
branch-total-avg.value

Anda mungkin juga menyukai