Tabel Virtual
View adalah objek di dalam database yang berisi kumpulan kolom yang dihasilkan dari perintah SELECT
. Sederhananya view adalah objek yang menyimpan hasil query, baik dari satu tabel atau lebih. View juga sering disebut sebagai tabel virtual, karena view sebenranya tidak memiliki data. Data yang ditampilkan oleh view diambil dari tabel-tabel aktual yang disertakan dalam perintah SELECT
.
Mengapa Perlu Menggunakan Tabel Virtual?
Dalam pengelolaan database, view memiliki manfaat bagi kita, di antaranya:
- Akses data menjadi lebih mudah.
- Dapat digunakan untuk menampilkan rangkuman dari suatu perhitungan tertentu.
- Dapat menampilkan beberapa kolom atau beberapa baris saja dari suatu tabel, tergantung dari kondisi yang didefinisikan.
- Dapat digunakan untuk menampilkan data yang berasal dari dua tabel atau lebih.
- View dapat digunakan untuk menampilkan data yang berbeda untuk masing-masing user, sehingga setiap user hanya dapat melihat data yang sesuai dengan hak aksesnya.
Pada kasus-kasus tertentu, data yang terdapat dalam satu view juga harus dapat dimodifikasi menggunakan perintah INSERT
, UPDATE
maupun DELETE
. Jika data dalam suatu view diubah, sebenarnya yang berubah adalah data pada base table.
Membuat View
Dalam MySQL, view dibuat menggunakan perintah CREATE VIEW
. Berikut sintaks umum yang digunakan.
CREATE VIEW v_buku AS
SELECT
a.buku_isbn,
a.buku_judul,
b.penerbit_nama,
a.buku_tglterbit,
a.buku_jmlhalaman,
a.buku_harga
FROM
buku a,
penerbit b
WHERE
a.penerbit_id = b.penerbit_id
ORDER BY
a.buku_judul;
SELECT
yang melibatkan dua tabel, yaitu buku dan penerbit. Kolom relasi antara dua tabel tersebut adalah kolom penerbit_id.
Sekarang kita bisa menampilkan data buku dengan SELECT
view tersebut, berikut query-nya.
Melihat Daftar Kolom di dalam view
Sama halnya seperti pada objek tabel, kita juga dapat melihat daftar kolom yang terdapat di dalam suatu view. Untuk melakukan hal ini kita bisa menjalankan query. Contoh:
Mengubah View
Untuk mengubah definisi dari suatu view yang sebelumnya sudah dibuat, kita perlu menggunakan perintah ALTER VIEW
. Perintah ini akan membuang atau menghapus definisi view yang lama dan menimpanya dengan definisi view yang baru.
Format query-nya sebagai berikut.
Sekarang perhatikan dan jalankan query berikut.
ALTER VIEW v_buku AS
SELECT
a.buku_isbn,
a.buku_judul,
b.penerbit_nama,
a.buku_harga
FROM
buku a,
penerbit b
WHERE
a.penerbit_id = b.penerbit_id
ORDER BY
a.buku_judul;
Menghapus View
Kita dapat menghapus satua tau lebih view yang terdapat di dalam database dengan menggunakan perintah DROP VIEW
. Format umum query-nya adalah sebagai berikut.
IF EXISTS
bersifat opsional dan berfungsi untuk mencegah terjadinya kesalahan pada saat perintah tersebut dieksekusi, yaitu dengan cara melakukan pemeriksaan terlebih dahulu, apakah view yang akan dihapus tersebut ada di dalam database atau tidak.
Jika nama view yang disertakan dalam perintah DROP VIEW
ternyata tidak ada, maka server MySQL akan mengeluarkan pesan peringatan/ warning. Kitadapat menampilkan isi peringatan tersebut dengan perintah SHOW WARNINGS
.
Perhatikan query berikut.
Query di atas akan menghapus dua view sekaligus. Sekarang jalankan query berikut untuk menghapus viewv_buku
.
Membuat View yang Dapat Dimodifikasi
Suatu view dapat dimodifikasi jika kolom-kolom dalam view tersebut mengacu langsung ke kolom yang terdapat pada base tabel, bukan hasil proses perhitungan. Sebagai contoh, coba perhatikan dan jalankan query berikut.
Membuat view v_jmlBukuPerPenerbit
CREATE VIEW v_jmlBukuPerPenerbit AS
SELECT
b.penerbit_nama "Nama Penerbit",
COUNT(a.buku_judul) "Jumlah Buku"
FROM
buku a,
penerbit b
WHERE
a.penerbit_id = b.penerbit_id
GROUP BY
b.penerbit_nama
ORDER BY
b.penerbit_nama;
COUNT()
.
Sekarang kita coba membuat view yang bisa dimodifikasi. Perhatikan dan jalankan query berikut.
Membuat view v_jmlHalaman
CREATE VIEW v_jmlHalaman AS
SELECT
buku_isbn,
buku_judul,
buku_jmlhalaman
FROM
buku
ORDER BY
buku_isbn;
Perhatikan nilai dari kolom buku_jmlhalaman. Nilai yang ditampilkan sekarang adalah 280, yang awalnya bernilai 270. Ini terjadi karena kita telah melakukan modifikasi terhadap view v_jmlHalaman menggunakan perintah UPDATE
.
Data yang sebenarnya diubah adalah data pada kolom tabel yang diakses, bukan data di dalam view yang bersangkutan. karena secara fisik view tidak pernah memiliki data. Karena inilah view sering disebut sebagai tabel virtual. Untuk membuktikan hal ini sekarang mari kita lihat datanya langsung dari tabel asli.
Hasil yang diperoleh akan sama seperti pada asat kita mengaksesnya melalui view v_jmlHalaman.Batasan-batasan dalam Penggunaan View
Pendefinisian view dapat menggunakan klausa-klausa yang terdapat pada perintah SELECT
, seperti WHERE
, GROUP BY
, ORDER BY
dan lain-lain. Namun demikian ada batasan-batasan yang perlu diperhatikan, yaitu:
- Kita tidak dapat membuat view temporari
- Kita tidak dapat mengasosiasikan trigger dengan view
- Tabel-tabel yang diakses oleh view harus ada di dalam database. Jika nama tabel diubah, maka view tidak dapat digunakan lagi, karena terjadi kesalahan pada saat dieksekusi
- Perintah
SELECT
yang didefinisikan di dalam view tidak boleh berisi kontruksi-kontruksi berikut:- Subquery di dalam klausa
FROM
- Mengacu ke tabel temporari
- Subquery di dalam klausa