SQL Server View Kullanımı

SQL üzerinde temel komutları kullanarak yapmak istediğimiz işlemi daha kısa sürede ve performanslı olarak gerçekleştirmek SQL’de yoğun mesai harcayan herkesin ortak paydada buluştuğu noktadır. Bu performans kayıpları küçük ölçekli veritabanlarında çok fazla hissedilmese de, milyon satırlık veriler üzerinde işlemler yaparken etkisi oldukça fazla olmaktadır. Bugün sizlere performans ve hız anlamında bize pozitif anlamda etki sağlayan yapılardan VIEW yapısını anlatacağım.

VIEW Nedir ?

View, kısaca sorgumuzu kayıt altına almaktır. SQL ilişkisel bir veritabanı olduğundan , mimari kurulurken birçok tablo birbiriyle ilişkilendirilir. Bu ilişkilendirme sonucunda istediğimiz veriler farklı tablolar üzerinde olduğunda JOIN kullanmak durumunda kalıyoruz. Bu join yapısı ile iki ya da daha fazla tabloyu birbiriyle bağlayarak tüm sonuçları getirmesini isteyebiliriz. İşte VIEW bu durumda bize fayda sağlamaktadır. Her seferinde birden çok tabloyu birbirine bağlayıp sorgu yazmaktansa bunu bir kez yazıp, bu sorguyla VIEW oluşturursak işimiz büyük oranda rahatlayacaktır. Daha sonrasında yapmamız gereken tek şey, bir tablo listelerken yaptığımız gibi SELECT sorgusu ile o view yapısını çağırmak olacaktır.

Örneklere geçmeden önce değinmek istediğim birkaç nokta var.

VIEW yapısında neler yapamayız ?

  1. Bu yapıyı kullanmamızdaki amaç, SELECT sorgusu ile elde edilen verileri sanal tabloya yazdırmaktır. Dolayısıyla görevi veri listelemek olan bu nesnede,
    • UPDATE,DELETE,INSERT kullanılamaz.

2. Dışarıdan parametre alamaz.

3. Group By kullanabiliyor olsak da Aggregate fonksiyonları(Sum,Count,Max,Min) isimsiz kalamaz.Bu fonksiyonları kullandığımızda kolonlara AS ile isim vermeliyiz. İsimsiz kolon adları ile view kullanılamaz.

Kullanım Avantajları

  1. Birden çok tablo üzerinde JOIN kullanarak yazılan sorgular, her seferinde yapılmak yerine bir kere yazılır ve istenildiği zaman kullanılır.
  2. Güvenlik amacıyla kullanılabilir. Veritabanı üzerinde her yetkiye sahip olmayan kişiler olabileceği gibi her bilgiyi görmesini istemediğimiz kişiler de olabilir. Bu amaçla view oluşturulurken sadece istenilen kolonların görüntülenmesini sağlayabiliriz.
  3.  ENCRYPTION edilerek hangi tablodan hangi kolonların kullanıldığı görülemeden istenilen verilere ulaşım sağlanmış olur.

 

Şimdi, örnekler üzerinde VIEW kullanımı görelim. Ben bu yazımda ‘AdventureWorks’ veritabanı üzerinde çalışacağım.

CREATE VIEW

VIEW oluşturmak için kullanılır.With Encryption ,With Schemabinding ile kullanılabilir.

Örnek : Product tablosunda SafetyStockLevel sayısı 50’den az olan ürünlerin isimlerini ve renk bilgilerini view yardımıyla görüntüleyelim.

[php] CREATE VIEW vw_LowStock AS SELECT [Name],Color,SafetyStockLevel FROM Production.Product WHERE SafetyStockLevel ‹ 50 [/php]

Mail trafiğinin çok sık olduğu bir E-ticaret firmasında çalıştığınızı ve sürekli olarak farklı kişilerin mailine ihtiyaç duyduğunuzu düşünürsek , tüm maillerin listesine bir hayli ihtiyacınız olacaktır. Ve bu bilgilerin ayrı ayrı tablolarda tutulduğunu göz önüne aldığımızda sürekli olarak aynı sorguyu yazmak zahmetli olacaktır.

Bunun yerine aşağıdaki sorgumuz ile daha pratik şekilde çözüm üretebiliriz.

Örnek : Personellerin adı, soyadı ve email adreslerinin getirileceği bir view yazalım.

[php] CREATE VIEW vw_PersonEmail AS SELECT P.BusinessEntityID,p.FirstName,p.LastName,EA.EmailAddress FROM Person.Person AS P JOIN Person.EmailAddress AS EA ON P.BusinessEntityID=EA.BusinessEntityID [/php]

 

ile oluşturduktan sonra view ile istediğimiz bilgileri getirelim.

Görüldüğü üzere ne zaman bu kayıtlı sanal tabloları görmek istersek, ihtiyacımız olan view objesini çağırmamız yeterli olacaktır.

ALTER VIEW

Diyelim ki , yöneticimiz artık bu mail listesinin yeterli gelmediğini ve bu bilgilerin yanında bir de telefon numarasına ihtiyacımız olduğunu söyledi. Bu durumda ihtiyacımızı sürekli olarak gören vw_PersonEmail ‘ in artık güncellenme vakti gelmiştir 😊

Kişilerin telefon bilgileri ayrı bir tabloda tutulduğundan view için bir tablo daha gereklidir.

[php] ALTER VIEW vw_PersonEmail AS SELECT P.BusinessEntityID,p.FirstName,p.LastName,EA.EmailAddress,PP.PhoneNumber FROM Person.Person AS P JOIN Person.EmailAddress AS EA ON P.BusinessEntityID=EA.BusinessEntityID JOIN Person.PersonPhone AS PP ON p.BusinessEntityID=pp.BusinessEntityID [/php]

WITH ENCRYPTION

Bazı durumlarda kullandığımız yapıları güvenlik amacıyla encryption etme ihtiyacı duyabiliyoruz. Biz burada daha önceden oluşturmuş olduğumuz vw_LowStock üzerinden ilerleyeceğiz.

[php]ALTER VIEW vw_LowStock WITH ENCRYPTION AS SELECT [Name],Color,SafetyStockLevel FROM Production.Product WHERE SafetyStockLevel ‹ 50[/php]

Daha öncesinde oluşturduğumuz viewları şifreleyebileceğimiz gibi create ederken de şifreleyebiliriz. Bu durumda ise ALTER komutu yerine CREATE komutunu kullanmamız yeterlidir.

DROP VIEW

Daha önceden oluşturulmuş olan viewları silmek için kullanılır.

Kullanımı ;

[php] DROP VIEW vw_LowStock [/php]

şeklindedir.

Bu yazımızda view nedir, nerelerde kullanılır, kullanım şekilleri gibi detaylarla ilgilendik. Aslında olmayan ama ihtiyacımız doğrultusunda oluşturduğumuz bir sanal tablo olduğunu görmüş olduk. CREATE VIEW,ALTER VIEW,WITH ENCRYPTION,DROP VIEW kullanımlarını örnekler üzerinden inceledik.

Umarım faydalı olmuştur. Bir sonraki yazımızda Stored Procedure kullanımını örnekler üzerinden anlatmaya çalışacağım. Hoşça kalın 😊

 

Leave a Reply

Your email address will not be published. Required fields are marked *