Fundamentals katılın
Birleşimler kullanarak tablolar arasındaki mantıksal ilişkileri temel alan iki veya daha fazla tablodan veri alabilir.Joins indicate how Microsoft SQL Server should use data from one table to select the rows in another table.
A birleşim koşulu bir sorgu ile ilgili iki tablo biçimini tanımlar:
Her sütun belirtme tablo birleştirmek için kullanılacak.Yabancı anahtar, bir normal birleştirmek koşulu belirtir tablo ve diğer ilişkili anahtarı tablo.
Bir mantıksal işleç belirterek (örneğin, = ya da <>,) değerleri sütun. karşılaştırma içinde kullanılmak üzere
İç birleşimler ya da başlangıç belirtilebilir veya where yan tümceleri.Dış birleşimler yalnızca from yan tümce tümce tümcesinde belirtilmelidir.Birleştirme koşulu where ile birleştirmek ve HAVING arama koşulları from yan tümce tümce tümcesinde başvurulan temel tablodan seçili satırları denetlemek.
birleştirmek belirterek bunları where yan tümce tümce tümcesinde belirtilen herhangi bir arama koşulu gelen koşulları from yan tümce tümce tümce ayırmanıza yardımcı olur ve birleşimler belirtmek için önerilen yöntem.Bir Basitleştirilmiş ISO dan yan tümce tümce birleştirmek sözdizimi aşağıdaki gibidir:
FROM first_table join_type second_table [ON (join_condition)]
join_typene tür bir birleştirmek gerçekleştirileceğini belirtir: an inner, outer, or cross join.join_condition defines the predicate to be evaluated for each pair of joined rows.Bir from yan tümce tümce tümce birleştirmek belirtiminin bir örnek verilmektedir:
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
ON (ProductVendor.BusinessEntityID = Vendor.BusinessEntityID)
Bu birleştirmek kullanarak basit bir deyim aşağıdadır:
SELECT ProductID, Purchasing.Vendor.BusinessEntityID, Name
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
ON (Purchasing.ProductVendor.BusinessEntityID = Purchasing.Vendor.BusinessEntityID)
WHERE StandardPrice > $10
AND Name LIKE N'F%'
GO
Seçim bölümleri şirket adı f harfi ile başladığı bir şirket tarafından sağlanan herhangi bir birleşimi için ürün ve tedarikçi bilgileri verir ve ürünün fiyatını 10 $'dan fazla olur.
Tek bir sorguda birden fazla tablo başvurulduğunda, tüm sütun başvuruları belirli olmalıdır.Önceki örnekte, hem ProductVendor ve Vendor adlı bir sütun tablo sahip BusinessEntityID.Sorguda başvurulan iki veya daha fazla tablo arasında çoğaltılır herhangi bir sütun adı tablo adı ile uygun olmalıdır.Tüm başvurular Vendor örnek sütunlarda tam.
Bir sütun adı sorguda kullanılan iki veya daha fazla tablodaki yinelenen zaman başvuruları nitelenmiş tablo adı ile olmak zorunda değil.Bu, önceki örnekte gösterilir.Bu tür bir deyim bazen olduğundan her sütun sağlanan tablo göstermek için hiçbir şey anlamak zordur.Tüm sütunları tablo adları ile nitelenir, sorgu okunabilirliğini artırıldı.Özellikle tablo adları veritabanı ve sahibi adları uygun olmalı, tablo diğer adları, kullanılıyorsa, okunabilirliği daha fazla artırıldı.Aşağıda aynı örnek, atanan tablo diğer adları ve sütun okunabilirliğini geliştirmek üzere tablo diğer adları ile tam olmasıdır:
SELECT pv.ProductID, v.BusinessEntityID, v.Name
FROM Purchasing.ProductVendor AS pv
JOIN Purchasing.Vendor AS v
ON (pv.BusinessEntityID = v.BusinessEntityID)
WHERE StandardPrice > $10
AND Name LIKE N'F%';
Önceki örneklerde birleştirmek koşulu için tercih edilen yöntem from yan tümce tümce tümcesinde belirtilen.Aşağıdaki sorgu aynı içeren birleşim koşulu where yan tümce tümce tümcesinde belirtilen:
SELECT pv.ProductID, v.BusinessEntityID, v.Name
FROM Purchasing.ProductVendor AS pv, Purchasing.Vendor AS v
WHERE pv.VendorID = v.VendorID
AND StandardPrice > $10
AND Name LIKE N'F%';
birleştirmek için seçim listesi birleştirilmiş tablodan tüm sütunları veya bunların alt küme küme küme kümesini sütunları başvuruda bulunabilir.Seçim listesi içeren sütunlar için gereken her tablo birleştirmek.Örneğin, üç tablo birleştirmek, üçüncü bir tablo için diğer tablolardan birinden köprüye yalnızca bir tablo kullanılabilir ve orta Tablo sütunlarından hiçbiri seçme listesinde başvurulması gerekir.
Genellikle birleştirmek koşulu olmasına rağmen diğer yüklemler gibi eşitlik karşılaştırmaları (=), diğer karşılaştırma veya ilişkisel işleçler, belirtilebilir.Daha fazla bilgi için bkz: İfadelerde İşleçleri Kullanma ve Burada (Transact-sql).
Zaman SQL Server katılma, işler birleştirmek işleme en etkili yöntem (dışında birçok olasılık) sorgu motoru seçerÇeşitli birleşimler fiziksel yürütülmesi ve bu nedenle güvenilir bir şekilde bilinemez birçok farklı iyileştirmeleri kullanabilirsiniz.
Kullanılan sütunları bir birleşim koşulu aynı ada sahip veya aynı veri türünde olması gerekli değildir.Bununla birlikte, veri türleri aynı değilse, bunlar gerekir uyumlu veya türleri olmalıdır, SQL Server için örtük dönüştürme.Veri türü örtülü olarak dönüştürülemiyorsa, birleşim koşulu cast işlevini kullanarak veri türünü açıkça dönüştürmelisiniz.Açık ve örtük dönüştürme hakkında daha fazla bilgi için bkz: Veri Türü Dönüştürme (Veritabanı Altyapısı).
Bir birleştirmek kullanan sorguların çoğu yayımlanması bir alt sorgu (sorgu başka bir sorgu içinde iç içe) ve birçok alt sorgular birleşimler yeniden yazan.Alt sorgular hakkında daha fazla bilgi için bkz: Alt sorgusuyla temelleri.
Not
Tablolar edemiyor katılan doğrudan ntext, text, veya image sütunlar.Ancak, tablolar üzerinde dolaylı olarak kümesine eklenebilir ntext, text, veya image sütunları kullanarak alt DİZE.Örneğin, * t1 birleştirmek t2 on SUBSTRING(t1.dentextcolumn, 1, 20) = SUBSTRING(t2.textcolumn, 1, 20) her metin ilk 20 karakterinin üzerinde iki tablo iç birleştirmek gerçekleştirir sütun tablo t1 ve t2.Buna ek olarak, karşılaştırma için başka bir olasılık ntext veya text iki tablodan sütun ise örneğin bir where yan tümce tümce tümce ile sütun uzunlukları karşılaştırmak için: WHERE DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)
Ayrıca bkz.