Translate

Sunday, August 7, 2016

Structured Query Language



Berikut adalah syntax dari SQL-SELECT
SELECT [DISTINCT] select_list
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC] ]

Keterangan SYNTAX:
-          Yang berhuruf besar (SELECT, INTO, FROM, WHERE, GROUP BY, HAVING DAN ORDER BY) artinya adalah kata kunci (keyword) yang harus disertakan jika kita membutuhkannya di dalam pengolahan data. Kita tidak boleh menulis lebih dari sekali, atau membuat nama variabel dengan nama tersebut.
-          Yang berhuruf kecil (select_list, new_table_, table_source, search_condition, group_by_expression, order_expression) adalah isian yang bisa kita ubah berdasarkan kebutuhan kita.
-          Kurung kotak [ ]  menunjukkan bahwa bagian tersebut boleh disertakan atau tidak, tergantung dari kebutuhan. Dari sini bisa diketahui, sebuah SQL-SELECT yang paling sederhana minimal harus menyertakan:
SELECT select_list
FROM table_source
-            Urutan syntax untuk kata kunci (keyword), misalnya ORDER BY terletak di setelah GROUP BY,  menunjukkan bahwa keyword harus disusun berdasarkan urutan tersebut, jika keduanya disertakan, ORDER BY tidak boleh ditulis mendahului GROUP BY.


Database berikut ini digunakan sebagai contoh:


select_list
adalah kolom-kolom yang didefinisikan sebagai  hasil dari proses query.
a. Menampilkan keseluruhan field
Untuk menampilkan keseluruhan field dari tabel-tabel yang didefinisikan, digunakan *. Misalnya, untuk menampilkan seluruh field dari tabel Anggota, perintahnya:
            SELECT * FROM Anggota
b. Menampilkan kolom-kolom tertentu
Kolom-kolom yang dipilih berupa ekspresi, yang mana ekspresi tersebut bisa berupa:
-          field tabel (biasanya)
-          konstanta
-          operasi dan fungsi
Antara kolom satu dengan lainnya dipisahkan dengan tanda koma (,). Jika merupakan field tabel, maka judul kolom adalah nama field tersebut. Selain itu, jika tidak diberi nama, judul kolom akan kosong.
Contoh:
-          menampilkan nama dan alamat Anggota:
SELECT nama, alamat FROM Anggota
-          Yang terdapat nilai konstanta, menampilkan nilai 1 untuk setiap baris pada    kolom pertama dari query sebelumnya:
SELECT 1, nama, alamat FROM Anggota
-          Yang terdapat ekspresi fungsi dari query sebelumnya, yakni menampilkan nama dalam bentuk huruf kapital:
SELECT UPPER(nama), alamat FROM Anggota
c. Mengubah judul kolom
Kolom-kolom yang dipilih bisa diberi judul tertentu sesuai dengan keinginan kita. Ada 2 cara untuk mengubah judul kolom:
-          Menggunakan syntax: ekspresi AS judul_kolom
Ini merupakan cara standar yang dipakai pada banyak sistem database.
-          Menggunakan syntax: judul_kolom = ekspresi
Contoh:  Beberapa query pada point b sebelumnya, diberi judul kolom sbb:
-          menampilkan nama dan alamat Anggta:
SELECT nama AS NamaAnggota, alamat AS AlamatAnggota FROM Anggota
-          menampilkan nama dalam bentuk huruf kapital dg judul kolom NamaKapital:
SELECT NamaKapital=UPPER(nama), alamat FROM Anggota
d. Menyertakan nama tabel atau alias
Jika kita memasukkan sebuah field tabel di dalam sebuah ekspresi kolom, kita bisa menyertakan nama tabel sebelum nama fieldnya yang dipisah dengan tanda titik: nama_tabel.nama_field
Untuk apa ?
-          Untuk mempermudah analisa pembuatan query.
-          Untuk membedakan kepemilikan sebuah field di dalam query yang menyertakan lebih dari satu tabel. Sebab bisa saja terjadi dua buah tabel memiliki nama field yang sama.
Misal, untuk sebuah contoh query sebelumnya, jika disertakan nama tabel adalah sbb:
SELECT NamaKapital=UPPER(Anggota.nama), Anggota.alamat
FROM Anggota


[DISTINCT]
Digunakan apabila kita ingin menghilangkan duplikasi dari hasil query (hasil query yang sama ditampilkan sekali).
Misal, untuk menampilkan nomor-nomor anggota yang sedang meminjam atau belum mengembalikan:
            SELECT NoAnggota FROM Peminjaman
Perhatikan, pada hasil query di atas terdapat NoAnggota yang ditampilkan lebih dari sekali bagi anggota yang meminjam buku lebih dari 1. Untuk meniadakan duplikasi, querynya adalah sbb:
            SELECT DISTINCT NoAnggota FROM Peminjaman

