PENGGUNAAN SELECT STATEMENT 2
A. Tujuan
1.
Mahasiswa
mampu menggunakan instruksi Create Table
dan options-nya menggunakan
PostgreSQL untuk membuat tabel-tabel basis data sesuai kebutuhan.
2.
Mahasiswa
mampu memasukkan records ke dalam
tabel-tabel basis data.
B. Landasan
Teori
SELECT STATEMENTS digunakan untuk menentukan atau
memilih data yang akan ditampilkan ketika melakukan query terhadap basis data. Struktur select statements di
PostgreSQL adalah sebagai berikut:
SELECT [ALL] | DISTINCT [ON
(expression) [, ...] ) ] ]
*| expression [ AS output_name ]
[, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ { UNION | INTERSECT | EXCEPT }
[ ALL ] select ]
[ ORDER BY expression [ ASC |
DESC | USING operator ] [, ...] ]
[ FOR UPDATE [ OF tablename [,
...] ] ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
Contoh SELECT:
·
Untuk
melihat semua kolom dari suatu tabel:
SELECT*
FROM nasabah;
·
Untuk
melihat kolom (-kolom) tertentu:
SELECT
nama_nasabah FROM nasabah;
SELECT
id_nasabah, nama_nasabah FROM nasabah;
·
Secara
umum:
SELECT
<nama kolom, ...> FROM <nama tabel>;
v
Column
Alias (AS)
·
AS
digunakan untuk mengganti nama kolom pada tampilan SELECT.
Contoh:
-
SELECT
nama_nasabah AS “Nama Nasabah” FROM nasabah;
-
SELECT
nama_nasabah AS “Nasabah”, alamat_nasabah AS “Alamat Nasabah” FROM nasabah;
v
WHERE
·
Digunakan
untuk membatasi hasil SELECT yang ditampilkan berdasarkan kondisi yang
ditentukan.
Contoh:
-
SELECT
nama_nasabah FROM nasabah WHERE nama_nasabah=’Ali Topan’ ;
-
SELECT
nama_nasabah, alamat_nasabah FROM nasabah WHERE id_nasabah=2;
·
Bisa
menggunakan >, <, <> (atau !=), >=, <=
·
Gunakan
AND atau OR untuk lebih dari satu kondisi:
-
SELECT*
FROM nasabah WHERE nama_nasabah = ‘Rina Marsudi’ AND alamat_nasabah = ‘Jl.
Kusumanegara 30’;
-
SELECT*
FROM nasabah WHERE nama_nasabah = ‘Ali Topan’ OR id_nasabah=2;
v
Pencarian NULL
·
Gunakan
IS NULL untuk mencari NULL:
-
SELECT*
FROM rekening WHERE kode_cabang IS NULL;
·
Gunakan
IS NOT NULL untuk mencari yang tidak NULL:
-
SELECT*
FROM rekening WHERE kode_cabang IS NOT NULL;
v
Pencarian String
·
Gunakan
LIKE untuk mencari string tertentu:
-
SELECT*
FROM nasabah WHERE nama_nasabah LIKE ‘Ali Topan’;
·
Bisa
menggunakan %:
-
SELECT*
FROM nasabah WHERE alamat_nasabah LIKE ‘%negara%’;
·
Bisa
menggunakan _ untuk 1 huruf:
-
SELECT*
FROM nasabah WHERE nama_nasabah LIKE ‘Ali T_p_n’;
·
Untuk
pencarian yang case insensitive
(tidak mempedulikan huruf besar atau kecil), gunakan ILIKE:
-
SELECT*
FROM nasabah WHERE nama_nasabah ILIKE ‘%marsudi’;
v
ORDER
BY
·
Digunakan
untuk mengurutkan hasil SELECT.
·
Untuk
mengurutkan dari kecil ke besar:
-
SELECT*
FROM nasabah ORDER BY nama_nasabah;
·
Untuk
mengurutkan dari besar ke kecil:
-
SELECT*
FROM nasabah ORDER BY nama_nasabah DESC;
·
Perhatian:
jika ada WHERE, maka ORDER BY ditaruh sesudah WHERE.
·
Untuk
melakukan pengurutan lebih dari satu kolom, pisahkan dengan tanda koma:
-
SELECT*
FROM nasabah_has_rekening ORDER BY no_rekening, id_nasabah;
·
Bisa
menentukan DESC untuk kolom (-kolom) tertentu, misalnya:
-
SELECT*
FROM nasabah_has_rekening ORDER BY no_rekening, id_nasabah DESC;
-
SELECT*
FROM nasabah_has_rekening ORDER BY no_rekening DESC, id_nasabah;
v
LIMIT
& OFFSET
·
Digunakan
untuk membatasi jumlah baris yang ditampilkan dalam SELECT.
Contoh:
Hanya menampilkan 3 baris pertama:
-
SELECT*
FROM nasabah ORDER BY id_nasabah LIMIT 3;
Menampilkan 2 baris setelah
melewati 2 baris pertama:
-
SELECT*
FROM nasabah ORDER BY id_nasabah LIMIT 2 OFFSET 2;
·
Perhatian:
penggunaan LIMIT sebaiknya selalu digunakan bersama dengan ORDER BY, sehingga
urutan yang ditampilkan akan selalu konsisten.
·
LIMIT
dan OFFSET sangat berguna dalam tampilan yang berbasis web (melalui web browser
dengan menggunakan PHP atau JSP) agar tampilan data tidak terlalu besar dan
bisa lebih rapi. Tampilan data yang banyak bisa diatur dan dibagi menjadi
beberapa halaman (pages).
v
TABLE
JOIN
Macam
tabel join:
·
Cross
Join
-
Menggabungkan
semua record dari tabel pertama dengan semua record di tabel kedua.
-
Banyaknya
record dari cross join = jumlah record tabel pertama x jumlah record tabel kedua.
Contoh:
ü
SELECT*
FROM rekening CROSS JOIN cabang_bank;
·
Inner
Join
-
Menggabungkan
dua (atau lebih) tabel berdasarkan attribute penghubung.
-
Metode
1:
ü
SELECT*
FROM rekening INNER JOIN cabang_bank USING(kode_cabang);
-
Metode
2:
ü
SELECT*
FROM rekening INNER JOIN cabang_bank ON rekening.kode_cabang =
cabang_bank.kode_cabang;
-
Metode
3:
ü
SELECT*
FROM rekening NATURAL INNER JOIN cabang_bank;
-
Metode
4:
ü
SELECT*
FROM rekening, cabang_bank WHERE rekening.kode_cabang =
cabang_bank.kode_cabang;
-
Perhatian:
untuk INNER JOIN, kita dapat menghilangkan kata ‘INNER’. Jadi, cukup dengan
kata ‘JOIN’ saja.
-
Dengan
metode 4, jika kolo yang ingin ditampilkan ada di lebih dari 2 tabel, maka
harus menentukan tabel mana yang diinginkan.
Contoh:
ü
SELECT
nasabah.id_nasabah, nama_nasabah, no_rekening FROM nasabah,
nasabah_has_rekening WHERE nasabah.id_nasabah =
nasabah_has_rekening.id_nasabah;
Table
Alias
-
Untuk
kemudahan penulisan SQL, kita bisa membuat table alias.
Contoh:
ü
SELECT*
FROM nasabah A, nasabah_has_rekening B WHERE A.id_nasabah = B.id_nasabah;
ü
SELECT*
FROM A.id_nasabah, nama_nasabah, no_rekening FROM nasabah A,
nasabah_has_rekening B WHERE A.id_nasabah = B.id_nasabah;
Distinct
-
Dalam
table join, kadang-kadang ada informasi yang berulang. Untuk menghilangkan
pengulangan tersebut, gunakan DISTINCT.
Contoh:
ü
SELECT
DISTINCT nama_nasabah, alamat_nasabah FROM nasabah NATURAL JOIN
nasabah_has_rekening;
-
Perhatikan
perbedaan dengan berikut:
ü
SELECT
nama_nasabah, alamat_nasabah FROM nasabah NATURAL JOIN nasabah_has_rekening;
·
Right
Outer Join
-
Menampilkan
hasil join tabel pertama (sisi kiri) dengan tabel kedua (sisi kanan), serta
semua record di tabel kedua (sisi
kanan/right):
ü
SELECT*
FROM rekening NATURAL RIGHT OUTER JOIN cabang_bank;
-
Ketiga
metode pertama yang telah disebutkan untuk INNER JOIN juga berlaku untuk RIGHT
OUTER JOIN, yaitu dengan menggunakan USING, ON, atau NATURAL.
·
Left
Outer Join
-
Menampilkan
hasil join tabel pertama (sisi kiri) dengan tabel kedua (sisi kanan), serta
semua record di tabel pertama (sisi
kiri/left):
ü
SELECT*
FROM rekening NATURAL LEFT OUTER JOIN cabang_bank;
-
Ketiga
metode yang telah disebutkan untuk RIGHT OUTER JOIN juga berlaku untuk LEFT
OUTER JOIN, yaitu dengan menggunakan USING, ON, atau NATURAL.
·
Full
Outer Join
-
Menampilkan
hasil join tabel pertama dengan tabel kedua, serta semua record di tabel tersebut:
ü
SELECT*
FROM rekening NATURAL FULL OUTER JOIN cabang_bank;
-
Ketiga
metode yang telah disebutkan untuk LEFT/RIGHT OUTER JOIN juga berlaku untuk
FULL OUTER JOIN, yaitu dengan menggunakan USING, ON, atau NATURAL.
·
Outer
Join
-
Untuk
LEFT OUTER JOIN, RIGHT OUTER JOIN, dan FULL OUTER JOIN, bisa menghilangkan kata
‘OUTER’. Jadi, cukup menggunakan LEFT JOIN, RIGHT JOIN, atau FULL JOIN saja.
v
Inner
Join vs. Outer Join
·
Dalam
Inner Join: yang ditampilkan hanyalah
hasil dari table join yang berhasil,
yaitu semua record yang berhubungan
di kedua tabel yang digabungkan.
·
Dalam
Outer Join: selain menampilkan hasil
dari Inner Join, Outer Join juga
menampilkan semua record yang tidak
berhubungan di kedua tabel yang digabungkan.
v
Multiple
Joins
·
Untuk
lebih dari 2 tabel, tinggal diteruskan saja JOINnya. Misalnya:
-
SELECT*
FROM nasabah NATURAL JOIN nasabah_has_rekening NATURAL JOIN rekening;
·
Cara
lain:
-
SELECT*
FROM nasabah A, nasabah_has_rekening B, rekening C where A.id_nasabah = B.id_nasabah
AND B.no_rekening = C.no_rekening;
·
Jika
melakukan multiple join (lebih dari 2
tabel), harus memperhatikan urutan join.
Urutan table join perlu mengikuti
alur relationship yang tertera di ER
Diagram.
C. Alat
dan Bahan
1.
Komputer
dengan sistem operasi Windows 7.
2.
Program
aplikasi PostgreSQL.
3.
Modul
Praktikum Sistem Basis Data.
D. Langkah-langkah
Praktikum
1.
Tampilkan
nama nasabah, nomor rekening, pin, dan saldo untuk semua rekening yang jumlah
saldonya lebih dari Rp 1.000.000,- dan diurutkan bedasarkan nomor rekening
dengan kode berikut:
Ø
Select
nasabah.nama_nasabah, rekening.nomor_rekening, rekening.pin, rekening.saldo
from rekening, nasabah, nasabah_has_rekening where nasabah.id_nasabah =
nasabah_has_rekening.id_nasabahfk and rekening.no_rekening =
nasabah_has_rekening.no_rekeningfk and rekening.saldo > 1000000 order by
rekening.no_rekening;
2.
Tampilkan
nomor rekening, pin, dan saldo untuk rekening yang ada di Bank Rut Unit Klaten
dengan saldo maksimal Rp 1.000.000,- dan diurutkan berdasarkan nomor rekening
dengan kode berikut :
Ø
Select
rekening.no_rekening, rekening.pin, rekening.saldo from rekening, cabang_bank
where cabang_bank.nama_cabang = ‘Bank Rut Unit Klaten’ and
rekening.kode_cabangfk = cabang_bank.kode_cabang and rekening.saldo <=
1000000 order by rekening.no_rekening;
3.
Tampilkan
nama nasabah, nomor rekening, dan nama cabang untuk semua nasabah yang telah
membuka rekening di suatu cabang bank dan di urutkan yang telah membuka
rekening di suatu cabang bank dan diurutkan berdasarkan nama cabang bank dan
nama nasabah dengan kode berikut :
Ø
Select
nasabah.nama_nasabah, rekening.no_rekening, cabang_bank.nama_cabang from
nasabag, rekening, cabang_bank where cabang_bank.kode_cabang =
rekening.cabang_bankfk and nasabah_has_rekening.no_rekeningfk =
rekening.no_rekening and nasabah.id_nasabah =
nasabah_has_rekening.id_nasabahfkorder by cabang_bank.nama_cabang,
nasabah.nama_nasabah;
4.
Tampilkan
nama nasabah dan alamat nasabah dan alamat nasabah untuk semua nasabah yang
memiliki rekening di Bank Rut Unit Yogyakarta dan diurutkan berdasarkan nama
nasabah dengan kode berikut :
Ø
Select
nasabah.nama_nasabah, nasabah.alamat_nasabah from nasabah, rekening,
cabang_bank, nasabah_has_rekening where cabang_bank.nama_cabang = ‘Bank Rut
Unit Yogyakarta’ and cabang_bank.kode_cabang = rekening.kode_cabangfk and
nasabah_has_rekening.no_rekeningfk = rekening.no_rekening and
nasabah.id_nasabah = nasabah_has_rekening.id_nasabahfk order by
nasabah.nama_nasabah;
5.
Tampilkan
nama nasabah, alamat nasabah, nomor rkening, serta saldo untuk semu nasabah dan
semua rekening yang ada di database dan diurutkan berdasarkan nama nasabah dan
nomor rekening dengan kode berikut :
Ø
select
nasabah.nama_nasabah, nasabah.alamat_nasabah,
rekening.no_rekening,
rekening.saldo
from nasabah,
rekening, nasabah_has_rekening
where
nasabah_has_rekening.no_rekeningfk = rekening.no_rekening
and
nasabah.id_nasabah=nasabah_has_rekening.id_nasabahfk
order by nasabah.nama_nasabah,
rekening.no_rekening;
E. Tugas
1.
Tampilkan
nomor rekening, nama nasabah, jenis transaksi dan jumlah transaksi dimana
jumlah transaksi = Rp 20.000!
2.
Tampilkan
nomor rekening, nama nasabah dan alamat nasabah dimana nama nasabah diawali
dengan kata “Su”!
3.
Tampilkan nomor rekening dengan alias “Nomor Rekening”,
nama nasabah dengan alias “Nama Nasabah”, jumlah transaksi dengan alias “Jumlah
Transaksi” dimana jenis transaksi adalah debit! Urutkan berdasarkan nama nasabah!
Tidak ada komentar:
Posting Komentar