SQL View Yapısı

Berkay Ergun
7 min readJan 21, 2023

--

Merhabalar, bu yazıda SQL üzerinde View yapısının ne olduğu ve neden kullanıldığı hakkında bilgi vereceğim.

Nedir?

View, SQL içinde bir sanal tablo olarak tanımlanır. JOIN komutunu bilirsiniz, bu komut farklı tablolardaki verileri birleştirir. Ancak, sıklıkla kullandığınız bir sorgu var ve bu sorgu farklı tablolardan verileri çektiğiniz bir sorgu var. Bu sorguyu view yapısı ise sanal tablo oluşturarak her seferinde uğraşmadan görebilmenize olanak sağlıyor.

View yapısı, SQL veritabanları için önemli bir özelliktir. Çünkü, veritabanındaki verileri daha düzenli ve anlaşılır bir şekilde organize etmenize olanak tanır. Örneğin, veritabanınızda çok sayıda tablo ve veri var ve bunları kullanmak için sürekli olarak uzun ve karmaşık sorgular yazmak zorunda kalıyorsunuz. Bu durumda, View yapısını kullanarak bu verileri daha kolay erişebilir hale getirebilirsiniz.

Ayrıca, View yapısı, veritabanınızdaki verileri güvenli bir şekilde korumanıza da olanak tanır. Örneğin, bazı verileri sadece belirli kullanıcıların görüntüleyebilmesi için gizleyebilirsiniz. Bu sayede, veritabanınızdaki verileri daha güvenli hale getirebilirsiniz.

Son olarak, View yapısı, veritabanınızdaki verileri performans açısından optimize etmenize de olanak tanır. Örneğin, sürekli olarak aynı sorguları kullanıyorsanız, View yapısını kullanarak bu sorguları optimize edebilirsiniz. Böylece, veritabanınızdaki verileri daha hızlı bir şekilde görüntüleyebilirsiniz.

View yapısının diğer bir avantajı, veritabanınızdaki verileri değiştirirken daha esnek olmanızı sağlar. Örneğin, veritabanınızda bir tablonun yapısını değiştirmek istiyorsunuz ve bu değişiklik tüm sorguları etkileyecek. View yapısını kullanarak, sadece sanal tablonun yapısını değiştirerek veritabanınızdaki gerçek tablolara dokunmadan sorgularınızı etkilememiş olursunuz.

View yapısını kullanarak, veritabanınızdaki verileri daha iyi organize etmeniz, güvenli hale getirmeniz ve performansı optimize etmeniz mümkündür. Ayrıca, veritabanınızdaki verileri değiştirirken daha esnek olmanızı sağlar.

Ancak, unutulmaması gereken bir diğer nokta, View yapısı sadece okunabilir olduğu için, veritabanınızdaki gerçek tablolara doğrudan yapılan değişiklikleri yansıtmaz, değişiklikleri gerçek tablolara uygulamak için gerçek tablolara doğrudan erişmeniz gerekir.

Bu yüzden, veritabanınızdaki verileri daha iyi organize etmek, güvenli hale getirmek ve performansı optimize etmek istiyorsanız, View yapısını kullanmayı düşünebilirsiniz.

Kısaca Özetlersek

  • View oluşturulduğunda, sorgu ilk defa derlenir ve sonrasında sadece çağrılır.
  • Oluşturulan View’lar veriyi içinde tutmaz, her çağrıldığında sorguyu yeniden çalıştırır. Tablolar gibi davranmazlar.
  • View’lar normal SQL tabloları gibi çağrılır.
  • View oluşturulduğunda Order By kullanmak istenirse, SELECT ifadesi ile birlikte TOP ifadesi de kullanılması gerekir.

MsSql’ de View Yapısı Oluşturmak

Örneğimizi Northwind veritabanından oluşturacağım. İlk olarak Product tablosuna basit bir sorgu atacağım.

Ürün adı, ürün fiyatı ve son tabloya da “Inner Join” ile ürünün bağlı olduğu kategoriyi çeken sorgu atalım.

SELECT ProductName, UnitPrice, CategoryName
From Products Inner Join Categories
On Products.CategoryId = Categories.CategoryId

Sorguyu çalıştırdığımız zaman, bize aşağıdaki verileri çekiyor.

Şimdi bu sorgu, çok sık kullandığımız bir sorgu olabilir. Her seferinde uzun uzun yazmak yerine View haline getireceğiz ve View, tablo gibi davranacak.

CREATE View GetProductsWithCategoryName
As
SELECT ProductName, UnitPrice, CategoryName
From Products Inner Join Categories
On Products.CategoryId = Categories.CategoryId

Çalıştırdıktan sonra, View klasörü içerisinde kaydedilecektir. Daha sonra Tabloya atar gibi sorgu atabilmekteyiz.

SELECT * From GetProductsWithCategoryName

Dönen data aşağıdaki şekildedir.

Artık bir tabloya hangi işlemleri yapıp veri çekebiliyorsak, oluşturduğumuz View tablosuna da aynı şekilde yapabiliyoruz.

Kod Örneği 1;

SELECT * From GetProductsWithCategoryName Order By ProductName
SELECT * From GetProductsWithCategoryName 
Where UnitPrice > 20
Order By ProductName

Outer ile Kullanım Örneği

Önce Outer nedir onu öğrenelim Kısaca;

OUTER JOIN, LEFT JOIN ve RIGHT JOIN ile yapılan sorgularda, eşleşmeyen satırlar dahil edilir ve eşleşmeyen alanlar NULL olarak görüntülenir. Bu, veritabanındaki eksik verileri veya boş alanları içeren satırların dahil edilmesini sağlar. Ayrıca, OUTER JOIN ile yapılan sorgularda, eşleşmeyen satırların varlığını veya yokluğunu kontrol etmek mümkündür.

OUTER JOIN, SQL sorgularının çeşitliliğini arttırır ve veritabanındaki verileri daha etkili bir şekilde analiz etmeye olanak tanır. Örneğin, bir satış veritabanında müşterilerin siparişleri ile eşleştirilirken, müşterilerin sipariş vermemiş olabileceği dikkate alınabilir ve müşterilerin sipariş vermemiş olduğu tarihler arasındaki zaman dilimleri analiz edilebilir.

Ayrıca, OUTER JOIN, kullanımı ile sorgular arasında birleştirme işlemleri yapılabilir. Örneğin, bir müşteri veritabanındaki müşterilerin adres bilgileri ile bir ülke veritabanındaki ülkelerin ad bilgileri eşleştirilerek müşterilerin hangi ülkelerden geldiği analiz edilebilir.

Ancak, unutulmaması gereken şey, OUTER JOIN, sorgularının daha yavaş çalışabileceğidir ve veritabanı performansını etkileyebilir. Bu nedenle, sorguların performansını arttırmak için ihtiyaç duyulan yerlere kullanılması önerilir.

Left, Right, Full Outer Join Farkları

LEFT JOIN, RIGHT JOIN ve FULL OUTER JOIN arasındaki fark, eşleşmeyen satırların dahil edilme şeklidir.

  • LEFT JOIN: Sol tablonun tüm satırları dahil edilir ve sağ tablonun eşleşmeyen satırları NULL olarak görüntülenir.
  • RIGHT JOIN: Sağ tablonun tüm satırları dahil edilir ve sol tablonun eşleşmeyen satırları NULL olarak görüntülenir.
  • FULL OUTER JOIN: Her iki tablonun da eşleşmeyen satırları dahil edilir.

Bu nedenle, LEFT JOIN sadece sol tablonun eşleşmeyen satırlarını dahil ederken, RIGHT JOIN sadece sağ tablonun eşleşmeyen satırlarını dahil eder. FULL OUTER JOIN ise her iki tablonun da eşleşmeyen satırlarını dahil eder.

