İç birleşimleri kullanma

Tamamlandı

T-SQL sorgularında en sık kullanılan JOIN türü INNER JOIN'tir. İç birleşimler, özellikle yüksek oranda normalleştirilmiş veritabanı ortamlarında birçok yaygın iş sorununu çözmek için kullanılır. Birden çok tabloda depolanan verileri almak için genellikle INNER JOIN sorguları aracılığıyla birleştirmeniz gerekir. INNER JOIN mantıksal işleme aşamasına Kartezyen ürün olarak başlar ve koşulla eşleşmeyen satırları kaldırmak için filtrelenir.

INNER JOIN'i işleme

ŞIMDI SQL Server'ın bir JOIN sorgusunu mantıksal olarak işleme adımlarını inceleyelim. Aşağıdaki varsayımsal örnekteki satır numaraları netlik için eklenmiştir:

1) SELECT emp.FirstName, ord.Amount
2) FROM HR.Employee AS emp 
3) JOIN Sales.SalesOrder AS ord
4)      ON emp.EmployeeID = ord.EmployeeID;

Bilmeniz gereken gibi FROM yan tümcesi SELECT yan tümcesinden önce işlenir. 2. satırdan başlayarak işlemeyi takip edelim:

  • FROM yan tümcesi İk'yi belirtir. Giriş tablolarından biri olarak çalışan tablosuna diğer adı emp verir.
  • 3. satırdaki JOIN işleci, INNER JOIN (T-SQL'de varsayılan tür) kullanımını yansıtır ve ord diğer adı olan diğer giriş tablosu olarak Sales.SalesOrder öğesini belirtir.
  • SQL Server bu tablolarda mantıksal bir Kartezyen birleşimi gerçekleştirir ve sonuçları bir sonraki adıma sanal tablo olarak geçirir. (Sorgunun fiziksel işlemesi, iyileştiricinin kararlarına bağlı olarak Kartezyen ürün işlemini gerçekleştirmeyebilir. Ancak Kartezyen ürününün oluşturulduğunu hayal etmek yararlı olabilir.)
  • ON yan tümcesini kullanarak SQL Server sanal tabloyu filtreleyerek yalnızca emp tablosundaki EmployeeID değerinin ord tablosundaki EmployeeID değeriyle eşleştiği satırları tutar.
  • Kalan satırlar sanal tabloda bırakılır ve SELECT deyimindeki bir sonraki adıma devredilir. Bu örnekte, sanal tablo bir sonraki select yan tümcesi tarafından işlenir ve belirtilen iki sütun istemci uygulamasına döndürülür.

Tamamlanan sorgunun sonucu, çalışanların ve sipariş tutarlarının listesidir. İlişkili siparişi olmayan çalışanlar, İk'daki bir girişe karşılık gelen EmployeeID'sine sahip olan siparişler gibi ON yan tümcesine göre filtrelenmiştir. Çalışan tablosu.

A Venn diagram showing the matching members of the Employee and SalesOrder sets

INNER JOIN söz dizimi

INNER JOIN varsayılan JOIN türüdür ve isteğe bağlı INNER anahtar sözcüğü JOIN yan tümcesinde örtüktür. Birleştirme türlerini karıştırırken ve eşleştirirken, bu varsayımsal örnekte gösterildiği gibi birleştirme türünü açıkça belirtmek yararlı olabilir:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp 
INNER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

İç birleşimleri kullanarak sorgu yazarken aşağıdaki yönergeleri göz önünde bulundurun:

  • Tablo diğer adları yalnızca SELECT listesi için değil, ON yan tümcesi yazmak için de tercih edilir.
  • İç birleşimler, OrderID gibi tek bir eşleşen sütunda veya OrderID ile ProductID birleşimi gibi birden çok eşleşen öznitelikte gerçekleştirilebilir. Birden çok eşleşen sütun belirten birleşimler bileşik birleşimler olarak adlandırılır.
  • TABLOLARın INNER JOIN için FROM yan tümcesinde listelenme sırası SQL Server iyileştiricisi için önemli değildir. Kavramsal olarak birleşimler soldan sağa doğru değerlendirilir.
  • FROM listesindeki her birleştirilmiş tablo çifti için JOIN anahtar sözcüğünü bir kez kullanın. İki tablolu sorgu için bir birleşim belirtin. Üç tablolu bir sorgu için JOIN'i iki kez kullanacaksınız; bir kez ilk iki tablo arasında ve bir kez daha ilk iki tablo ile üçüncü tablo arasındaki JOIN çıkışı arasında.

INNER JOIN örnekleri

Aşağıdaki varsayımsal örnek, Production.Product tablosundaki ProductModelID değerini Production.ProductModel tablosundaki ProductModelID ile ilişkili olarak tek bir eşleşen sütunda birleştirme gerçekleştirir:

SELECT p.ProductID, m.Name AS Model, p.Name AS Product
FROM Production.Product AS p
INNER JOIN Production.ProductModel AS m
    ON p.ProductModelID = m.ProductModelID
ORDER BY p.ProductID;

Bu sonraki örnekte, iç birleştirmenin ikiden fazla tablo içerecek şekilde nasıl genişletilebileceği gösterilmektedir. Sales.SalesOrderDetail tablosu, Production.Product ile Production.ProductModel arasındaki JOIN çıkışına katılır. JOIN/ON'un her örneği kendi popülasyonunu ve sanal çıkış tablosunun filtresini yapar. SQL Server sorgu iyileştiricisi birleştirmelerin ve filtrelemenin hangi sırada gerçekleştirileceğini belirler.

SELECT od.SalesOrderID, m.Name AS Model, p.Name AS ProductName, od.OrderQty
FROM Production.Product AS p
INNER JOIN Production.ProductModel AS m
    ON p.ProductModelID = m.ProductModelID
INNER JOIN Sales.SalesOrderDetail AS od
    ON p.ProductID = od.ProductID
ORDER BY od.SalesOrderID;