table_source
Adalah sumber data dari query. Bisa merupakan tabel ataupun view. Tentang VIEW akan dibahas lebih lanjut pada pertemuan lain. Tabel yang disertakan bisa lebih dari satu. Jika lebih dari satu, dalam penulisan dipisah dengan koma.

Pemberian nama lain (alias)
Sebuah tabel bisa diberi nama lain (alias), yang mana hal ini digunakan untuk memperpendek nama atau untuk membedakan field jika sebuah query mengambil tabel yang sama lebih dari satu . Nama alias ditulis setelah nama tabel yang bersangkutan.
Misal:
1. Alias yang digunakan untuk memperpendek nama tabel:
SELECT NamaKapital=UPPER(ang.nama), ang.alamat
FROM Anggota ang
Nama tabel Anggota di atas diberi nama alias ang. Sehingga untuk menampilkan fieldnya, cukup disertakan aliasnya saja.

2. Alias yang dipergunakan untuk Query dengan tabel sumber data yang sama:
Query untuk mencari Anggota yang tanggal lahirnya sama:
SELECT ang1.TglLahir, ang1.Nama, ang2.Nama
FROM Anggota ang1, Anggota ang2
WHERE ang1.TglLahir=ang2.TglLahir
ORDER BY ang1.TglLahir

Kasus diatas diperlukan dua buah alias untuk sebuah tabel yang sama, karena untuk proses tersebut, diperlukan pembandingan terhadap tabel yang sama. Oleh karena itu, tabel anggota perlu dianggap sebagai 2 sumber data yang berbeda dengan memberi nama alias ang1 dan ang2 yang kemudian dibandingkan mana saja yang memiliki field tanggal lahir yang sama.

Pada bab ini, anda diperkenalkan tentang penggunaan SQL-SELECT lebih lanjut, yakni penggunaan klausa WHERE. Klausa ini biasanya digunakan untuk:
1.    Filter (penyaringan) data. Yakni hanya menampilkan data tertentu yang sesuai dengan kriteria yang kita masukkan. Atau bisa juga dikatakan sebagai pencarian data.
2.    Merelasikan/menghubungkan query yang disusun lebih dari satu tabel.
Penerapannya adalah dengan memasukkan suatu ekspresi kondisi setelah klausa WHERE:
WHERE <kondisi>
Jika <kondisi> lebih dari satu, maka bisa ditambahkan dengan AND atau OR (sesuai dengan kebutuhan).

WHERE <kondisi> untuk filter
Where untuk filter atau pencarian data di dalam SQL Server bisa dalam beberapa bentuk ekspresi, yakni:
-      operasi pembandingan
-      operasi pendekatan pola
-      operasi pembandingan dengan sekumpulan nilai

Operasi Pembandingan: = < <= >= > <> is
Khusus untuk pembanding IS, nilai yang diisikan adalah null,  yakni sebuah nilai yang belum berisi nilai. Perlu diketahui, bahwa nilai null tidak sama dengan nilai 0 pada tipe numerik ataupun string kosong pada tipe string.
misal:
- menampilkan anggota yang berjenis kelamin laki-laki:
SELECT * FROM Anggota WHERE JK="L"
- menampilkan Anggota yang tahun kelahirannya lebih dari 1985:
SELECT * FROM Anggota WHERE year(TglLahir) > 1985

- menampilkan Anggota wanita yang lahir di bulan Juli:
SELECT * FROM anggota
WHERE JK="P" AND month(TglLahir)=6

- menampilkan idKoleksi yang belum dikembalikan (TglKembali belum terisi)
            SELECT * FROM Peminjaman WHERE TglKembali IS NULL

Operasi LIKE (pendekatan pola)
è khusus string
Operasi ini, hanya untuk pembandingan nilai bertipe string. Digunakan untuk mengenali string-string yang memiliki pola tertentu. Di dalam operasi ini, digunakan simbol-simbol berikut:
-      simbol % artinya mewakili 0 s/d tak terhingga dari sembarang karakter.
-      simbol _ artinya mewakili 1 sembarang karakter.
misal:
- menampilkan anggota yang nama depannya: "Budi"
SELECT * FROM anggota WHERE Nama LIKE "Budi%"

- menampilkan Anggota yang huruf ketiga namanya adalah “d”
SELECT * FROM anggota WHERE Nama LIKE "__d%"

- menampilkan koleksi yang judulnya terdapat kata “pemrograman”:
SELECT * FROM koleksi WHERE Judul LIKE "%pemrograman%"


operasi IN atau NOT IN ...
Ekspresi ini digunakan untuk membandingkan dengan sebuah kumpulan nilai, yang mana kumpulan nilai bisa berupa:
-      nilai-nilai yang diisikan
-      query tunggal (query yg hasilnya hanya terdapat sebuah kolom saja)
Nilai-nilai yang diisikan, maksudnya kita sendiri yang mengisikan nilai-nilai tersebut di dalam query kita. Misalnya:
- menampilkan koleksi yang jenisnya buku dan majalah (idTipeKoleksi=1 atau 2):
SELECT * FROM koleksi WHERE idTipeKoleksi IN (1, 2)