Ayrıca, FULL OUTER JOIN veritabanındaki eksik verileri veya boş alanları içeren satırların dahil edilmesini sağlar. Ancak, FULL OUTER JOIN sorguları daha yavaş çalışabilir ve veritabanı performansını etkileyebilir, bu nedenle ihtiyaç duyulan yerlere kullanılması önerilir.

Örnek 1:

Bu sorgu, müşterilerin şirket adlarını ve sipariş numaralarını (eğer mevcutsa) birleştirerek vw_OuterJoin adında bir View oluşturur. Bu View, müşterilerin sipariş vermemiş olabileceği dikkate alınarak tüm müşterilerin bilgilerini içerecektir ve eşleşmeyen sipariş bilgileri NULL olarak görüntülenecektir.

CREATE VIEW vw_LeftJoin AS
SELECT Customers.CompanyName, Orders.OrderID
FROM Customers
LEFT OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID

Bu kodun Çıktısı ise:

CompanyName                OrderID
Alfreds 10643
Ana Trujillo Emparedados 10692
Antonio's 10702
Around the Horn 10835
...

Örnek 2:

Bu sorgu, ürünlerin isimlerini ve tedarikçilerin şirket adlarını (eğer mevcutsa) birleştirerek vw_RightJoin adında bir View oluşturur. Bu View, ürünlerin tedarikçisi olmayabileceği dikkate alınarak tüm tedarikçilerin bilgilerini içerecektir ve eşleşmeyen ürün bilgileri NULL olarak görüntülenecektir.

CREATE VIEW vw_RightJoin AS
SELECT Products.ProductName, Suppliers.CompanyName
FROM Products
RIGHT OUTER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID

Kodun Çıktısı:

ProductName                CompanyName
Chai Exotic Liquids
Chang Exotic Liquids
Aniseed Syrup Exotic Liquids
Chef Anton's Cajun Seasoning New Orleans Cajun Delights

Örnek 3:

Bu sorgu, müşterilerin şirket adlarını ve sipariş numaralarını (eğer mevcutsa) birleştirerek vw_FullOuterJoin adında bir View oluşturur. Bu View, müşterilerin sipariş vermemiş olabileceği veya siparişlerin müşterisi olmamış olabileceği dikkate alınarak tüm müşterilerin ve siparişlerin bilgilerini içerecektir ve eşleşmeyen bilgiler NULL olarak görüntülenecektir.

FULL OUTER JOIN, LEFT OUTER JOIN ve RIGHT OUTER JOIN arasındaki fark, FULL OUTER JOIN her iki tablonun da eşleşmeyen satırlarını dahil etmesidir. Bu nedenle, FULL OUTER JOIN daha geniş bir veri kapsamına sahiptir ve veritabanındaki eksik verileri veya boş alanları içeren satırların dahil edilmesini sağlar.

CREATE VIEW vw_FullOuterJoin AS
SELECT Customers.CompanyName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID

Kodun Çıktısı:

CompanyName                OrderID
Alfreds 10643
Ana Trujillo Emparedados 10692
Antonio's 10702
Around the Horn 10835
NULL 10865
NULL 10877

Bu örnekte görüldüğü gibi, FULL OUTER JOIN her iki tablonun da eşleşmeyen satırlarını dahil etmektedir. Bu nedenle, veritabanındaki eksik verileri veya boş alanları içeren satırların dahil edilmesini sağlar.

FULL OUTER JOIN sorguları, veritabanındaki verilerin tamamının analiz edilmesini sağlar ve tüm verilerin dahil edilmesi nedeniyle daha geniş bir veri kapsamına sahiptir. Ancak, FULL OUTER JOIN sorguları daha yavaş çalışabilir ve veritabanı performansını etkileyebilir, bu nedenle ihtiyaç duyulan yerlere kullanılması önerilir.

Exclusive OUTER JOIN

OUTER JOIN, LEFT JOIN, RIGHT JOIN ve FULL OUTER JOIN gibi sorgular, veritabanındaki verileri eşleştirerek bir tablo gibi çıktı verir. Ancak, OUTER JOIN sorgularının bir de “exclusive” (özel) sürümleri vardır. Exclusive OUTER JOIN, sadece eşleşmeyen satırları dahil etmek için kullanılır.

Exclusive LEFT JOIN: Sol tablonun eşleşmeyen satırlarını dahil eder ve sağ tablonun eşleşen satırlarını dahil etmez. Exclusive RIGHT JOIN: Sağ tablonun eşleşmeyen satırlarını dahil eder ve sol tablonun eşleşen satırlarını dahil etmez. Exclusive FULL OUTER JOIN: Her iki tablonun da eşleşmeyen satırlarını dahil eder, eşleşen satırları dahil etmez.

Exclusive OUTER JOIN sorguları, veritabanındaki verilerin daha spesifik bir kısmını analiz etmek için kullanılabilir. Ancak, exclusive OUTER JOIN sorgularının kullanımı daha az yaygındır ve veritabanı sistemlerinde desteklenmeyebilir.

Exclusive LEFT JOIN Örnek:

Bu sorgu, müşterilerin şirket adlarını ve sipariş numaralarını (eğer mevcutsa) birleştirerek vw_ExclusiveLeftJoin adında bir View oluşturur. Bu View, sadece müşterilerin sipariş vermemiş olduğu tarihler arasındaki zaman dilimleri analiz edilebilir.

CREATE VIEW vw_ExclusiveLeftJoin AS
SELECT Customers.CompanyName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Orders.OrderID IS NULL

Çıktısı:

CompanyName                OrderID
Alfreds NULL
Around the Horn NULL
Berglunds NULL
Blondel père et fils NULL

Bu örnekte, sadece müşterilerin sipariş vermemiş olduğu tarihler arasındaki zaman dilimleri görüntülenmiştir.

Exclusive RIGHT JOIN Örnek:

Bu sorgu, ürünlerin isimlerini ve tedarikçilerin şirket adlarını (eğer mevcutsa) birleştirerek vw_ExclusiveRightJoin adında bir View oluşturur. Bu View, sadece tedarikçilerin sağlamadığı ürünleri analiz edilebilir.

CREATE VIEW vw_ExclusiveRightJoin AS
SELECT Products.ProductName, Suppliers.CompanyName
FROM Products
RIGHT JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID
WHERE Products.ProductName IS NULL

Çıktısı:

ProductName                CompanyName
NULL Exotic Liquids
NULL New Orleans Cajun Delights
NULL Grandma Kelly's Homestead
NULL Tokyo Traders

Bu örnekte, sadece tedarikçilerin sağlamadığı ürünler görüntülenmiştir.

Exclusive FULL OUTER JOIN Örnek:

Bu sorgu, müşterilerin şirket adlarını ve sipariş numaralarını (eğer mevcutsa) birleştirerek vw_ExclusiveFullOuterJoin adında bir View oluşturur. Bu View, sadece müşterilerin sipariş vermemiş olabileceği veya siparişlerin müşterisi olmamış olabileceği dikkate alınarak tüm eşleşmeyen bilgileri içerecektir.

CREATE VIEW vw_ExclusiveFullOuterJoin AS
SELECT Customers.CompanyName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Customers.CompanyName IS NULL OR Orders.OrderID IS NULL
CompanyName                OrderID
NULL 10643
NULL 10692
NULL 10702
NULL 10835
Alfreds NULL

Bu örnekte, sadece müşterilerin sipariş vermemiş olabileceği veya siparişlerin müşterisi olmamış olabileceği dikkate alınarak tüm eşleşmeyen bilgiler görüntülenmiştir.

Exclusive OUTER JOIN sorguları, veritabanındaki verilerin daha spesifik bir kısmını analiz etmek için kullanılabilir. Ancak, exclusive OUTER JOIN sorgularının kullanımı daha az yaygındır ve veritabanı sistemlerinde desteklenmeyebilir.

Okuduğunuz için teşekkür ederim.

--

--