Basis Data - agusheryantino.files.wordpress.com · SQL menggambarkan kalkulus relasional untuk...

34
Basis Data Bagian IV SQL (2) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Transcript of Basis Data - agusheryantino.files.wordpress.com · SQL menggambarkan kalkulus relasional untuk...

Basis Data

Bagian IV SQL (2) Fak. Teknik Jurusan Teknik

InformatikaUniversitas Pasundan

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 : AVG

– Minimum : MIN

– Maximum : MAX

– Total : SUM

– Count : 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 agregasi 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

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 Awhere D.account-number = A.account-numbergroup by branch-name

Note: Atribut pada klausa select (selain pada fungsi agregasi) harus muncul dalam daftar group by

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

Nilai ‘Null’

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-numberfrom loanwhere amount is null

Nilai ‘Null’

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

Nilai ‘Null’ 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

Nilai ‘Null’

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-from where yang bersarang di dalam query yang lain.

Penggunaan subquery yang umum, dilakukan untuk menguji set membership, set comparisons, dan set cardinality.

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 ketidak ikutsertaan

Skema Basis Data

Contoh Query Tampilkan semua customer yang memiliki account dan loan

di bank

select distinct customer-namefrom borrowerwhere customer-name in(select customer-name from depositor)

Tampilkan semua customer yang memiliki loan tapi tidak memiliki account

select distinct customer-namefrom borrowerwhere 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

Some

All

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 cabang di Brooklyn.

select distinct S.customer-namefrom depositor as Swhere not exists ( (select branch-namefrom branch where branch-city = „Brooklyn‟)except(select R.branch-name from depositor as T, account as Rwhere T.account-number = R.account-number andS.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-namefrom depositor, accountwhere depositor.account-number =account.account-number)union(select branch-name, customer-namefrom borrower, loanwhere 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) asselect branch-name, sum (balance)from accountgroup by branch-namewith branch-total-avg(value) asselect avg (value)from branch-totalselect branch-namefrom branch-total, branch-total-avgwhere branch-total.value >= branch-total-avg.value