SQL görünüm (VIEW) oluşturma: sözdizimi, kullanım alanları ve sınırları
SQL VIEW (görünüm) oluşturma, güncelleme ve silme adımları; raporlama, güvenlik ve sadeleştirme için kullanım örnekleri, sınırlar ve sık hatalar.
VIEW nedir, tablodan farkı ne?
Görünüm (view), bir SELECT sorgusuna verilen kalıcı addır. Veritabanında saklanan şey veri değil, sorgunun tanımıdır. Görünüm sorgulandığında veritabanı bu tanımı çalıştırır ve sonucu bir tablo gibi sunar. Kullanıcı açısından tablodan farkı yoktur: SELECT ile okunur, JOIN'e katılır, filtrelenebilir.
Bu yapı sanal tablo olarak da anılır. Veri asıl tablolarda durur; görünüm onların üzerinden bakılan bir penceredir. Asıl tablolar değiştiğinde görünümün sonucu da otomatik olarak güncel olur, çünkü her sorguda yeniden hesaplanır.
Görünümün en önemli faydası, karmaşık bir sorguyu bir kez yazıp tekrar tekrar kullanabilmektir. Birkaç tabloyu birleştiren, filtreleyen ve hesaplanmış sütunlar üreten uzun bir sorgu, herkesin bildiği tek bir isimle çağrılabilir.
Görünüm oluşturma: sözdizimi ve örnek
Temel yazım CREATE VIEW görünüm_adı AS ardından bir SELECT sorgusudur. Örneğin sipariş, müşteri ve ürün tablolarını birleştirip rapor için gerekli sütunları sunan bir görünüm oluşturulabilir: CREATE VIEW v_siparis_ozeti AS SELECT siparis tarihi, müşteri adı, ürün adı, tutar FROM siparis JOIN customer JOIN product. Sonrasında raporlama kullanıcısı bu birleştirmeyi bilmek zorunda kalmadan SELECT * FROM v_siparis_ozeti ile veriyi alır.
Mevcut bir görünümü değiştirmek için SQL Server'da ALTER VIEW, MySQL ve PostgreSQL'de CREATE OR REPLACE VIEW kullanılır. Silmek için DROP VIEW yazılır; asıl tablolar ve veriler bu işlemden etkilenmez.
Ad verirken tutarlı bir kural benimsemek, görünümleri tablolardan ayırt etmeyi kolaylaştırır. Birçok ekip v_ öneki ya da vw_ öneki kullanır. Görünüm içinde sütunlara anlamlı takma adlar vermek, görünümü kullanan kişinin asıl tablo yapısını bilmesini gereksiz hale getirir.
Görünüm oluşturma yetkisi ayrı bir izindir; yöneticiden CREATE VIEW yetkisi ve temel tablolara okuma izni istenmesi gerekir.
Görünüm ne zaman kullanılır?
Görünümler şu temel ihtiyaçlarda öne çıkar: sadeleştirme, güvenlik, tutarlılık ve kolay raporlama.
Sadeleştirme: Uzun JOIN zincirlerini ve hesaplamaları tek isim altında saklamak. Analistler yeni sorgu yazarken her seferinde aynı birleştirmeyi baştan yazmaz.
Güvenlik: Kullanıcıya tablonun tamamı yerine yalnızca belirli sütun ve satırları göstermek. Örneğin çalışan tablosunda maaş sütunu bulunuyorsa, yönetici olmayan kullanıcıya bu sütunu içermeyen bir görünüm üzerinden erişim verilir. Kullanıcıya asıl tabloda izin vermek yerine yalnızca görünümde izin tanımlanır.
Tutarlılık: Aktif müşteri, geçerli sipariş ya da net satış gibi iş tanımları tek bir yerde yazılır. Böylece farklı raporlar aynı kuralı farklı yazıp farklı sonuç üretmez.
Kolay raporlama: Power BI ve benzeri araçlar veritabanına bağlanırken hazır görünümü okuyabilir. Bu, filtre ve birleştirme mantığını araç yerine veritabanında tutar, rapor sahibinin SQL bilmesi gerekliliğini azaltır ve mantık değiştiğinde yalnızca görünüm güncellenir.
Görünüm üzerinden veri değiştirmek mümkün mü?
Basit görünümler, yani tek bir tablodan seçim yapan ve toplama içermeyen görünümler, üzerinden INSERT, UPDATE ve DELETE işlemlerine izin verebilir. İşlem asıl tabloya yansır. Ancak birden çok tabloyu birleştiren, GROUP BY, DISTINCT ya da toplama fonksiyonu içeren görünümler genellikle güncellenemez, çünkü hangi satırın değişeceği belirsizdir.
Güncellenebilir görünümlerde bir tuzak vardır: görünüm WHERE koşuluyla satırları sınırlıyorsa, görünüm üzerinden eklenen ya da değiştirilen bir satır kendi koşulunu sağlamayıp görünümden kaybolabilir. WITH CHECK OPTION bu durumu engeller; yapılan her değişikliğin görünümün koşuluna uymasını zorunlu kılar.
Uygulamada raporlama amaçlı görünümler genellikle yalnızca okunur. Veri değiştirme işlemleri doğrudan tablolar üzerinden ya da kontrol edilen saklı yordamlar aracılığıyla yapılır. Bu yaklaşım hem beklenmedik yan etkileri azaltır hem de değişikliklerin kaydını sadeleştirir.
Performans ve materyalize görünüm
Yaygın bir yanılgı, görünümün sorguyu hızlandırdığı düşüncesidir. Normal görünüm veriyi saklamaz; her çağrıldığında içindeki sorgu çalışır. Dolayısıyla görünüm, yazım kolaylığı sağlar, hız sağlamaz. Hatta görünümün üzerine görünüm kurulan iç içe yapılar, veritabanının optimize etmesini zorlaştırabilir ve beklenmedik yavaşlıklara yol açabilir.
Sonucu gerçekten saklayan yapı materyalize (materialized) görünümdür. PostgreSQL ve Oracle gibi sistemlerde bulunur; sorgunun sonucu fiziksel olarak saklanır ve yenilendiğinde güncellenir. Ağır toplama sorgularını hızlandırmak için kullanılır, ancak veri yenilenene kadar eski kalabilir. SQL Server'da benzer amaç için indeksli görünüm kullanılır; MySQL'de doğrudan bir karşılığı yoktur ve genellikle zamanlanmış görevle doldurulan bir özet tablo kurulur.
Seçim yaparken şu soru sorulur: veri her sorguda güncel mi olmalı, yoksa belirli bir gecikme kabul edilebilir mi? Anlık veri gerekiyorsa normal görünüm, ağır hesaplamada hızlı yanıt gerekiyorsa materyalize görünüm uygundur.
Sık yapılan hatalar
En yaygın hata, görünüm içinde SELECT * kullanmaktır. Asıl tabloya sonradan sütun eklendiğinde ya da sütun sırası değiştiğinde görünüm beklenmedik şekilde davranabilir, bazı sistemlerde sütun listesi görünüm oluşturulduğu anda sabitlenir. Sütunları açıkça yazmak daha güvenlidir.
Bir diğer hata, görünümleri birbirine zincirlemektir. Bir görünüm başka bir görünümü çağırır, o da bir başkasını; zamanla kimse hangi mantığın nerede olduğunu bilemez ve performans sorunu aranırken izlemek zorlaşır. Zinciri kısa tutmak ve görünümleri belgelemek gerekir.
Diğer sık sorunlar: • Görünüm içinde ORDER BY kullanmak; birçok sistemde izin verilmez ya da sıralamanın korunacağına güvenilemez, sıralama görünümü çağıran sorguda yapılmalı • Asıl tablo yapısı değiştiğinde bağlı görünümleri kontrol etmemek • Güvenlik amacıyla kullanılan görünümde asıl tabloya doğrudan izin açık bırakmak • Görünümü bir hız aracı sanıp performans sorununu ona yüklemek • Hangi raporun hangi görünümü kullandığını kaydetmemek ve silince raporları bozmak
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Mindset kataloğundaki SQL ile Programlama Eğitimi, Görüntüleme (Views) başlığını doğrudan içerir; Veritabanları Oluşturma, Tablolarla Çalışma ve Join Kullanımı başlıkları da görünümün üzerine kurulduğu temelleri verir.
SQL ile Veri Sorgulama (İleri) eğitimi ise Görünümler, Stored Procedure ve Tetikleyiciler modülünü, Sorgu Performansı ve Yürütme Planı Analizi ile birlikte sunar. Veri ekiplerinde ortak rapor mantığını görünümlerle standartlaştırmak isteyen analistler ve geliştiriciler için bu modüller uygulamalı bir çerçeve sağlar.
İlgili Mindset programı
SQL ile Veri Sorgulama (İleri)
Sık sorulan sorular
View veriyi saklar mı?
Normal görünüm veriyi saklamaz, yalnızca sorgu tanımını saklar. Her çağrıldığında asıl tablolardan güncel veri okunur. Veriyi fiziksel olarak saklayan yapı materyalize görünümdür ve her veritabanı sisteminde bulunmaz. Bu fark, görünümün güncel olmasının ama otomatik hızlı olmamasının nedenidir.
View ile tablo arasındaki temel fark nedir?
Tablo veriyi fiziksel olarak tutar, görünüm ise bir sorgunun adlandırılmış halidir. Görünümden okurken tablodan okur gibi davranılır, ancak veri yine asıl tablolardadır. Görünümün kendisinde indeks bulunmaz (indeksli görünüm hariç); bu yüzden hız asıl tablodaki indekslere ve sorgu yapısına bağlıdır.
View silinirse veri de silinir mi?
Hayır. DROP VIEW yalnızca görünüm tanımını kaldırır; asıl tablolardaki veri etkilenmez. Ancak o görünümü kullanan raporlar, sorgular ve başka görünümler hata vermeye başlar. Silmeden önce hangi nesnelerin görünüme bağlı olduğunu kontrol etmek gerekir.
Görünüm üzerinden INSERT veya UPDATE yapılabilir mi?
Tek tablodan seçim yapan basit görünümlerde genellikle yapılabilir ve değişiklik asıl tabloya yansır. Birden çok tabloyu birleştiren ya da toplama içeren görünümlerde genellikle mümkün değildir. WITH CHECK OPTION, yapılan değişikliğin görünümün koşuluna uymasını zorlayarak beklenmedik sonuçları önler.
View yerine CTE veya geçici tablo ne zaman tercih edilir?
Görünüm kalıcıdır ve birçok sorguda ortak kullanılır. CTE yalnızca tek sorgu içinde geçerlidir ve o sorguya özgü ara adım için uygundur. Geçici tablo ise ara sonucu saklayıp üzerinde indeks kurmak gerektiğinde işe yarar. Kalıcı ve paylaşılan bir iş mantığı için görünüm, tek seferlik hesaplama için CTE seçilir.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası