İleri Seviye SQL: CTE (Common Table Expressions)
# CTE (Common Table Expressions) Nedir ?
- CTE, tek bir DML ifadesi süresince var olan ve genelde yinelemeli(recursive) ve karışık sorgu ifadelerinde kullanılan bir sorgunun sonuç kümesi olarak düşünülebilir.
- Veritabanı görünümleri(view), geçici tablolara(temp table), değişken tipi tablolara(table-valued variable) ve tablo değer oluşturuculara (table-value constructor) benzetilebilir ancak hiçbir şekilde alanların(field) deklare edilmesi gerekmez.
- Bir sorgu ifadesinde birden fazla CTE kullanılabilir.
- SELECT, INSERT, UPDATE, DELETE ve MERGE durumlarından aynı anda bir tanesi ile kullanılabilir.
- CTE’yi birçok maddenin birleştirilerek kapsül hale getirilmesi ve kapsül halde tüketilmesine benzetiyorum. (birden fazla CTE kullanımı olan örneklerde demek istediğimi daha iyi anlayacaksınız) bkz: İleri Seviye SQL: CTE ile MERGE İfadesini Kullanmak
CTE ile birçok işlem gerçekleştirilebilir ancak bunlardan en önemlisi recursive özelliğidir. CTE yardımıyla SQL tarafında da recursive sorgular yazılabilir.
Dipnot: CTE ile recursive işlemler çerçevesinde yaptığımız her sorgu “başlama noktasındaki satır sayısı” + “100 biriktirme satırı” ile sınırlıdır. Bu limit aşıldığında SQL hata verecektir. Varsayılan limiti kaldırmak için, sorgunun en sonuna “OPTION (MAXRECURSION 0)” ifadesini eklemek gerekmektedir.
# CTE Genelde Hangi Amaçlar için Kullanılmaktadır ?
- Hiyerarşik/Ağaç yapılarında alt ve üst nodelara ulaşmak.
- Sayfalama işlemleri.
- Window Functionları Join ve Where ifadelerinde kullanmak.
- Belirli veya formüle bağlı bir aralıkta veri üretmek.
- Rastgele kayıt ile eşleşecek join yapıları oluşturmak (dummy data vb. durumlar için kullanışlıdır.)
- DML ifadelerini zenginleştirmek. (SELECT, UPDATE, DELETE, INSERT ve MERGE)
# CTE için örnek Syntax
# CTE ile Uygulamalı Örnekler
Bu konuda gerçek hayat senaryoları ile örnekler vereceğim. Ancak anlamayı kolaylaştırmak için ilgili başlıklar altında ayrı makaleler üzerinden devam etmenin daha doğru olacağını düşündüm.
Bu sebeple hem daha kolay ulaşmak hem de spesifik olarak öğrenmek istediğiniz başlığa kolayca erişebilmeniz için ilgili linkleri hemen aşağıya ekledim.
- İleri Seviye SQL: CTE ile Hiyerarşik/Ağaç Yapılarda Çalışmak
- İleri Seviye SQL: CTE ile Sayfalama İşlemleri
- İleri Seviye SQL: CTE ve ROW_NUMBER ile Sayfalama İşlemleri
- İleri Seviye SQL: CTE ile Tarih Satırları Oluşturmak
- İleri Seviye SQL: CTE ile Düzenli Satır Oluşturmak
- İleri Seviye SQL: CTE ile IP Adresi Aralığı Oluşturmak
- İleri Seviye SQL: CTE ile MERGE İfadesini Kullanmak
- İleri Seviye SQL: CTE ile Sahte Veri Üretmek
Dipnot: Yeni örnekler zaman içerisinde isteklere göre eklenecektir.
# CTE ile İlgili Hazırladığım Cheatsheetler
# Kazanımlar
- CTE’nin tek bir DML ifadesi süresince var olduğunu ve genellikle recursive işlemlerde kullanıldığını,
- View, temp table ve table-value constructora benzediğini ve alanların deklare edilmemesi gerektiğini,
- Birden fazla CTE ifadesi kullanılabildiğini,
- Recursive işlemlerde satır limitinin olduğunu,
- CTE’nin Hiyerarşik/Ağaç yapılarında, sayfalama işlemlerinde, Window Functionlar ile birlikte, veri üretmek ve DML ifadelerini zenginleştirmek için kullanıldığını öğrenmiş olduk.
# Sosyal Medya Hesaplarım
- LinkedIn: Karcan Ozbal | LinkedIn
- Github: karcan (Karcan Ozbal) (github.com)
- Patreon: Karcan is creating little extensions for make your life funny :)
Konu istekleri ve makale ile ilgili tartışmak için yoruma bekliyorum.