Mysql View Hakkında

Açıkçası, birden fazla tabloya join olmak veya subquery atmanıza sebep olacak sorgularınız BENCE olmamalı.

View’da topladığınız veriler, ilişkili olduğu satırlara ve tablolara bağlı olarak kendini günceller. Raporlar için attığınız bir çok query veya uzun uzadıya sorgunuz olabilir.

View kullanmak bu sorguları minimize etmek, özetini çıkarmak için çok iyi bir yöntemdir.

2 Tablomuz olsun;

Tablo 1: musteriler
ID, ADI, SOYADI, IL alanlarına sahip olsun

Tablo 2: siparisler

ID, MUSTERI_ID, FIYAT, ADET, TARIH alanlarına sahip olsun.

Hangi müşteri, toplam kaç adet ürün, toplam ne kadar ödeme yapmış ve bunları günlük bazda görmek için tek sorguda getirmeniz gerektiğini düşünerek;

SELECT
siparisler.MUSTERI_ID,
musteriler.ADI,
musteriler.SOYADI,
SUM(siparisler.FIYAT) as toplam_fiyat,
SUM(siparisler.ADET) as toplam_adet,
DATE(siparisler.TARIH) as tarih
LEFT JOIN musteriler ON musteriler.ID = siparisler.MUSTERI_ID GROUP BY DATE(siparisler.TARIH)

Gibi sorgunuzu yazdınız.. Where atıp tarih aralığına göre, müşteriye göre veya (eklememişim ama siz eklersiniz) gönderilen illere göre türlü türlü raporlar talep edilebilir. Tüm bu tabloların çıkardığı sonucun tek bir tablo gibi hareket etmesini ve bir satırda güncelleme yapıldığına (Örneğin bir ürün satıldığında hem fiyat hem adet olarak artış olması gerektiğinden) buradan da güncellenmesini istiyorsak, view oluşturmalıyız.

Sorgunun başına CREATE VIEW view_siparis_raporlari AS select ... Ekleyerek AS’den sonraki sorgunun sonuçları bir tablo gibi view olarak oluşacaktır.

Kullanımı tablolar ile aynıdır. (Sadece SELECT atılır!) Bu view table’a select SUM(toplam_fiyat) from view_siparis_raporlari gibi bir sorgu atarak tüm zamanlar için toplan siparişi alabilirsiniz. veya WHERE tarih BETWEEN ... AND ... ekleyerek iki tarih aralığını alabilir, gruplayabilir ve dizilimi değiştirebilirsiniz. Kısaca tabloya SELECT ile neler yapıyorsanız, buna da yapabilirsiniz.