SQL Lanjut
SQL Lanjut
Menggunakan Alias
Untuk menyederhanakan penulisan nama table pada saat menentukan kepemilikan kolom dalam
perintah SELECT
SELECT BUKU.ISBN, BUKU.JUDUL, BUKU.HARGA FROM BUKU;
Atau
SELECT a.buku_isbn, a.buku_judul, a.buku_harga FROM buku a;
Atau
SELECT ISBN as ISBN, JUDUL as JUDUL BUKU, HARGA as HARGA BUKU FROM BUKU;
2. Filter Data berdasarkan criteria
- Select * from buku where harga < 45000
- Select * from buku where harga < 45000 and isbn like 777%;
Select * from buku where harga between 50000 and 60000; akan sama hasilnya dengan
- Select * from buku where harga >= 50000 and harga <= 60000
3. Membatasi data yang ditampilkan dengan limit
LIMIT <jumlah data>
LIMIT <jumlah data yang diabaikan>, <jumlah data>
Contoh :
Select * from buku LIMIT 10;
Select * from buku LIMIT 5,2;
4. Menggunakan DISTINCT untuk menghindari duplikasi Data : Jika query menghasilkan sejumlah
baris-baris data yang sama maka kita dapat menghilangkan duplikat dari baris-baris tersebut
dengan menyertakan kata kunci DISTINCT;
Select DISTINCT <.>
Select DISTINCT PENERBIT_ID from BUKU
5. Mengurutkan data : Menggunakan kata kunci ORDER BY
- Select * from buku order by harga ASC
- Select * from buku order by harga DESC
3 TABEL
Menggunakan inner join
SELECT pribadi.nip, pribadi.nama, pekerjaan.tgl_masuk, bagian.Nama_Bag from pribadi inner join
pekerjaan on pribadi.nip=pekerjaan.nip inner join bagian on pekerjaan.Kode_bag=bagian.Kode_bag
Tanpa menggunakan inner join
SELECT pribadi.nip, pribadi.nama, pekerjaan.tgl_masuk, bagian.Nama_Bag from pribadi,
pekerjaan,bagian where pribadi.nip=pekerjaan.nip and pekerjaan.kode_bag=bagian.kode_bag
SELECT pribadi.nip, pribadi.nama, pekerjaan.tgl_masuk from pribadi left outer join pekerjaan on
pribadi.nip=pekerjaan.nip
Menggunakan UNION
SELECT .
UNION
SELECT .
UNION .
SELECT .
Syarat utama penggunaan UNION adalah setiap perintah SELECT harus menghasilkan jumlah kolom yang
sama.
Contoh :
Perintah ke 1
SELECT ISBN, JUDUL, HARGA FROM BUKU WHERE HARGA <= 40000
Perintah ke 2
SELECT ISBN, JUDUL, HARGA FROM BUKU WHERE HARGA >= 50000
Jika ingin menggabungkan hasil query tersebut maka dapat digunakan perintah UNION
SELECT ISBN, JUDUL, HARGA FROM BUKU WHERE HARGA <= 40000
UNION
SELECT ISBN, JUDUL, HARGA FROM BUKU WHERE HARGA >= 50000;
Mengelompokkan Data
Pengelompokkan data diperlukan pada saat menggunakan fungsi agregat pada query yang
dibuat.
Dalam SQL, pengelompokkan data dilakukan dengan menggunakan klausa GROUP BY yang
disertakan pada perintah SELECT, contoh menampilkan jumlah buku pada table BUKU yang
dikelompokkan berdasarkan penerbit
Pengurangan dan Interseksi data, dalam MySQL tidak mengenal perintah MINUS dan INTERSECT,
sebagai contoh penggunaan INTERSECT dalam RDBMS (misal : oracle)
SELECT kolom1, kolom2 FROM A
INTERSECT
SELECT kolom1, kolom2 FROM B
Perintah tersebut akan menghasilkan interseksi/irisan antara query ke-1 dan query ke-2. Dalam MySQL
dapat diganti dengan perintah berikut:
SELECT A.kolom1, A.kolom2 FROM A
INNER JOIN B
USING (kolom1, kolom2)
Contoh :
SELECT A.PENERBIT_ID FROM PENERBIT A INNER JOIN BUKU B USING (PENERBIT_ID);
Sama seperti INTERSECT, penggunaan MINUS juga memiliki bentuk yang sama, contoh penggunaan
MINUS dalam RDBMS (misal : oracle)
SELECT kolom1, kolom2 FROM A
MINUS
SELECT kolom1, kolom2 FROM B
Perintah tersebut akan mengurangi data yang dihasilkan oleh query ke-1 dengan data yang dihasilkan
pada query ke-2. Dalam MySQL dapat diganti dengan perintah berikut:
SELECT A.kolom1, A.kolom2 FROM A
WHERE (kolom1, kolom2) NOT IN
(SELECT kolom1, kolom2 FROM B)
Contoh :
SELECT A.PENERBIT_ID FROM PENERBIT A WHERE (A.PENERBIT_ID) NOT IN
Subquery adalah perintah SELECT (Query) yang terdapat dalam perintah SELECT yang lain.
Dengan dukungan subquery kita dapat membuat format laporan sesuai dengan yang
diharapkan.
Sebagai contoh sederhana, kita dapat membuat query yang dapat memberikan informasi jumlah
buku yang diterbitkan oleh masing-masing penerbit.
SELECT A.PENERBIT_ID, A.PENERBIT_NAMA,
(SELECT COUNT(*) FROM BUKU WHERE PENERBIT_ID=A.PENERBIT_ID) AS JUMLAH BUKU
FROM PENERBIT A
Subquery bias juga digunakan sebagai penentu kondisi query (di bagian WHERE). Contoh :
SELECT PENERBIT_ID, PENERBIT_NAMA FROM PENERBIT WHERE PENERBIT_ID NOT IN (SELECT
PENERBIT_ID FROM BUKU)
FUNGSI AGREGASI
Fungsi Agregasi adalah fungsi dalam MySQL yang digunakan untuk melakukan perhitungan
dalam query. Pada umumnya dikombinasikan dengan klausa GROUP BY untuk menghasilkan
rangkuman nilai yang dikelompokkan berdasarkan kolom tertentu.
Berikut ini fungsi-fungsi yang termasuk dalam fungsi agregat adalah MIN, MAX, SUM, COUNT,
AVG, GROUP_CONCAT.
Fungsi MIN berfungsi untuk mengembalikan nilai minimal atau nilai terkecil dari suatu kolom
pada table tertentu.
SELECT MIN(BUKU_JMLHALAMAN) FROM BUKU;
SELECT MIN(BUKU_JUDUL) FROM BUKU;
Fungsi MAX berfungsi untuk mengembalikan nilai maksimal atau nilai terbesari dari suatu kolom
pada table tertentu.
SELECT MAX(BUKU_JMLHALAMAN) FROM BUKU;
SELECT MAX(BUKU_JUDUL) FROM BUKU;
Fungsi SUM berguna untuk mmenjumlahkan nilai dari suatu kolom dalam table tertentu.
Fungsi COUNT berfungsi untuk memperoleh banyaknya baris yang dihasilkan oleh suatu query.
SELECT COUNT(*) FROM BUKU WHERE PENERBIT_ID=P002;
SELECT PENERBIT_ID, COUNT(PENERBIT_ID) FROM BUKU GROUP BY PENERBIT_ID;
Fungsi AVG berfungsi untuk menghitung nilai rata-rata yang dihasilkan oleh suatu query
SELECT AVG(BUKU_JMLHALAMAN) FROM BUKU WHERE PENERBIT_ID=POO2;
Fungsi GROUP_CONCAT adalah fungsi yang hanya disediakan oleh MySQL. Fungsi ini untuk
menyambung beberapa baris data dari suatu kolom menjadi string tunggal.
Contoh:
1. SELECT PENERBIT_NAMA FROM PENERBIT;
2. SELECT GROUP_CONCAT(PENERBIT_NAMA) FROM PENERBIT;
Secara Default, pemisah yang digunakan dalam fungsi GROUP_CONCAT adalah tanda koma (,).
Anda dapat mengubah pemisah menggunakan karakter lain dengan cara menyertakan klusa
SEPARATOR.
SELECT GROUP_CONCAT(PENERBIT_NAMA SEPARATOR -) FROM PENERBIT;
Selain itu dapat digunakan klausa ORDER BY, DISTINCT untuk mengurutkan nilai yang akan
digabung dalam string tunggal. Contoh:
SELECT GROUP_CONCAT(PENERBIT_NAMA ORDER BY PENERBIT_NAMA) FROM PENERBIT;
SELECT GROUP_CONCAT(DISTINCT PENERBIT_NAMA) FROM PENERBIT;