SQL Cümle İLE

Sql Cumle Ile



SQL ve veritabanı sorgularının derinliklerine indiğinizde karşılaşacağınız en güçlü ve inanılmaz özelliklerden biri, genellikle CTE'ler olarak bilinen Ortak Tablo İfadeleri'dir.

SQL'de, With cümleciği CTE olarak da bilinir. Bir sorgu içerisinde geçici sonuç kümeleri oluşturmamızı sağlayan güçlü bir özelliktir. CTE'lerin önemli bir rolü, karmaşık sorguları daha küçük ve yeniden kullanılabilir alt sorgulara basitleştirmektir. Bu, kodun uzun vadede daha okunabilir ve bakımı kolay olmasına yardımcı olur.

With yan tümcesini ve desteklenen işlevleri kullanarak Ortak Tablo İfadelerinin işleyişini keşfedeceğimiz bu eğitimde bize katılın.







Gereksinimler:

Gösterim amacıyla aşağıdakileri kullanacağız:



  1. MySQL sürüm 8.0 ve üzeri
  2. Sakila örnek veritabanı

Verilen gereksinimler karşılandığında CTE'ler ve With cümleciği hakkında daha fazla bilgi edinmeye devam edebiliriz.



SQL Cümle İLE

With cümlesi, Ortak Tablo İfadeleri olarak bilinen bir veya daha fazla geçici sonuç kümesi tanımlamamıza olanak tanır.





Ortaya çıkan CTE'lere ana sorguda diğer tablo veya sonuç kümeleri gibi referans verebiliriz. Bu, modüler SQL sorguları oluşturmada çok önemli bir rol oynar.

CTE'nin sözdizimi gereksinimlerinize bağlı olarak biraz farklılık gösterse de, aşağıda SQL'de CTE'nin temel sözdizimi gösterilmektedir:



Cte_name İLE (sütun1, sütun2, ...) AS (
-- CTE Sorgusu
SEÇME ...
İTİBAREN ...
NEREDE ...
)
-- Ana sorgu
SEÇME ...
İTİBAREN ...
Cte_name AÇIK'A KATILIN ...
NEREDE ...

SQL veritabanına CTE oluşturmak ve kullanmak istediğimizi söyleyen With anahtar sözcüğüyle başlıyoruz.

Daha sonra, diğer sorgularda ona referans vermemize olanak tanıyan CTE adını belirliyoruz.

Ayrıca CTE'nin sütun takma adlarını içermesi durumunda isteğe bağlı bir sütun adları listesi de belirtiriz.

Daha sonra CTE sorgusunu tanımlamaya devam ediyoruz. Bu, CTE'nin gerçekleştirdiği tüm görevleri veya verileri bir çift parantez içinde içerir.

Son olarak CTE’ye referans veren ana sorguyu belirliyoruz.

Örnek Kullanım:

CTE'lerin nasıl kullanılacağını ve onlarla nasıl çalışılacağını anlamanın en iyi yollarından biri pratik bir örneğe bakmaktır.

Örneğin Sakila örnek veritabanını ele alalım. En fazla kiralama sayısına sahip ilk 10 müşteriyi bulmak istediğimizi varsayalım.

Aşağıda gösterilen CTE'ye bir göz atın.

En yüksek kiralama sayısına sahip ilk 10 müşteriyi bulmak için SQL YOUR Cümlesini kullanma:

CustomerRentals AS İLE (
C.customer_id, c.first_name, c.last_name, COUNT(r.rental_id) AS Rental_count'u SEÇİN
müşteriden c
KATILIN kiralama r AÇIK c.customer_id = r.customer_id
GRUPLAMAYA GÖRE c.müşteri_kimliği, c.ilk_adı, c.soyadı
)
SEÇME *
Müşteri Kiralamalarından
ORDER BY rent_count DESC
SINIR 10;

Verilen örnekte, With anahtar sözcüğünü ve ardından CTE'ye atamak istediğimiz adı kullanarak yeni bir CTE tanımlayarak başlıyoruz. Bu durumda buna “MüşteriKiralamaları” diyoruz.

CTE gövdesi içerisinde müşteri ve kiralama tablosunu birleştirerek her müşteri için kira sayısını hesaplıyoruz.

Son olarak, ana sorguda CTE'deki tüm sütunları seçiyoruz, sonuçları kiralama sayısına göre (azalan düzende) sıralıyoruz ve çıktıyı yalnızca ilk 10 satırla sınırlandırıyoruz.

Bu, aşağıdaki çıktıda gösterildiği gibi en yüksek sayıda kiralamaya sahip müşterileri çekmemizi sağlar:

  Ad tablosu Açıklama otomatik olarak oluşturuldu

Özyinelemeli CTE'ler

Diğer bazı durumlarda hiyerarşik veri yapılarıyla uğraşıyor olabilirsiniz. Özyinelemeli CTE'lerin devreye girdiği yer burasıdır.

Örneğin hiyerarşik organizasyonda gezinmek istediğimiz veya ağaç benzeri bir yapıyı temsil etmek istediğimiz bir durumu ele alalım. Özyinelemeli bir CTE oluşturmak için YOUR RECURSIVE anahtar sözcüğünü kullanabiliriz.

Sakila veritabanında özyinelemeli bir CTE'yi göstermek için kullanabileceğimiz hiyerarşik bir veri olmadığından, temel bir örnek oluşturalım.

TABLO OLUŞTUR departmanı (
departman_id INT PRIMARY KEY AUTO_INCREMENT,
departman_adı VARCHAR(255) NULL DEĞİL,
parent_department_id INT,
YABANCI ANAHTAR (parent_department_id) REFERANSLAR departmanı(department_id)
);
INSERT INTO departmanı (departman_adı, parent_department_id)
DEĞERLER
('Kurumsal', BOŞ),
('Finans', 1),
('İK', 1),
('Muhasebe', 2),
'İşe alma', 3),
('Bordro', 4);

Bu durumda, bazı rastgele veriler içeren örnek bir 'departman' tablomuz var. Bölümlerin hiyerarşik yapısını bulmak için özyinelemeli bir CTE'yi aşağıdaki gibi kullanabiliriz:

ÖZYİNELENMİŞ Bölüm Hiyerarşisi AS (
departman_kimliği, departman_adı, ebeveyn_departman_kimliği'ni SEÇİN
Departmandan
Ebeveyn_department_id NULL NEREDE
BİRLİK TÜMÜ
SEÇ d.departman_kimliği, d.departman_adı, d.ebeveyn_departman_kimliği
d departmanından
KATILIN Departman Hiyerarşisi dh ON d.parent_department_id = dh.department_id
)
SEÇME *
Departman Hiyerarşisinden;

Bu durumda, özyinelemeli CTE, NULL 'parent_department_id' (kök bölümler) değerine sahip bölümlerle başlar ve alt bölümleri yinelemeli olarak alır.

Çözüm

Bu eğitimde, With anahtar sözcüğüyle nasıl çalışılacağını anlayarak SQL veritabanlarındaki Ortak Tablo İfadeleri gibi en temel ve kullanışlı özellikleri öğrendik.