SQL Server’da Common Table Expression (CTE) Kullanımı
Herkese merhaba,
Bu yazıda sizlere temel anlamda Common Table Expression yani CTE kullanımından bahsedeceğim.
Common Table Expression Nedir?
Bir sorgunun yürütülmesi anında elde edilmiş geçici sonuçları bir veya daha fazla kere kullanmaya olanak sağlayan ifadelerdir.
- Common Table Expression SQL Server’ 2005 sürümü ile birlikte gelmiştir.
- Common Table Expression bir Tablo veya View değildir.
- Common Table Expression’lar geçici ve kalıcı tablolar gibi herhangi bir veri içermezler.
- Common Table Expression’lar WITH sözcüğüyle tanımlanır.
- Common Table Expression’ların çalışması dış sorguya bağlıdır. Dış sorgu sona erdiğinde Common Table Expression’ın ömrü de sona erer.
- Common Table Expression’ın SELECT ifadesindeki sütunların her biri için ve ayrıca tablo ifadesi için de isim gerektirir.
- Common Table Expression’larda sütunlara satır içi veya harici yolla takma adlar tanımlanabilir.
- Common Table Expression’lar aynı sorguda bir tanımla birçok kez kullanılabilir.
- Aynı WITH deyiminde birden çok Common Table Expression tanımlanabilir.
- Common Table Expression’lar, ifadenin kendi içerisinde tanımlandığı tekrarlı işlemi destekler.
- Common Table Expression’ların en önemli özelliği kendi kendini çağırabiliyor olması ve aynı sorgu içerisinden birden fazla çalıştırılabiliyor olmasıdır. Bu yüzden Recursive yani (Öz-yinelemeli) işlemlerde kullanılır.
- Common Table Expression’lar TABLO ve VIEW yapılarından farklı olarak PRIMARY KEY, UNIQUE, NOT NULL, DEFAULT. gibi constraint’ler desteklenmez.
- Common Table Expression’lar yalnızca SELECT değil INSERT, UPDATE ve DELETE yapılarında da kullanılabilir.
- Common Table Expression’ların okunurluğu yüksektir.
- Common Table Expression’ların kendi index’leri yoktur. İçeriğindeki tabloların index’lerini kullanırlar.
- Common Table Expression’ların sonuçları depolanmaz.
- Common Table Expression’ları VIEW, TEMP TABLO ve TABLE-VALUED VARIABLES’a benzetebiliriz, fakat hiç bir şekilde alanların deklare edilmesi gerekmez.
Common Table Expression Nerelerde Kullanılır?
- Common Table Expression’lar farklı tablolarda bulunan bilgi içeriklerinin birbiriyle karşılaştırılması gibi karmaşık işlerde kullanılabilir.
- Common Table Expression’lar üretimde kullanılan ürün ağacında miktarların kümülatif hesaplanmasında kullanılabilir.
- Karmaşık raporlama işlemlerinde kullanılabilirler.
Common Table Expression Örneği
Burada basit bir Common Table Expression örneği yaparak sizlere anlatmaya çalışacağım. İşlemlerimi Northwind veri tabanı üzerinde yaptım. Siz de bu veri tabanı üzerinden deneyebilirsiniz.
WITH CTEAdimizBuraya AS (
SELECT * FROM dbo.Categories
)
SELECT * FROM CTEAdimizBuraya
Sorguyu çalıştırınca aşağıdaki sonucu göreceksiniz.
Yukarıda örnekte herhangi bir kolon ifadesi yazmadan en temel ve ham haliyle Common Table Expression ifadesini yazmak istedim.
Burada WITH ifadesinden sonra Common Table Expression’a bir ad veriyoruz ben burada CTEAdimizBuraya adında bir isim verdim sonra AS koyup parantezimi açtım, sorgumu yazdım.
En altta ise SELECT * FROM CTEAdimizBuraya kısmında da oluşturduğumuz Common Table Expression’ımızı çağırdık. İşlem bu kadar.
Peki, tablo’da kolon seçerek Common Table Expression’ı kullanmak isteseydik nasıl kullanacaktık? Aşağıdaki şekilde kullanacaktık.
WITH CTEAdimizBuraya AS (
SELECT CategoryName FROM dbo.Categories
)
SELECT * FROM CTEAdimizBuraya
Sorguyu çalıştırınca aşağıdaki sonucu göreceksiniz.
Görüldüğü üzere tek bir kolon getirmiş olduk.
Aşağıdaki Common Table Expression örneğinde olduğu gibi kolon adı belirterek de kullanabilirsiniz ya da başkalarının yazdığı kodları incelerken de bu şekilde ifadeler görebilirsiniz.
WITH CTEAdimizBuraya(KategoriAdi,Aciklama)
AS (SELECT CategoryName,Description
FROM dbo.Categories)
SELECT *
FROM CTEAdimizBuraya;
Sorguyu çalıştırınca aşağıdaki sonucu göreceksiniz.
Yukarıda kodu çalıştırınca Türkçe kolon adlarının çıktığını görmüş olmalısınız.
Common Table Expression’a isim verip tanımladıktan sonra parantez açıp görünmesini istediğimiz kolonlara istediğimiz isimleri verip CTEAdimizBuraya(KategoriAdi,Aciklama) sonrasında bu kolonları sorgu içinde de belirtmelisiniz. Aksi durumda aşağıdaki hatayı verecektir.
WITH CTEAdimizBuraya(KategoriAdi,Aciklama) --Hatalı Kullanım Örneği
AS (SELECT *
FROM dbo.Categories)
SELECT *
FROM CTEAdimizBuraya;
Sorguyu çalıştırınca aşağıdaki sonucu göreceksiniz.
Hatayı SELECT * FROM dbo.Categories yazdığımız için aldık. SELECT CategoryName,Description FROM dbo.Categories şeklinde yazsaydık hata almayacaktık.
Common Table Expression ile ilgili en temel bilinmesi gereken şeylerin bunlar olduğunu düşünüyorum. İlerleyen zamanlarda daha detaylı örnekler yapacağım.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.