View: Menyimpan Query Rumit Sebagai Tabel Virtual

CREATE VIEW untuk menyederhanakan query panjang dan membatasi akses data, serta pengantar materialized view di PostgreSQL.

Part 22 dari 25 ± 30 menit Gratis

Analogi: VIEW itu seperti kacamata dengan filter: data aslinya tidak berubah, tetapi kamu melihatnya lewat sudut pandang tertentu. Atau seperti jalan pintas (shortcut) di desktop yang menyimpan query panjang dengan nama pendek.

Masalah: query panjang yang diulang-ulang

Laporan "pesanan beserta nama pelanggan dan total belanja" membutuhkan tiga tabel, JOIN, dan GROUP BY. Kalau tiap orang menulis ulang, hasilnya bisa beda-beda dan penuh salah ketik. Solusinya: simpan sekali sebagai view.

Analogi: view itu seperti jendela yang menampilkan sebagian rumah. Isinya tidak disalin: kamu hanya melihat data asli lewat "kaca" tertentu.

Membuat view

CREATE VIEW v_ringkasan_pesanan AS
SELECT p.id AS pesanan_id,
       pl.nama AS pelanggan,
       p.tanggal,
       p.status,
       SUM(d.jumlah * d.harga_satuan) AS total
FROM pesanan p
JOIN pelanggan pl ON pl.id = p.pelanggan_id
JOIN detail_pesanan d ON d.pesanan_id = p.id
GROUP BY p.id, pl.nama, p.tanggal, p.status;

Setelah dibuat, pakai seperti tabel biasa:

SELECT * FROM v_ringkasan_pesanan WHERE status = 'lunas' ORDER BY pesanan_id;

Setiap kali dipanggil, Postgres menjalankan query di balik view dan datanya selalu terbaru.

Manfaat view

  • Menyederhanakan: query rumit cukup ditulis sekali.
  • Konsisten: semua orang memakai definisi "total" yang sama.
  • Keamanan: beri akses ke view yang menyembunyikan kolom sensitif (misalnya gaji, kata sandi) tanpa membuka tabel aslinya.

Mengubah dan menghapus view

CREATE OR REPLACE VIEW v_ringkasan_pesanan AS ...;   -- ganti definisi
DROP VIEW v_ringkasan_pesanan;                       -- hapus view (data asli aman)

Materialized view: view yang menyimpan hasil

View biasa menghitung ulang setiap dipanggil. Kalau perhitungannya berat (laporan besar), PostgreSQL punya materialized view: hasilnya disimpan seperti tabel dan diperbarui hanya saat kamu minta.

CREATE MATERIALIZED VIEW laporan_bulanan AS SELECT ...;
REFRESH MATERIALIZED VIEW laporan_bulanan;           -- perbarui isinya
ViewMaterialized view
Menyimpan data?Tidak, hanya definisi queryYa, hasil disalin
Data selalu terbaru?YaTidak, sampai di-REFRESH
KecepatanSama dengan query aslinyaSangat cepat dibaca
Cocok untukPenyederhanaan, keamananLaporan berat, dashboard

Catatan simulator: latihan memakai view biasa. Materialized view dibahas sebagai pengetahuan.

Kasus nyata: laporan penjualan yang dipakai banyak tim

Tim finance, marketing, dan gudang semua butuh daftar penjualan lengkap. Daripada masing-masing menulis ulang JOIN yang panjang (dan berpotensi salah), buat satu view:

CREATE VIEW v_penjualan AS
SELECT p.id AS no_pesanan, p.tanggal, pl.nama AS pelanggan,
       b.judul, d.jumlah, d.jumlah * d.harga_satuan AS subtotal
FROM pesanan p
JOIN pelanggan pl ON pl.id = p.pelanggan_id
JOIN detail_pesanan d ON d.pesanan_id = p.id
JOIN buku b ON b.id = d.buku_id;

SELECT * FROM v_penjualan WHERE tanggal >= CURRENT_DATE - 7;

Kesalahan yang sering terjadi

  • Mengira view menyimpan data sendiri. View biasa hanya menyimpan query; hasilnya dihitung ulang setiap dipanggil.
  • Menumpuk view di atas view sampai sulit dilacak dan lambat.
  • Lupa bahwa MATERIALIZED VIEW menyimpan hasil dan harus di-REFRESH agar datanya segar.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X