B. VIEW
VIEW merupakan pernyataan (statement) SQL yang digunakan untuk “menyimpan” hasil operasi
SELECT pada suatu database. Tujuan dari VIEW diantaranya adalah untuk mempermudah dan
mempercepat proses menampilkan data, terutama jika operasi tersebut dilakukan secara berulang.
Jika dalam suatu database terdapat beberapa tabel yang berisi data secara fisik, maka VIEW dapat
dianggap sebagai “tabel virtual”. Meskipun VIEW tidak memiliki data secara fisik, VIEW dapat dirujuk
seolah-olah merupakan tabel dalam database.
1. Membuat VIEW.
Format dasar dari query VIEW yaitu:
CREATE VIEW nama_view AS
Query_select_statement;
Jika diperhatikan, format dasar tersebut sangat mudah dilakukan. Untuk membuat suatu VIEW,
cukup menambahkan perintah CREATE VIEW pada Query_select_statement yang diinginkan.
Sebagai contoh, lihat kembali contoh soal yang menggunakan database classicmodels pada
modul sebelumnya, misalnya diambil soal berikut:
14. Buat daftar nama eksekutif dengan jabatan VP atau Manajer! Gunakan fungsi
CONCAT untuk menggabungkan nama depan dan nama belakang karyawan ke dalam satu
kolom.
Page 1 of 17
Modul 4
SQL Tingkat Lanjut
FROM employees
WHERE jobTitle LIKE "%VP%" OR jobTitle LIKE "%Manager%";
VIEW yang dibuat muncul di panel Navigator, pada bagian Views (jika query sudah dieksekusi dan
VIEW belum muncul, klik tombol refresh).
Selain itu, VIEW yang telah dibuat dapat pula dilihat menggunakan query SHOW TABLES
SHOW TABLES;
Atau jika ingin diperoleh informasi lebih detail, gunakan query SHOW FULL TABLES
SHOW FULL TABLES;
Menggunakan query SHOW FULL TABLES akan diperoleh informasi yang lebih jelas apakah suatu tabel
dalam database merupakan BASE TABLE atau merupakan VIEW.
Operasi-operasi pada tabel dapat dilakukan pula pada VIEW, misal jika ingin menampilkan deskripsi
dari suatu VIEW
DESCRIBE no14;
Page 2 of 17
Modul 4
SQL Tingkat Lanjut
Melihat melihat isi dari VIEW, dapat digunakan query SELECT seperti biasanya
SELECT * FROM no14;
Pemanggilan menggunakan tabel virtual atau VIEW akan lebih cepat dalam proses menampilkan
data. Karena setiap VIEW dipanggil MySQL tidak melakukan filtering data, namun hanya memanggil
kembali tabel virtualnya.
Dibuat VIEW yang berisi id_anggota, nama, jk, tgl_lahir, no_telp dari anggota Pria. Query sql
sebagai berikut:
CREATE VIEW angg_pria AS
SELECT id_anggota, nama, jk, tgl_lahir,no_telp
FROM anggota
WHERE jk = 'Pria';
Page 3 of 17
Modul 4
SQL Tingkat Lanjut
SELECT * FROM angg_pria;
Misal ingin dicari anggota dengan id_anggota = 'A-14-042' dari VIEW angg_pria maka dapat
digunakan query SELECT seperti halnya pada tabel biasa, yaitu:
SELECT * FROM angg_pria WHERE id_anggota = 'A-14-042';
Selanjutnya jika ditambah data baru (insert) pada tabel utama (BASE TABLE), maka data tersebut juga
akan muncul di VIEW, contoh:
INSERT INTO anggota VALUES
('A-21-001', 'Alan ZZ', 'Pria', 'Yogyakarta','2004-05-23','012345678912');
SELECT * FROM angg_pria;
Cara sebaliknya juga bisa dilakukan, yaitu menambahkan data melalui VIEW di mana data yang
ditambahkan tersebut akan muncul juga di tabel utama (dalam menggunakan langkah ini perlu
diperhatikan beberapa hal, misalnya: dilihat apakah terdapat atribut di tabel utama dengan constraint
NOT NULL yang atribut tersebut tidak disertakan dalam VIEW, jika terjadi hal seperti ini insert data
melalui VIEW tidak dapat dilakukan).
Contoh insert data melalui VIEW:
INSERT INTO angg_pria VALUES
('A-21-004', 'Robot', 'Pria', '2004-11-18','098765432198');
SELECT * FROM angg_pria;
Page 4 of 17
Modul 4
SQL Tingkat Lanjut
3. Referensi:
https://www.mysqltutorial.org/mysql-views-tutorial.aspx
https://www.duniailkom.com/tutorial-belajar-mysql-pengertian-view-dan-cara-penggunaan-
view-dalam-mysql/
C. Subquery
Secara sederhana, subquery di MySQL adalah query di dalam query atau query yang bersarang di
dalam query lain seperti SELECT, INSERT, UPDATE, atau DELETE. Subquery juga dapat disarangkan di
dalam subquery lainnya.
Suatu subquery disebut sebagai inner query (kueri dalam) sedangkan query yang berisi subquery
disebut outer query (kueri luar). Subquery dapat digunakan di mana saja dan harus ditulis dalam
tanda kurung (parentheses).
1. Menggunakan subquery.
Dalam bagian ini digunakan database classicmodels.
Misalnya, query berikut menggunakan subquery untuk menampilkan data karyawan (employees)
yang bekerja di kantor (offices) yang berlokasi di AS.
SELECT lastName, firstName VALUES
FROM employees WHERE officeCode
IN (SELECT officeCode FROM offices WHERE country = 'USA');
Page 5 of 17
Modul 4
SQL Tingkat Lanjut
Saat mengeksekusi query, MySQL mengeksekusi subquery terlebih dahulu dan menggunakan hasil
dari subquery untuk outer query.
Contoh lain, ditampilkan data pelanggan yang pembayarannya lebih besar dari pembayaran rata-
rata:
SELECT customerNumber, checkNumber, amount
FROM payments
WHERE amount > (SELECT AVG(amount) FROM payments);
Page 6 of 17
Modul 4
SQL Tingkat Lanjut
Note: Fungsi FLOOR menghasilkan nilai integer terbesar yang lebih kecil dari atau sama dengan dari
suatu bilangan (selengkapnya dapat dilihat di: https://www.mysqltutorial.org/mysql-math-functions).
Tidak seperti subquery mandiri, correlated subquery adalah subquery yang menggunakan data dari
outer query. Dengan kata lain, correlated subquery bergantung pada outer query. correlated
subquery dievaluasi setiap barisnya dalam outer query.
Digunakan tabel produk (products) dari database classicmodels untuk contoh-contoh berikut.
Contoh berikut menggunakan correlated subquery untuk memilih produk yang harga belinya lebih
besar dari harga beli rata-rata semua produk di setiap lini produk.
SELECT productname, buyprice FROM products p1
WHERE
buyprice > (SELECT AVG(buyprice) FROM products WHERE productline = p1.productline);
Page 7 of 17
Modul 4
SQL Tingkat Lanjut
Dalam contoh ini, baik outer query maupun correlated subquery merujuk pada tabel produk yang
sama. Oleh karena itu, perlu digunakan alias p1 untuk tabel produk di outer query.
Tidak seperti subquery biasa, correlated subquery tidak dapat dijalankan secara independen seperti
di bawah. Jika dilakukan, MySQL tidak mengetahui tabel p1 dan akan mengeluarkan pesan error.
SELECT AVG(buyprice) FROM products WHERE productline = p1.productline;
5. Referensi:
https://www.mysqltutorial.org/mysql-subquery/
D. Prosedur
Prosedur (atau Stored Procedure) merupakan suatu program berisi perintah/query SQL yang dapat
dipanggil atau dieksekusi kembali saat diperlukan. Program tersebut disimpan di dalam SQL server.
Sebuah Stored Procedure dapat memiliki parameter sehingga dapat dinputkan suatu nilai pada
Stored Procedure dan outputnya berasarkan nilai input tersebut. Misalnya, suatu Stored Procedure
yang menghasilkan data pelanggan menurut negara dan kota. Dalam hal ini, negara dan kota adalah
parameter dari Stored Procedure.
Stored Procedure dapat berisi control flow statements seperti IF, CASE, dan LOOP yang
memungkinkan untuk mengimplementasikan perintah secara prosedural. Stored Procedure dapat
memanggil Stored Procedure atau Stored Function lainnya.
1. Delimiter
a. Mengganti Delimiter
Perintah SQL seperti di MySQL Workbench, misalnya statement/query SELECT, menggunakan
delimiter (akhiran) titik koma (;) sebagai penanda untuk akhiran dari suatu statement atau query.
Namun, Stored Prosedure berisi beberapa statement yang dipisahkan dengan tanda titik koma ( ;).
Jika suatu Stored Procedure yang mengandung tanda titik koma didefinisikan, MySQL akan
memperlakukan Stored Prosedure tersebut sebagai beberapa statement, bukan statement tunggal.
Oleh karena itu, delimiter harus didefinisikan kembali untuk sementara sehingga keseluruhan Stored
Procedure akan dieksekusi sebagai statement tunggal.
Karakter delimiter yang digunakan dapat berupa karakter tunggal atau ganda seperti // atau ??.
Namun harus dihindari penggunaan karakter default dalam MySQL seperti backslash (\).
Sebagai contoh delimiter akan didefinisikan ualng dengan karakter // :
DELIMITER //
Page 8 of 17
Modul 4
SQL Tingkat Lanjut
Ketika delimiter sudah berubah, maka delimiter yang baru dapat digunakan untuk mengakhiri suatu
statement, sebagai contoh:
DELIMITER //
SELECT * FROM customers //
SELECT * FROM products //
Untuk mengembalikan delimiter seperti semula, yakni titik koma ( ;) dapat digunakan statement
berikut:
DELIMITER ;
DELIMITER ;
Note:
1. Ubah delimiter default ke $$ atau //.
2. Gunakan (;) pada bagian utama Stored Procedure dan $$ (atau //) pada setiap akhir dari kata kunci
untuk mengakhiri Stored Procedure.
3. Kembalikan delimiter ke defaultnya (;).
DELIMITER ;
Sebagai contoh, akan dilihat seluruh data pegawai dalam database classicmodels, query nya sebagai
berikut:
SELECT * FROM employees ;
Selanjutnya, dibuat Prosedur untuk query di atas, misal Prosedur tersebut diberi nama peg01, query nya
sebagai berikut:
Page 9 of 17
Modul 4
SQL Tingkat Lanjut
DELIMITER //
CREATE PROCEDURE peg01()
BEGIN
SELECT * FROM employees;
END //
DELIMITER ;
b. Memanggil Prosedur
Format untuk memanggil Prosedur dengan menggunakan CALL:
CALL nama_prosedur(daftar_argumen);
Selanjutnya klik kanan pada menu prosedur di panel Navigator, pilih Created Stored Procedure…
Page 10 of 17
Modul 4
SQL Tingkat Lanjut
Isikan nama prosedur dan statements sesuai dengan keperluan, misal diberi nama pelanggan dan
statements diisi dengan query yang menampilkan seluruh data pelanggan:
Periksa kembali query yang ditulis, sudah sesuai atau belum. Jika sudah, klik tombol Apply
Page 11 of 17
Modul 4
SQL Tingkat Lanjut
Klik Finish
Page 12 of 17
Modul 4
SQL Tingkat Lanjut
Bagian [LIKE 'pattern' | WHERE kondisi] dapat diisi sesuai keperluan, atau tidak ditulis sama sekali.
Misal ingin dilihat semua Prosedur yang ada:
SHOW PROCEDURE STATUS;
Hasilnya:
Terlihat semua prosedur yang ada di server, baik di database classismodels maupun dari database lainnya.
Jika hanya ingin menampilkan Prosedur yang ada di database classismodels, maka perintahnya adalah:
SHOW PROCEDURE STATUS WHERE db = 'classicmodels';
Page 13 of 17
Modul 4
SQL Tingkat Lanjut
e. Menghapus Prosedur
Format untuk menghapus suatu Prosedur dengan menggunakan DROP:
DROP PROCEDURE [IF EXISTS] nama_prosedur;
Struktur Prosedur pelanggan diubah, dengan hanya menampilkan kolom customerNumber, customerName,
dan salesRepEmployeeNumber. Pada kotak DDL tuliskan query berikut:
Page 14 of 17
Modul 4
SQL Tingkat Lanjut
Page 15 of 17
Modul 4
SQL Tingkat Lanjut
b. Statement CASE
Lebih lanjut: https://www.mysqltutorial.org/mysql-case-statement/
6. Perulangan (Looping)
a. Loop
Lebih lanjut: https://www.mysqltutorial.org/stored-procedures-loop.aspx
b. WHILE Loop
Lebih lanjut: https://www.mysqltutorial.org/mysql-stored-procedure/mysql-while-loop/
c. REPEAT Loop
Lebih lanjut: https://www.mysqltutorial.org/mysql-stored-procedure/mysql-repeat-loop/
d. LEAVE Statement
Lebih lanjut: https://www.mysqltutorial.org/mysql-stored-procedure/mysql-leave/
E. Fungsi (Function)
Perbedaan Fungsi dengan Prosedur diantaranya:
1. Fungsi bisa menghasilkan suatu nilai (return value)
2. Parameter yang bisa digunakan dalam Fungsi hanya parameter IN
3. Fungsi bisa langsung dipanggil dari query SELECT.
Page 16 of 17
Modul 4
SQL Tingkat Lanjut
1. Membuat Fungsi
Lebih lanjut: https://www.mysqltutorial.org/mysql-stored-function/
2. Menghapus Fungsi
Lebih lanjut: https://www.mysqltutorial.org/mysql-stored-procedure/mysql-drop-function/
F. Trigger.
Di MySQL, Trigger adalah program tersimpan yang dipanggil secara otomatis sebagai respons
terhadap peristiwa seperti INSERT, UPDATE, atau DELETE yang terjadi pada tabel terkait. Misalnya,
dientukan Trigger yang dipanggil secara otomatis sebelum baris baru dimasukkan ke dalam tabel.
MySQL mendukung Trigger yang dipanggil sebagai respons terhadap event INSERT, UPDATE,
atau DELETE.
2. Referensi:
Lebih lengkap tentang trigger dapat dilihat di: https://www.mysqltutorial.org/mysql-triggers/
Page 17 of 17