Birleştirme kavramlarını ve söz dizimlerini anlama

Tamamlandı

Birden çok tablodaki verileri birleştirmenin en temel ve yaygın yöntemi, JOIN işlemi kullanmaktır. Bazı kişiler JOIN'i SELECT deyiminde ayrı bir yan tümce olarak düşünürken, bazıları bunu FROM yan tümcesinin bir parçası olarak düşünür. Bu modül esas olarak FROM yan tümcesinin bir parçası olarak kabul edecektir. Bu modülde, T-SQL SELECT deyimindeki FROM yan tümcesinin sorgunun sonraki aşamaları tarafından kullanılacak ara sanal tabloları nasıl oluşturduğunu keşfedeceğiz.

FROM Yan Tümcesi ve Sanal Tablolar

SQL Server bir sorguyu işlerken gerçekleştirilen işlemlerin mantıksal sırası hakkında bilgi edindiyseniz, SELECT deyiminin FROM yan tümcesinin işlenecek ilk yan tümce olduğunu gördünüz. Bu yan tümce, sorgunun satır kaynağının hangi tablo veya tabloların olacağını belirler. FROM tek bir tabloya başvurabilir veya sorgunuzun veri kaynağı olarak birden çok tabloyu bir araya getirebilir. FROM yan tümcesini sanal tablo oluşturma ve doldurma olarak düşünebilirsiniz. Bu sanal tablo FROM yan tümcesinin çıkışını tutar ve WHERE yan tümcesi gibi daha sonra uygulanan SELECT deyimi yan tümceleri tarafından kullanılır. FROM yan tümcesine birleştirme işleçleri gibi ek işlevler eklediğinizde, FROM yan tümcesi öğelerinin amacını sanal tabloya satır eklemek veya bu tablodan satır kaldırmak olarak düşünmek yararlı olacaktır.

FROM yan tümcesi tarafından oluşturulan sanal tablo yalnızca mantıksal bir varlıktır. SQL Server'da, WHERE yan tümcesine veya sorgunun diğer bölümlerine geçirildiği için FROM yan tümcesinin sonuçlarını tutmak için kalıcı veya geçici bir fiziksel tablo oluşturulmaz.

FROM yan tümcesi tarafından oluşturulan sanal tablo, birleştirilen tüm tablolardaki verileri içerir. Sonuçları küme olarak düşünmek ve birleştirme sonuçlarını bir Venn diyagramı olarak kavramsallaştırmak yararlı olabilir.

A Venn diagram showing the set of an Employee table joined to a SalesOrder table

T-SQL dili, geçmişi boyunca SQL dili için Amerikan Ulusal Standartlar Enstitüsü (ANSI) standartlarına yapılan değişiklikleri yansıtacak şekilde genişletilmiştir. Bu değişikliklerin görünür olduğu en önemli yerlerden biri FROM yan tümcesindeki birleştirmelerin söz dizimindedir. ANSI SQL-89 standardında birleşimler, FROM yan tümcesine virgülle ayrılmış bir listeye birden çok tablo eklenerek belirtildi. WHERE yan tümcesine hangi satırların ekleneceğini belirlemek için herhangi bir filtreleme, örneğin:

SELECT p.ProductID, m.Name AS Model, p.Name AS Product
FROM SalesLT.Product AS p, SalesLT.ProductModel AS m
WHERE p.ProductModelID = m.ProductModelID;

Bu söz dizimi SQL Server tarafından hala desteklenmektedir, ancak karmaşık birleşimler için filtreleri temsil etme karmaşıklığı nedeniyle önerilmez. Ayrıca, WHERE yan tümcesi yanlışlıkla atlanırsa ANSI SQL-89 stili birleşimler kolayca Kartezyen ürünleri haline gelebilir ve aşırı sayıda sonuç satırı döndürerek performans sorunlarına ve muhtemelen yanlış sonuçlara neden olabilir.

T-SQL'de çok tablolu sorgular yazmayı öğrenirken Kartezyen ürünleri kavramını anlamak önemlidir. Matematikte Kartezyen ürünü iki setin ürünüdür. İki öğeden oluşan bir kümenin ve altı öğeden oluşan bir kümenin ürünü, 12 veya 6 x 2 öğeden oluşan bir kümedir. Bir kümedeki her öğe, diğer kümedeki her öğeyle birleştirilir. Aşağıdaki örnekte, iki öğeli bir dizi ad ve üç öğeli bir ürün kümesi vardır. Kartezyen ürünü, altı öğeden oluşan her ürünle her adı birleştirir.

Cartesian product

Veritabanlarında Kartezyen ürünü, bir tablodaki her satırı başka bir tablonun her satırıyla birleştirmenin sonucudur. 10 satırlı ve 100 satırlı bir tablonun ürünü, 1.000 satır içeren bir sonuç kümesidir. JOIN işleminin temel sonucu bir Kartezyen ürünüdür, ancak çoğu T-SQL sorgusunda Kartezyen ürünü istenen sonuç değildir. T-SQL'de kartezyen ürünü, iki giriş tablosu aralarında hiçbir ilişki dikkate alınmadan birleştirildiğinde gerçekleşir. İlişkiler hakkında hiçbir bilgi olmadan, SQL Server sorgu işlemcisi tüm olası satır bileşimlerini döndürür. Bu sonuç, test verileri oluşturma gibi bazı pratik uygulamalara sahip olsa da, genellikle kullanışlı değildir ve ciddi performans etkileri olabilir.

ANSI SQL-92 standardının ortaya çıkmasıyla birlikte JOIN ve ON yan tümceleri anahtar sözcükleri için destek eklendi. T-SQL bu söz dizimlerini de destekler. Birleşimler, uygun JOIN işleci kullanılarak FROM yan tümcesinde temsil edilir. Bir filtre koşuluna dönüşen tablolar arasındaki mantıksal ilişki ON yan tümcesinde belirtilir.

Aşağıdaki örnek, önceki sorguyu daha yeni söz dizimiyle yeniden ifade eder:

SELECT p.ProductID, m.Name AS Model, p.Name AS Product
FROM SalesLT.Product AS p
JOIN SalesLT.ProductModel AS m
    ON p.ProductModelID = m.ProductModelID;

Dekont

ANSI SQL-92 söz dizimi, yanlışlıkla Kartezyen ürünleri oluşturmayı daha zor hale getirir. JOIN anahtar sözcüğü eklendikten sonra, JOIN CROSS JOIN olarak belirtilmediği sürece ON yan tümcesi eksikse söz dizimi hatası oluşur.