Ana içeriğe geç
Modül 14 · Ders 1 ders 3Kurstaki 53/57~12 min
Modül dersleri (1/3)

CTE'lere Giriş (ILE)

CTE'lere Giriş (ILE)

Er ya da geç bu herkesin başına gelir: Verileri bir toplamanın sonucuna göre filtrelemeniz, ardından bu filtreyi alıp onu başka bir toplu sorguyla BİRLEŞTİRMENİZ gerekir. SELECT içine SELECT yazmaya başlarsınız, bu da başka bir SELECT'nin FROM'sinde son bulur.

Sonuç? Spagetti SQL, hiçbir insan tarafından okunamayan bir sorgu.

CTE'ler (Ortak Tablo İfadeleri) bu karışıklığı çözmenize olanak tanır. Bunları, geçici adlandırılmış sorguları tanımlamanıza ve ardından bunları son sorguda "sanal tablolar" olarak yeniden kullanmanıza olanak tanıyan WITH anahtar sözcüğüyle etkinleştirirsiniz.

Temel Söz Dizimi

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
  HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;

Gördüğünüz gibi, alttaki ana sorgu sanki gerçek bir tabloymuş gibi premium_customers değerini okuyor! Ve iç içe geçmiş alt sorgulara sahip mega iç birleştirmeden çok daha okunabilir.

Egzersiz#sql.m14.l1.e1
Denemeler: 0Yükleniyor…

Çok pahalı ürünleri istiyoruz. 'Fiyat > 500' olan 'ürünler'den 'kimlik' ve 'fiyat'ı seçmek için 'lüks_ürünler' adlı bir CTE kullanın. Daha sonra bu CTE'de bir ana sorgu çalıştırın ve her şeyi gösterin (*).

Düzenleyici yükleniyor…
İpucu göster

İLE lüks_ürünler AS (...) ile başlayın ve ardından lüks_ürünlerden SELECT * FROM'u seçin.

3 denemeden sonra çözüm mevcut

Egzersiz#sql.m14.l1.e2
Denemeler: 0Yükleniyor…

Yorum yazan kullanıcıları bulmak istiyoruz. 'İncelemelerden' benzersiz (DISTINCT) 'customer_id' değerlerini çıkaran bir CTE 'inceleyenler' oluşturun. Daha sonra 'müşteriler' tablosundan 'id', 'first_name', 'last_name' bilgilerini çıkarın ve kimlikteki 'inceleyenlerin' CTE'si ile \`JOIN\` yapın.

Düzenleyici yükleniyor…
İpucu göster

İnceleyenler İLE (incelemelerden DISTINCT customer_id SEÇİN) Müşterilerden kimliği, adı, soyadını SEÇİN incelemecilere ONDAN KATILIN customer.id = reviewers.customer_id;

3 denemeden sonra çözüm mevcut