- menampilkan anggota yang selain mahasiswa atau dosen (idJenisAnggota selain 2 dan 3)
SELECT * FROM anggota WHERE IDJenisAnggota NOT IN (1, 3)

Query tunggal, yakni nilai-nilai yang digunakan sebagai pembanding diambil dari sebuah query tunggal yang hasilnya hanya satu kolom saja. Misalnya:
- menampilkan anggota yang belum pernah meminjam buku sama sekali:
SELECT * FROM anggota
WHERE id NOT IN (SELECT DISTINCT idAnggota FROM Peminjaman)
perhatikan tambahan klausa DISTINCT di atas untuk mempercepat proses, walau toh tanpa DISTINCT hasilnya juga sama.

- menampilkan koleksi yang sedang dipinjam:
SELECT * FROM koleksi WHERE idKoleksi IN (SELECT idKoleksi
FROM Peminjaman WHERE TglKembali is NULL)

WHERE <kondisi> untuk relasi
Jika kita mengambil informasi dari lebih dari sebuah tabel, maka kita perlu menambahkan kondisi untuk relasi antara kedua tabel tersebut. Pada dasarnya mirip dengan filter, tapi fungsinya digunakan untuk merelasikan antara tabel-tabel yang diambil informasinya.

misal:
1.    menampilkan idKoleksi, judul dan nama pengarang.
idKoleksi dan judul bisa diambil dari tabel koleksi. Tetapi, di tabel koleksi tidak terdapat field nama pengarang. Yang ada hanya idPengarang. Oleh sebab itu, supaya bisa menampilkan informasi yang akurat, perlu direlasikan antara tabel Koleksi dg tabel Pengarang.

SELECT idKoleksi, Judul, Nama FROM Koleksi, Pengarang
WHERE idPengarang=id

idPengarang=id adalah untuk relasi antara tabel Koleksi dan tabel Pengarang
tanpa relasi ini, hasil query akan menampilkan seluruh pasangan baris data Koleksi di tiap baris Pengarang, yg tentu saja bukan informasi yang benar.



Jika ada nama field yang sama dari tabel yang disertakan, maka sebelum nama field, berikan nama tabel diikuti sebuah titik (.) . Misal untuk query di atas bisa juga ditulis sbb:
SELECT Koleksi.idKoleksi, Koleksi.Judul, Pengarang.Nama
FROM Koleksi, Pengarang
WHERE Koleksi.idPengarang=Pengarang.id

2.    menampilkan daftar idKoleksi, judul koleksi dan harganya yang dipinjam dg nomor anggota: 551, diurutkan berdasarkan judul koleksi:
SELECT kl.idKoleksi, kl.judul, kl.harga
FROM koleksi kl, peminjaman pj, anggota ag
WHERE pj.idkoleksi=kl.idkoleksi
AND pj.idAnggota=ag.id
AND ag.idAnggota = 551 
ORDER BY kl.judul

yaitu fungsi-fungsi yang hasilnya diambil dari proses tiap baris pada tabel. Proses tersebut akan mengolah nilai sebuah field atau lebih mulai baris pertama sampai seluruh baris.
Fungsi-fungsi tersebut yakni:
- COUNT(*) untuk mendapatkan jumlah baris
- SUM(kolom) untuk mendapatkan hasil penjumlahan kolom
- MAX(kolom) untuk mendapatkan nilai tertinggi
- MIN(kolom) untuk mendapatkan nilai terendah
- AVG(kolom) untuk mendapatkan nilai rata-rata

misal:
- untuk menampilkan jumlah seluruh anggota:
SELECT COUNT(*) FROM Anggota
- untuk menampilkan tahun kelahiran anggota tertua:
SELECT MIN(year(TglLahir)) FROM anggota

digunakan untuk pengelompokan dari fungsi-fungsi aggregate.
Yang penting untuk diperhatikan, kolom-kolom yang disertakan setelah GROUP BY harus sama dengan kolom-kolom yang dipilih pada setelah klausa SELECT yg selain fungsi AGGREGATE.
- untuk menampilkan jumlah anggota perjenis kelamin:
SELECT JK, COUNT(*) FROM anggota GROUP BY JK
- untuk menampilkan rata-rata harga koleksi per kode penerbit
SELECT idPenerbit, AVG(harga)
FROM koleksi
GROUP BY idPenerbit


Jika untuk filter query biasa kita menggunakan klause where, maka klausa having digunakan untuk filter  fungsi-fungsi aggregate.
misal:
- untuk menampilkan  jumlah buku per kode penerbit, tetapi hanya yang jumlahnya >10 saja yang ditampilkan.
SELECT idPenerbit, COUNT(*) FROM koleksi
GROUP BY idPenerbit HAVING COUNT(*)>10


No comments:

Post a Comment

silahkan membaca dan berkomentar