SQL View Oluşturma ve Kullanma
SQL meraklısı veritabanı uzmanları ve yazılımcılara yeniden selamlar olsun :)
Artık SQL DML (select,insert,update,delete) makalelerimizle öğrendiğimize göre veritabanı oluştururken öğrendiğimi DDL sorgularına yeniden geri dönüyoruz..
Bu makalemizde SQL View konusunu öğreneceğiz.
View sözcüğünü Türkçe'ye çevirdiğimizde "görüntü,görüntülemek,yansı" gibi anlamlara geliyor ve veritabanı yönünden ise SQL select sorgularında getirilen listelerin bir aynasıdır gibi ifade edebiliriz.
Kafa kurcalatmaktan öte şunu diyebiliriz; ister tek ister birden fazla tabloların join kuralları ile getirilen verilerin tam listesini sanki tek bir tablodan çekiyormuş gibi davranılmasına SQL View denir.
Örneğin; BakkalDB örneğindeki gibi dakika başı gelen siparişleri kontrol etmeniz gerekiyor ve sürekli join sorgusu kullanıyorsunuz, üstüne where koşulu ve order by deyimlerini kullanarak filtreleme ve sıralama işlemlerini yoğunlukla kullanıyorsanız view kullanmalısınız.
Çünkü; SQL view normal select sorgularına göre veritabanı motorunuzun sanki önbelleğine alınmış gibi davranarak daha hızlı sorgu sonucu getirmenize olanak sağlar.Ayrıca sürekli aynı select sorgusunu yazmak yerine tek bir tabloya select sorgusu çekmek gibi kullanımı ve hazırlanması basit bir yapıdır.
SQL View DDL sorgu olduğu için create alter ve drop sorgularıyla birlikte kullanılır.
SQL View oluşturmak için;
Create View as
SQL View'i değiştirmek için;
Alter View as
SQL View'i kaldırmak için;
Drop View
SQL View'i çalıştırmak için;
Select * from
sorguları kullanılır.
Gelin şimdi SQL Server Management Studio'yu açıp BakkalDB veritabanındaki siparişleri ve siparişlerin ait olduğu müşterileri listeleyelim:
Bu select sorgusunu SQL View haline getirelim:
Oluşturduğumuz View'i select sorgusunu kullanarak çalıştıralım:
Gördüğünüz gibi sanki uzun uzun select sorgusu yazmış gibi aynı sonucu getiriyor ancak normal select sorgusuna göre daha hızlı bir şekilde datalar önümüze seriliyor.Elbette örnek veritabanımız olan BakkalDB üzerinde performanstan fazla söz edemeyiz çünkü içerisinde 1 milyon satır ve üstünde veri barındırmıyor.
Şimdi ise view'i alter sorgusuyla değiştirelim ve top deyimi ile son 5 siparişi sadece "SERKAN" müşterisine göre listeleyip listeyi ters çevirelim ve bu sayede son verilen siparişi en üstte çıkaralım:
Dikkat etmemiz gereken bir nokta var; View içerisinde order by ya da order by desc sorgusu kullanmak istiyorsanız mutlaka ama mutlaka top deyimiyle birlikte kullanmak zorundasınız aksi halde:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
hatasıyla karşılaşırsınız.Şimdi aklınıza bir soru takılabilir:
Top deyimini kullanarak ilk x kaydı listeleyebiliyorsak tüm kayıtları nasıl listeleyebiliriz?
Biraz analitik düşünürsek top deyimi ile gelmesi gereken sorgu sayısının tamamını belirtirsek aradığımız cevabı bulmuş oluruz sanırım..Örneğin; veritabanımızda normalde gelen kayıt sayısı 2 milyon satır olsun ve en büyük Sipariş ID'si 2 milyon olur doğal olarak.O halde:
Select Top (select Max(SiparişID) from Tablo) Kolon1,Kolon2,..from Tablo
gibi bir kullanım ile bu sorunu kolaylıkla aşabiliriz.Hemen bu örneği BakkalDB'deki sorgumuza uyarlayalım:
Elbette bu kullanımın konusu iç içe SQL sorguları (subquery) konusuna dahil olduğu için ilerleyen günlerde daha detaylı inceleyeceğiz.Ancak bu sorgudan birşey anlamadıysanız hiç sorun değil çünkü iç içe sorguları bilmiyor olabilirsiniz ve boş yere canınız sıkılmasın :)
Bu kadar değişiklikten sonra bu view'i veritabanımızdan drop sorgusuyla kaldıralım:
SQL View ile ilgili dikkat etmemiz gereken kritik bir nokta daha var: bir view, yalnızca içerisine tanımlı olan select sorgusundaki tablolar varoldukça çalışır aksinde obje bulunamadı hatası verir.
Diğer bilmemiz gereken nokta ise; bir view içerisindeki select sorgusunun barındırdığı tablolardan birin değişiklik yapıldığında (örneğin kolon silindiğinde) view yine çalışmaya devam eder ancak sorgu bozulabileceği için hata verebilir.
Bu iki senaryoyla karşılaşmamanız için SQL View oluşturmadan önce ilgili veritabanı tasarımının değişmeyeceğinden en az %99 emin olmalısınız çünkü 100'lerce SQL View oluşturduktan sonra veritabanındaki tablo yapısında yapacağınız en küçük bir değişiklik bütün view'leri etkileyebilir.
DDL makalelerimizden biri olan View konusunun böylece sonuna gelmiş oluyoruz,bir sonraki makalemizden yep yeni SQL konusu öğrenmeye devam edeceğiz.
Şimdilik hoşçakalın esen kalın :)
Artık SQL DML (select,insert,update,delete) makalelerimizle öğrendiğimize göre veritabanı oluştururken öğrendiğimi DDL sorgularına yeniden geri dönüyoruz..
Bu makalemizde SQL View konusunu öğreneceğiz.
View sözcüğünü Türkçe'ye çevirdiğimizde "görüntü,görüntülemek,yansı" gibi anlamlara geliyor ve veritabanı yönünden ise SQL select sorgularında getirilen listelerin bir aynasıdır gibi ifade edebiliriz.
Kafa kurcalatmaktan öte şunu diyebiliriz; ister tek ister birden fazla tabloların join kuralları ile getirilen verilerin tam listesini sanki tek bir tablodan çekiyormuş gibi davranılmasına SQL View denir.
Örneğin; BakkalDB örneğindeki gibi dakika başı gelen siparişleri kontrol etmeniz gerekiyor ve sürekli join sorgusu kullanıyorsunuz, üstüne where koşulu ve order by deyimlerini kullanarak filtreleme ve sıralama işlemlerini yoğunlukla kullanıyorsanız view kullanmalısınız.
Çünkü; SQL view normal select sorgularına göre veritabanı motorunuzun sanki önbelleğine alınmış gibi davranarak daha hızlı sorgu sonucu getirmenize olanak sağlar.Ayrıca sürekli aynı select sorgusunu yazmak yerine tek bir tabloya select sorgusu çekmek gibi kullanımı ve hazırlanması basit bir yapıdır.
SQL View DDL sorgu olduğu için create alter ve drop sorgularıyla birlikte kullanılır.
SQL View oluşturmak için;
Create View
SQL View'i değiştirmek için;
Alter View
SQL View'i kaldırmak için;
Drop View
SQL View'i çalıştırmak için;
Select * from
sorguları kullanılır.
Gelin şimdi SQL Server Management Studio'yu açıp BakkalDB veritabanındaki siparişleri ve siparişlerin ait olduğu müşterileri listeleyelim:
Bu select sorgusunu SQL View haline getirelim:
Oluşturduğumuz View'i select sorgusunu kullanarak çalıştıralım:
Gördüğünüz gibi sanki uzun uzun select sorgusu yazmış gibi aynı sonucu getiriyor ancak normal select sorgusuna göre daha hızlı bir şekilde datalar önümüze seriliyor.Elbette örnek veritabanımız olan BakkalDB üzerinde performanstan fazla söz edemeyiz çünkü içerisinde 1 milyon satır ve üstünde veri barındırmıyor.
Şimdi ise view'i alter sorgusuyla değiştirelim ve top deyimi ile son 5 siparişi sadece "SERKAN" müşterisine göre listeleyip listeyi ters çevirelim ve bu sayede son verilen siparişi en üstte çıkaralım:
Dikkat etmemiz gereken bir nokta var; View içerisinde order by ya da order by desc sorgusu kullanmak istiyorsanız mutlaka ama mutlaka top deyimiyle birlikte kullanmak zorundasınız aksi halde:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
hatasıyla karşılaşırsınız.Şimdi aklınıza bir soru takılabilir:
Top deyimini kullanarak ilk x kaydı listeleyebiliyorsak tüm kayıtları nasıl listeleyebiliriz?
Biraz analitik düşünürsek top deyimi ile gelmesi gereken sorgu sayısının tamamını belirtirsek aradığımız cevabı bulmuş oluruz sanırım..Örneğin; veritabanımızda normalde gelen kayıt sayısı 2 milyon satır olsun ve en büyük Sipariş ID'si 2 milyon olur doğal olarak.O halde:
Select Top (select Max(SiparişID) from Tablo) Kolon1,Kolon2,..from Tablo
gibi bir kullanım ile bu sorunu kolaylıkla aşabiliriz.Hemen bu örneği BakkalDB'deki sorgumuza uyarlayalım:
Elbette bu kullanımın konusu iç içe SQL sorguları (subquery) konusuna dahil olduğu için ilerleyen günlerde daha detaylı inceleyeceğiz.Ancak bu sorgudan birşey anlamadıysanız hiç sorun değil çünkü iç içe sorguları bilmiyor olabilirsiniz ve boş yere canınız sıkılmasın :)
Bu kadar değişiklikten sonra bu view'i veritabanımızdan drop sorgusuyla kaldıralım:
SQL View ile ilgili dikkat etmemiz gereken kritik bir nokta daha var: bir view, yalnızca içerisine tanımlı olan select sorgusundaki tablolar varoldukça çalışır aksinde obje bulunamadı hatası verir.
Diğer bilmemiz gereken nokta ise; bir view içerisindeki select sorgusunun barındırdığı tablolardan birin değişiklik yapıldığında (örneğin kolon silindiğinde) view yine çalışmaya devam eder ancak sorgu bozulabileceği için hata verebilir.
Bu iki senaryoyla karşılaşmamanız için SQL View oluşturmadan önce ilgili veritabanı tasarımının değişmeyeceğinden en az %99 emin olmalısınız çünkü 100'lerce SQL View oluşturduktan sonra veritabanındaki tablo yapısında yapacağınız en küçük bir değişiklik bütün view'leri etkileyebilir.
DDL makalelerimizden biri olan View konusunun böylece sonuna gelmiş oluyoruz,bir sonraki makalemizden yep yeni SQL konusu öğrenmeye devam edeceğiz.
Şimdilik hoşçakalın esen kalın :)
Çok açıklayıcı bir anlatım olmuş teşekkür ederim
Siyah zemin üstüne beyaz neden? Kör olduk.
artışı ağır çekim zoomla göstermen çok kötü.