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 ]
1. 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>;
2. Columns 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;
3. 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;
• 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;
• 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’;
4. Order by
Digunakan untuk
mengurutkan hasil SELECT. Jenis-jenisnya adalah sebagai berikut ini : 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;
Untuk melakukan
pengurutan lebih dari satu kolom, pisahkan dengan tanda koma:
SELECT*FROM
nasabah_has_rekening ORDER BY no_rekening, id_nasabah;
Anda 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;
5. Limit dan
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).
6. Penggunaan
Operator IS NULL
Seperti yang telah dijelaskan pada bagian outer join, data
yang diperoleh dari suatu query dapat mengandung nilai null. Untuk mem-filter
query agar hanya menampilkan data yang mengandung nilai null saja dapat
menggunakan operator IS NULL pada klausa WHERE.
7. 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 SELECT nama_kolom FROM tabel_1 CROSS JOIN
tabel_2;
Contoh:
SELECT*FROM rekening
CROSS JOIN cabang_bank;
• Inner Join dan
natural Join
Menghubungkan 2 (atau lebih) tabel berdasarkan attribute
penghubung. SELECT nama_kolom FROM tabel_1 INNER JOIN tabel_2 ON
tabel_1.nama_kolom = tabel_2.nama_kolom;
SELECT nama_kolom FROM tabel_1 NATURAL JOIN tabel_2;
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, Anda dapat menghilangkan kata ‘INNER’. Jadi, cukup dengan kata
‘JOIN’ saja.
Dengan metode 4, jika
kolom yang ingin ditampilkan ada di lebih dari 2 tabel, maka
Anda 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;
• Tabel Alias Penggunaan Operator AS Operator AS berfungsi
untuk mengubah nama kolom atau field pada suatu hasil query. Perubahan nama
kolom ini hanya berlaku pada hasil query tersebut, tidak mengubah nama kolom
asalnya. 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 A.id_nasabah, nama_nasabah, no_rekening FROM nasabah
A, nasabah_has_rekening B WHERE A.id_nasabah=B.id_nasabah;
• Distinct
Pada saat melakukan pengambilan data di dalam database
terkadang dijumpai suatu kondisi dimana data yang sama diperoleh atau muncul
lebih dari satu baris. Untuk menghilangkan kemunculan data yang berulang-ulang
ini dapat menggunakan operator DISTINCT pada klausa SELECT. Dengan menggunakan
operator ini, data yang sama hanya akan muncul satu kali atau hanya pada satu
baris. 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 nama_kolom FROM tabel_kiri
RIGHT OUTER JOIN tabel_kanan ON
tabel_kiri.nama_kolom = tabel_kanan.nama_kolom;
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 nama_kolom FROM tabel_kiri
LEFT OUTER JOIN tabel_kanan ON
tabel_kiri.nama_kolom = tabel_kanan.nama_kolom;
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 kedua 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. SELECT nama_kolom FROM tabel_kiri LEFT OUTER JOIN
tabel_kanan ON tabel_kiri.nama_kolom =
tabel_kanan.nama_kolom UNION SELECT
nama_kolom FROM tabel_kiri RIGHT OUTER
JOIN tabel_kanan ON
tabel_kiri.nama_kolom = tabel_kanan.nama_kolom; • Inner 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.
• Multiple Join
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), Anda
harus memperhatikan urutan join. Urutan table join perlu mengikuti alur
relationship yang tertera di ER Diagram.
Oleh karena itu,
sebaiknya Anda menggunakan ERD agar bisa menghasilkan table join yang
benar.
No comments:
Post a Comment