WITH (Common Table Expression / CTE)
Oracle
WITH bolge AS (
SELECT il, COUNT(*) AS n
FROM musteri
GROUP BY il
)
SELECT il, n FROM bolge WHERE n > 10;WITH bir sorgunun içinde adlandırılmış geçici sonuç kümesi (CTE) tanımlar; alt sorguyu tekrar tekrar yazmak yerine bir kez tanımlayıp isimle kullanmanızı sağlar. Karmaşık sorguları okunur parçalara böler. Oracle 9i'den beri desteklenir.
PostgreSQL
WITH bolge AS (
SELECT il, COUNT(*) AS n
FROM musteri
GROUP BY il
)
SELECT il, n FROM bolge WHERE n > 10;CTE karmaşık sorguları adlandırılmış bloklara ayırır. PostgreSQL 12 öncesinde CTE bir optimizasyon sınırıydı (materyalize edilirdi); 12+ sürümde satır içine alınabilir, istenirse WITH ... AS MATERIALIZED ile eski davranış zorlanabilir.
MySQL
WITH bolge AS (
SELECT il, COUNT(*) AS n
FROM musteri
GROUP BY il
)
SELECT il, n FROM bolge WHERE n > 10;CTE sorgu içinde geçici adlandırılmış sonuç kümesi tanımlar ve okunabilirliği artırır. MySQL 8.0 (ve MariaDB 10.2) ile desteklenir; daha eski sürümlerde türetilmiş tablo (FROM içinde alt sorgu) kullanmak gerekir.
SQL Server
WITH bolge AS (
SELECT il, COUNT(*) AS n
FROM musteri
GROUP BY il
)
SELECT il, n FROM bolge WHERE n > 10;CTE adlandırılmış geçici sonuç kümesidir. SQL Server'da CTE'den hemen önceki ifade noktalı virgülle bitmelidir; bu yüzden WITH çoğu zaman ';WITH' biçiminde yazılır. Tek bir deyim (SELECT/INSERT/UPDATE/DELETE) süresince geçerlidir.
MongoDB
// En yakın karşılık: aggregation pipeline aşamaları
db.musteri.aggregate([
{ $group: { _id: "$il", n: { $sum: 1 } } },
{ $match: { n: { $gt: 10 } } }
])MongoDB'de SQL/CTE yoktur; aynı işi aggregation pipeline aşamaları yapar. Her aşama bir önceki aşamanın çıktısını girdi alır, böylece CTE zincirlerine benzer adım adım işleme sağlanır. Ara sonuçlar için $facet veya $lookup da kullanılabilir.
Redis
# Uygulanamaz: Redis'te SQL ve CTE kavramı yoktur.Redis bir anahtar-değer veri deposudur, sorgu dili yoktur. Geçici hesaplama sonuçlarını istemci tarafında birleştirir veya sunucu tarafı mantık için Lua script (EVAL) kullanırsınız.
Elasticsearch
# Elasticsearch SQL kullanımında CTE desteklenmez.
POST _sql
{ "query": "SELECT il, COUNT(*) n FROM musteri GROUP BY il HAVING COUNT(*) > 10" }Elasticsearch SQL (_sql API) WITH/CTE söz dizimini desteklemez; gruplama ve süzme tek SELECT ile yazılır. Yerel yaklaşımda ise aynı iş 'terms' agregasyonu ve 'bucket_selector' pipeline agregasyonu ile yapılır.