TableExpressions.sql

SQL Server veritabanında farklı tablolarda bulunan bir çok bilgiye sıklıkla ihtiyaç duyarız ve çoğu zaman bu işlem sadece birkaç tablodan veri alınarak çözümlenemeyebilir. Farklı tablolarda bulunan bilgi topluluklarının birbiriyle karşılaştırılması gibi karmaşık işler yapmak durumunda kalabiliriz.

Bu nedenle SQL Server tablolar ile çalışmamız yanında bize görüntüler(view),geçici (temp) tablolar gibi çözümler sunmuştur. (Tablolar ile çalışmamız aslen doğru da değildir. Çünkü burda yapılacak bir yanlışlık uygulama veya raporlama gibi işlemlerimizi sekteye uğratabilir.)
Ancak bu çözümlerin yanında SQL Server bize Ortak Tablo İfadeleri (Common Table Expression) dediğimiz bir çözümde sunar ki oldukça pratiktir.

Şimdi bunu Örneklerle pekiştirelim:

Select *,

(Select count(productid) from Production.Products P
 where P.categoryid =C.categoryid) as ProductCount
 from Production.Categories C
 
Yukarıdaki sorgu bize iki ayrı tablodan çekilmiş ve üzerinde  bir adet işlem(count) yapılmış bir tablo getirecektir. Eğer hazırladığımız yeni tablo, kullanıcı yani hazırladığımız veri tabanının arayüzünü hazırlayan kişi tarafından sık kullanılan bir tablo ise her seferinde bu sorguyu yazmak zorunda kalacaktır. Bunun önüne geçebilmemiz için SQL server bize view(görüntü,yansıma) yaratma şansı vermiştir.Örnek üzerinde daha iyi anlayabiliriz.
-- How to create views?
GO
Create View Production.SRGProductCounts
as
Select *,
(Select count(productid) from Production.Products P
 where P.categoryid =C.categoryid) as ProductCount
 from Production.Categories C

Burada yukarıda sql servar’a yaptırdığımız  tablonun aynısını yaptırdık ancak bu defa  tabloyu SRGProductsCounts ismiyle datalarımıza kaydettik.Object Explorer kısmımı inceleyecek olursak Views bölümünün altına Verdiğimiz isimde bir tablo eklendiğini göreceksiniz.

Artık;
Select * from SRGProductCounts yazmamız yukarıda yaptığımız tüm sorgunun görevini yerine getirecektir.
Tabloyu silmek için;
Drop view Production.SRGProductCounts yazmanız ve çalıştırmanız yeterli.
--How to create Table Valued Functions?
View oluşturma işlemini fonksiyon yaratma için de kullanabiliriz.
Örnek;
CREATE FUNCTION [Sales].[FnOrderTolalValue] -- Bu satırda fonksiyonumuzu isimlendirdik
(
    @orid int                                                         —  @orid int ile fonksiyonu çağırabilmek için kullanılacak  bir değişken tanımladık.
)
RETURNS TABLE AS RETURN                        -- sonraki bölümlerde ise fonksiyonumuz içeriğini yazıyoruz.
(
    Select @orid as OrderId, SUM(OD.qty * OD.unitprice) as OrderTotal
    from Sales.OrderDetails OD where orderid = @orid
)
 
--How to use created TVF?
Bu bölümde yukarıda yazdığımız fonksiyonu ihtiyaç duyduğumuz başka bir fonksiyonun içinde  kullanmamıza olanak sağlayacak select sorgusu örneği yazacağız.
seçenek 1-
bu select fonksiyonu, önceden hazırladığımız fonksiyonun 10248 İd li elemanının özelliklerini Sales.orders tablosunda eşleştiği satışın özelliklerini getiriyor.
Select * from Sales.[FnOrderTolalValue](10248) OT 
inner join Sales.Orders O                         
on O.orderid = OT.orderId                        
                                                  
                                                 
seçenek2- 
Bu fonksiyon ise parantez içine O.Orderid yazdığımız için  Sales.Orders tablosunda ve fonkisiyonla oluşturduğumuz tabloda bulunan id leri eşleştirerek görüntülememize olanak sağlayacak.
Select *,
(Select OrderTotal from Sales.fnOrderTolalValue(O.orderid))
as OrderTotal
 from Sales.Orders O
 references:
Boğaziçi Üniversitesi Cet482 ders notları.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s