Son Haberler
Anasayfa / Yazılım / SQL / CTE – Common Table Expressions – Ortak Tablo İfadeleri

CTE – Common Table Expressions – Ortak Tablo İfadeleri

CTE yani common table expressions Türkçe olarak ise ortak tablo ifadeleri ilk defa Microsoft SQL 2005 versiyonu ile karşımıza çıktı. CTE ile aslında sorgularımıza bir ön sorgu katabiliyoruz. Genelde çok ileri teknk sorgulamalarda kullanılan bir yapıdır. Basit sorgular için bir avantajı yoktur. Dolayısı ile ben çok fazla derinlemesine girmeden şimdilik yüzeysel olarak bu konudan bahsetmek istiyorum. Söz dizimi yani syntax olarak aşağıdaki gibi kullanımı mevcuttur :

WITH vermiş olduğumuz CTE adı AS (SELECT listelenecek kolonlar FROM tablo1) SELECT listelenecek kolonlar FROM tablo2 INNER JOIN vermiş olduğumuz CTE adı ON tablo2.kolon1 = vermiş olduğumuz CTE adı.kolon2

Şimdi bir örnek sorgu yapıp, sonucunu görelim : (AdventureWorks2012 veri tabanı üzerinde çalışıyorum)

WITH Siparisler AS (SELECT SalesOrderID, CustomerID FROM Sales.SalesOrderHeader)
SELECT Musteri.CustomerID, Siparisler.SalesOrderID FROM Sales.Customer AS Musteri
INNER JOIN Siparisler ON Musteri.CustomerID = Siparisler.CustomerID

Görüldüğü üzere sorgum WITH ile başlamaktadır. Daha sonra bir ifade ismi CTE tanımlıyoruz ve sonra sorgumuzun ilk kısmına geçiyoruz.

Sonuç :

2013030301

Şimdi karmaşık bir sorgu ile başka bir örneğe devam edelim. Yapmış oldukları siparişleri ile birlikte yani siparişlerinin ID bilgileri ile birlikte bu siparişin hangi tarihte yapıldığını ve bu siparişi yapam müşterileri listelemeye çalışalım. Bunu diyagram olarak gösterirsek :

2013030302

Sol taraftaki daire veritabanımızdaki Customer tablosu, sağ taraftaki daire ise CTE’miz.

Şimdi aşağıdaki sorguları ve sonuçlarını görelim.

SELECT Musteri.CustomerID, Satis.SalesOrderID, Satis.OrderDate 
FROM Sales.Customer AS Musteri LEFT OUTER JOIN Sales.SalesOrderHeader 
AS Satis ON Musteri.CustomerID = Satis.CustomerID WHERE Satis.OrderDate = '2007/04/01';

2013030303

Bu sorgum sonucunda 85 satır bilgi dönüyor. Bu sorgum sonucunda NULL değerler listelenmiyor. NULL verileri de listelemek için CTE kullanıyoruz ve sorgumuz aşağıdaki gibi :

WITH Siparisler AS (SELECT SalesOrderID, CustomerID, OrderDate 
FROM Sales.SalesOrderHeader WHERE OrderDate = '2007/04/01') 
SELECT Musteri.CustomerID, Siparisler.SalesOrderID, Siparisler.OrderDate 
FROM Sales.Customer AS Musteri LEFT OUTER JOIN Siparisler
ON Musteri.CustomerID = Siparisler.CustomerID ORDER BY Siparisler.OrderDate DESC;

2013030304

Bir yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir