İleri Seviye SQL Server Sql Server

SQL Server’da Common Table Expression (CTE) Kullanımı

SQL Server Eğitimleri Kanalına Abone Olun

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.

SQL Server'da Common Table Expression (CTE) Kullanımı

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.

SQL Server'da Common Table Expression (CTE) Kullanımı

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.

SQL Server'da Common Table Expression (CTE) Kullanımı

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.

SQL Server'da Common Table Expression (CTE) Kullanımı

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.

140 Kez Okundu
SQL Server Eğitimleri Kanalına Abone Olun

Yazar hakkında

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli birisiyim.

Kopyalamak Yasaktır!