Ana içeriğe geç
Kesit SQL
Orta · Veritabanı Tasarımı

View ve materialized view

Sorguyu isimlendirip tablo gibi kullanmak.

Uygulamada aç, 4 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

View: kaydedilmiş sorgu

View veri saklamaz; her kullanıldığında altındaki sorguyu çalıştırır. Karmaşık JOIN'leri gizlemek, iş mantığını tek yerde tutmak ve kullanıcılara yalnızca belirli sütunları göstermek (güvenlik) için kullanılır.

CREATE VIEW v_order_revenue AS
SELECT o.order_id, o.customer_id, o.order_date, o.status, o.channel,
       SUM(oi.quantity * oi.unit_price * (1 - oi.discount)) AS revenue
FROM orders o
JOIN order_items oi ON oi.order_id = o.order_id
GROUP BY o.order_id, o.customer_id, o.order_date, o.status, o.channel;

SELECT channel, ROUND(AVG(revenue), 2) AS ortalama_sepet
FROM v_order_revenue
WHERE status = 'delivered'
GROUP BY channel;
GROUP BY'da tüm sütunlarYukarıda GROUP BY'a seçilen tüm sütunları yazdık. SQLite ve MySQL eksik yazmana izin verebilir ama SQL Server, PostgreSQL ve Oracle hata verir. Taşınabilir SQL için her zaman tam yaz.
SQL Server'daView içinde ORDER BY kullanılamaz (TOP olmadan). Değiştirmek için CREATE OR ALTER VIEW (2016 SP1+) kullanılır. WITH SCHEMABINDING ile bağlı tabloların yapısının değiştirilmesi engellenir; indeksli view'lar (indexed view) için şarttır.

Materialized view

Sonucu fiziksel olarak saklar; okuma çok hızlıdır ama veri değiştikçe yenilenmesi gerekir. PostgreSQL: CREATE MATERIALIZED VIEW + REFRESH MATERIALIZED VIEW; Oracle: materialized view; SQL Server: indexed view (otomatik güncellenir); MySQL ve SQLite'ta yoktur, özet tablo ile taklit edilir.

Analitik pratikVeri ekiplerinde “ciro” gibi metriklerin tanımı tek bir view'da (veya dbt modelinde) tutulur; böylece herkes aynı formülü kullanır.
Alıştırmalara geç (4)