FROM (Transact-sql)

Tablolar, görünümler, türetilen tablolar ve birleştirilmiş tablo delete, select ve update deyimleri kullanılan belirtir SQL Server 2012. Seçim listesi yalnızca sabitler, değişkenler ve aritmetik ifadeler (sütun adları) içeren select deyiminde dışında from yan tümcesi gereklidir.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

[ FROM { <table_source> } [ ,...n ] ] 
<table_source> ::= 
{
    table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ] 
        [ WITH ( < table_hint > [ [ , ]...n ] ) ] 
    | rowset_function [ [ AS ] table_alias ] 
        [ ( bulk_column_alias [ ,...n ] ) ] 
    | user_defined_function [ [ AS ] table_alias ] ]
    | OPENXML <openxml_clause> 
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ] 
    | <joined_table> 
    | <pivoted_table> 
    | <unpivoted_table>
      | @variable [ [ AS ] table_alias ]
        | @variable.function_call ( expression [ ,...n ] ) [ [ AS ] table_alias ] [ (column_alias [ ,...n ] ) ]
}
<tablesample_clause> ::=
    TABLESAMPLE [SYSTEM] ( sample_number [ PERCENT | ROWS ] ) 
        [ REPEATABLE ( repeat_seed ) ] 

<joined_table> ::= 
{
    <table_source> <join_type> <table_source> ON <search_condition> 
    | <table_source> CROSS JOIN <table_source> 
    | left_table_source { CROSS | OUTER } APPLY right_table_source 
    | [ ( ] <joined_table> [ ) ] 
}
<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

<pivoted_table> ::=
    table_source PIVOT <pivot_clause> [ AS ] table_alias

<pivot_clause> ::=
        ( aggregate_function ( value_column [ [ , ]...n ]) 
        FOR pivot_column 
        IN ( <column_list> ) 
    ) 

<unpivoted_table> ::=
    table_source UNPIVOT <unpivot_clause> [ AS ] table_alias

<unpivot_clause> ::=
        ( value_column FOR pivot_column IN ( <column_list> ) ) 

<column_list> ::=
          column_name [ ,...n ]

Bağımsız değişkenler

  • <table_source>
    Bir tablo, görünüm, tablo değişkeni veya türetilmiş bir tablo kaynak, ile veya olmadan kullanmak için bir diğer ad belirtir Transact-SQLdeyimi. Sınır kullanılabilir bellek ve diğer sorgu ifadelerde karmaşıklığına bağlı olarak değişir, ancak kadar 256 tablo kaynakları açıklamada, kullanılabilir. Tek tek sorguların 256 tablo kaynakları desteklemeyebilir.

    [!NOT]

    Sorgu performans sorguda başvurulan tablolar çok zarar verebilir. Derleme ve optimizasyon da ek faktörlerden etkilenir. Dizinleri ve dizin oluşturulmuş görünümler her varlığı bunlar <table_source> ve <select_list> select deyimi içinde.

    from anahtar sözcüğü, döndürülen sonuç kümesi etkilemez sonra Tablo kaynakları sırası. SQL ServerYinelenen adlar from yan tümcesinde görüntülendiğinde hata verir.

  • table_or_view_name
    Tablo veya Görünüm adıdır.

    Tablo veya Görünüm başka bir veritabanındaki aynı örneği olup olmadığını SQL Serverbiçiminde bir ad kullanın database.schema.object_name.

    Tablo veya görünüm örneği dışında var ise SQL Serverl şeklinde bir four-part adı kullanın, linked_server.catalog.schema.object. Daha fazla bilgi için, bkz. sp_addlinkedserver (Transact-sql). Kullanılarak oluşturulmuş four-part adı opendatasource işlevi gibi sunucu adının bir parçası uzak tablo kaynağını belirtmek için de kullanılabilir. opendatasource belirtildiğinde, database_nameve schema_nametüm veri kaynakları için geçerli olmayabilir ve uzak nesne erişen ole db sağlayıcı yeteneklerini tabi olan.

  • [OLARAK]table_alias
    Takma adıdır table_source kullanılabilir ya da kolaylık sağlamak için bir tablo veya Görünüm kendiyle ayırmak veya alt. Bir diğer sık tabloları birleştirme belirli sütunlara başvurmak için kullanılan kısaltılmış tablo addır. Birden fazla birleşim tablosunda sütun adı varsa, SQL Serversütun adı tablo adı, Görünüm adı veya takma adı kalifiye olmalıdır gerektirir. Bir diğer tanımlanmışsa, tablo adı kullanılamaz.

    Türetilmiş bir tablo, satır kümesi veya tablo değerli işlev veya (örneğin, PIVOT veya UNPIVOT) işleci yan tümcesi kullanıldığında, gerekli table_aliasyan tümcenin sonunda döndürülen gruplandırma sütunlar dahil olmak üzere tüm sütunları ilişkili tablonun adıdır.

  • WITH (<table_hint> )
    Sorgu iyileştirici bir optimizasyon veya kilitleme stratejisini bu tablo ve bu deyim için kullanılacağını belirtir. Daha fazla bilgi için, bkz. Tablo ipuçları (Transact-sql).

  • rowset_function
    Satır kümesi işlevler tablo başvurusu yerine kullanılabilecek bir nesne döndürür openrowset gibi birini belirtir. Satır kümesi işlevler listesi hakkında daha fazla bilgi için bkz: Satır kümesi işlevler (Transact-sql).

    openrowset ve openquery işlevleri kullanarak uzaktaki bir nesneyi belirtmek için ole db sağlayıcı nesne erişen yetenekleri üzerinde bağlıdır.

  • bulk_column_alias
    İsteğe bağlı bir diğer sonuç sütun adını değiştirmek için ayarlanır. Sütun diğer adları bulk seçeneği ile openrowset işlevini kullanan select deyimleri izin verilir. Kullandığınızda bulk_column_alias, dosyasındaki sütunlar aynı sırada her tablo sütun için bir diğer ad belirtin.

    [!NOT]

    Bu diğer adın xml biçimi dosyası sütun öğeleri adı özniteliği varsa geçersiz kılar.

  • user_defined_function
    Bir tablo değerli işlev belirtir.

  • openxml <openxml_clause>
    Bir satır kümesi görünüm üzerinde bir xml belgesi sağlar. Daha fazla bilgi için, bkz. openxml (Transact-sql).

  • derived_table
    Satırlar veritabanından alır bir alt sorgu ise. derived_tableDış sorgu giriş olarak kullanılır.

    derived_tablekullanabileceğiniz Transact-SQLbirden çok satır belirtmek için Tablo değeri Oluşturucu özelliği. Örneğin, SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);. Daha fazla bilgi için, bkz. Tablo Değeri Oluşturucusu (Transact-SQL).

  • column_alias
    Sonuç sütun adını değiştirmek için isteğe bağlı bir diğer türetilmiş tablosu ayarlanır. Her sütun için bir sütun diğer adı seçme listesinde Ekle ve sütun diğer adları tam listesini parantez içine alın.

  • <tablesample_clause>
    Tablodaki verileri bir örnek döndürülür belirtir. Örnek yaklaşık olabilir. Bu yan herhangi bir birincil veya birleştirilen tablo select, update veya delete deyimi kullanılır. tablesample görünümleriyle belirtilemez.

    [!NOT]

    Karşı yükseltilir veritabanlarının tablesample kullandığınızda SQL Server, veritabanı uyumluluk düzeyini 110 veya yüksek ayarlanmışsa, PIVOT özyinelemeli ortak tablo ifade (cte) sorgu içinde verilmez. Daha fazla bilgi için, bkz. alter database uyumluluk düzeyi (Transact-sql).

  • SİSTEM
    Bir gerçeklenim bağımlısı ISO standartlarına göre belirlenen yöntem örnekleme olduğunu. De SQL Server, sadece bu örnekleme yöntemi kullanılabilir ve varsayılan olarak uygulanır. Sistem tablo sayfalardan rastgele bir dizi örnek için seçilir ve tüm satırları bu sayfalardaki örnek alt olarak döndürülen sayfa tabanlı örnekleme yöntemi uygulanır.

  • sample_number
    Yüzde ya da satırların sayısını gösteren bir tam veya yaklaşık sürekli sayısal ifade iş. YÜZDE ile belirtildiğinde sample_numberörtülü olarak dönüştürülür bir floatdeğeri; Aksi takdirde, o dönüştürülür bigint. YÜZDE varsayılandır.

  • YÜZDE
    Belirten bir sample_numberadresinden alındı tablo satırları yüzdesi tablodan. YÜZDE belirtildiğinde, SQL Serverbelirtilen döner yaklaşık yüzde bir. Ne zaman yüzde belirtilen sample_numberifadesi, 0 ile 100 arasında bir değere değerlendirmelidir.

  • SATIRLARI
    Yani yaklaşık belirtir sample_numbersatırlarından alınır. SATIRLARI belirtilen zaman, SQL Serverdöndürür, belirtilen satır sayısını yaklaşık. SATIRLARI belirtilen zaman, sample_numberifade için sıfırdan büyük bir tamsayı değer değerlendirmelidir.

  • YİNELENEBİLİR
    Seçili örnek yine döndürülebilir gösterir. Aynı belirtildiğinde repeat_seed değeri SQL Servertablodaki tüm satırların hiçbir değişiklik yapılan sürece aynı satırlar alt kümesini döndürür. Farklı bir ile belirtilen repeat_seeddeğeri SQL Servertablodaki satırların farklı bazı örnek muhtemel dönüş olacak. Tablo aşağıdaki eylemleri değişiklikleri kabul edilir: eklemek, güncelleştirmek, silmek, dizin yeniden oluşturma veya birleştirme ve veritabanı geri yükleme ya da ekleyebilirsiniz.

  • repeat_seed
    Tarafından kullanılan bir tamsayı ifade SQL Serverrasgele bir sayı üretmek için. repeat_seedis bigint. Eğer repeat_seedbelirtilmemiş, SQL Serverrasgele bir değer atar. İçin belirli bir repeat_seed değeri, örnekleme sonucu ise hep aynı tabloya uygulanmış hiçbir değişiklik. repeat_seedİfade için sıfırdan büyük bir tamsayı değerlendirmelidir.

  • <joined_table>
    Bir sonuç, yani iki veya daha fazla tablo ürün ayarlanır. Birden fazla birleşim için birleşimler doğal sırasını değiştirmek için parantez kullanın.

  • <join_type>
    Birleştirme işleminin türünü belirtir.

  • İÇ
    Tüm eşleşen çiftleri satır döndürülür belirtir. Her iki tablodaki eşleşmeyen satırlar atar. Hiçbir birleştirme türü belirtildiğinde, varsayılan değer budur.

  • TAM [DIŞ]
    Bir tablodan satır birleştirme koşulu uymayan ya da sağa sola sonuç kümesinde bulunan ve diğer tabloya karşılık gelen çıktı sütunları null olarak ayarlanır belirtir. Tüm satırlar genellikle INNER JOIN tarafından döndürülen ek olarak budur.

  • LEFT [DIŞ]
    Birleştirme koşulu toplantı sol tablodaki tüm satırların sonuç kümesinde bulunan ve çıktı sütunları ve diğer tablodan tüm satırları, iç birleşim tarafından döndürülen ek olarak null olarak ayarlanır belirtir.

  • SAĞ [DIŞ]
    Birleştirme koşulu toplantı sağ tablodaki tüm satırların sonuç kümesinde bulunan ve diğer tabloya karşılık gelen çıktı sütunları iç birleşim tarafından döndürülen tüm satır ek olarak null olarak ayarlanır belirtir.

  • <join_hint>
    Belirleyen SQL ServerDoktoru bir birleştirme ipucu ya da yürütme algoritması, başına sorgunun from yan tümcesinde belirtilen birleştirme sorgu. Daha fazla bilgi için, bkz. Ipuçları (Transact-sql) birleştirme.

  • KATILIN
    Belirtilen birleştirme işlemi belirtilen tablo kaynakları veya görünümler arasında gerçekleşeceğini belirtir.

  • on <search_condition>
    Birleştirme dayandığı koşulu belirtir. Sütunlar ve karşılaştırma işleçleri sık, örneğin kullanılsa koşulu herhangi bir yüklemi belirleyebilirsiniz:

    USE AdventureWorks2012 ;
    GO
    SELECT p.ProductID, v.BusinessEntityID
    FROM Production.Product AS p 
    JOIN Purchasing.ProductVendor AS v
    ON (p.ProductID = v.ProductID);
    

    Koşul sütunu belirttiğinde, sütunları aynı adı veya aynı veri yok yazın; veri türleri aynı değildir, ancak onlar da olmalıdır uyumlu ya da bu tip SQL Serverörtülü dönüştürebilirsiniz. Veri türlerini örtük olarak dönüştürülemez, durum açıkça veri türü convert işlevi kullanılarak dönüştürmeniz gerekir.

    on yan tümcesinde birleştirilen tablolar yalnızca birini içeren yüklemler olabilir. Böyle yüklemler sorgunun where yan tümcesinde de olabilir. Böyle yüklemler yerleşimini iç birleşimler için bir fark yapmaz, ancak dış birleşimler ilgili ne zaman onlar farklı bir sonuç neden olabilir. on yan tümcesi yüklemler tablonun birleşim önce uygulanan Oysa where yan tümcesi anlamsal birleştirme sonucu uygulanan çünkü.

    Arama koşullarında yüklemler hakkında daha fazla bilgi için bkz: Arama koşulu (Transact-sql).

  • ÇAPRAZ BİRLEŞTİRME
    Çapraz ürün iki tablosunu belirtir. where yan sanki aynı satırları döndürür bir eski stil, olmayan-sql-92-tarzı birleştirme belirtildi.

  • left_table_source{ARASI | DIŞ} UYGULA right_table_source
    Belirleyen right_table_sourceUygula operatör her satır karşı değerlendirilen left_table_source. Bu işlevsellik zaman yararlıdır right_table_sourcesütun değerleri alır bir tablo değerli işlev içeren left_table_sourcebağımsız değişkenlerinin biri.

    Çapraz ya da dış Uygula ile belirtilmelidir. Çapraz belirtildiğinde, hiçbir satır üretilen ne zaman right_table_sourcebelirtilen satır karşı değerlendirilen left_table_sourceve bir boş sonuç kümesi döndürür.

    outer belirtildiğinde, her satır için bir satır üretilen left_table_sourcebile right_table_sourcekarşı satır değerlendirir ve bir boş sonuç kümesi döndürür.

    Daha fazla bilgi için, Yorumlar bölümüne bakın.

  • left_table_source
    Tabloda önceki değişkeninde tanımlanan kaynağıdır. Daha fazla bilgi için, Yorumlar bölümüne bakın.

  • right_table_source
    Tabloda önceki değişkeninde tanımlanan kaynağıdır. Daha fazla bilgi için, Yorumlar bölümüne bakın.

  • table_sourceÖzet <pivot_clause>
    Belirleyen table_sourcedayanan özetlenebilir pivot_column. table_sourcebir tablo veya tablo ifade iş. Tüm sütunları içeren bir tablo çıktı table_sourcedışında pivot_columnve value_column. Sütunları table_source, dışında pivot_columnve value_column, gruplandırma sütunları PIVOT işlecini denir.

    Özet gruplandırma sütunlar için giriş tablosu üzerinde gruplandırma işlemi gerçekleştirir ve her grup için bir satır döndürür. Ayrıca, çıktıyı belirtilen her değer için bir tane sütun içeriyorsa column_list'de görünen pivot_column, input_table.

    Daha fazla bilgi için aşağıdaki açıklamalar bölümüne bakın.

  • aggregate_function
    Bir sistem veya bir veya daha fazla girdi kabul kullanıcı tanımlı toplama işlevi olduğunu. Toplama işlevini null değerler sabit olmalıdır. Bir toplama işlevi null değerler sabit toplama değerini değerlendirmek ise gruptaki null değerleri dikkate almaz.

    count(*) sistem toplama işlevi izin verilmez.

  • value_column
    PIVOT işlecini değerini sütundur. UNPIVOT ile kullanıldığında value_columngiriş varolan bir sütun adı olamaz table_source.

  • İÇİNpivot_column
    PIVOT işlecini Özet sütundur. pivot_columnbir tür örtük veya açık olarak Cabrio için olmalıdır nvarchar(). Bu sütun olamaz imageya rowversion.

    UNPIVOT kullanıldığında, pivot_columndan daralmış olur çıktı sütunu adı table_source. Varolan bir sütun olamaz table_sourceBu adla.

  • IN (column_list )
    PIVOT yan tümcesinde değerleri listeleyen pivot_columnçıktı tablosu sütun adları olacak. Listede herhangi bir sütun adları zaten giriş belirtemezsiniz table_sourceBu özetlenebilir.

    UNPIVOT yan tümcesinde sütunları listeler table_source, tek bir daralmış pivot_column.

  • table_alias
    Çıkış tablosuna takma adıdır. pivot_table_aliasbelirtilmelidir.

  • UNPIVOT < unpivot_clause>
    Giriş tablo sütunlarından birden çok daralmış belirtir column_listtek bir sütuna denilen pivot_column.

Açıklamalar

from yan tümcesi, birleştirilmiş tablo ve türetilen tablolar sql-92-sql sözdizimini destekler. sql-92 sözdizimi, iç, sol dış, sağ dış, tam dış ve çapraz birleştirme işleçleri sağlar.

Birliği ve birleşim içinde bir from yan tümcesi içinde Gösterim ve türetilen tablolar ve alt sorgular desteklenir.

Bir iç birleşim, kendisine bağlı bir tablodur. Ekleme veya güncelleştirme kendisiyle üzerinde temel alan işlemleri from yan sırayla izleyin.

Çünkü SQL Servergördüğü dağıtım ve önem istatistiklerinden bağlı sütun dağıtım istatistikleri sağlayan sunucuları, uzaktan birleştirme ipucu uzaktan birleştirme değerlendiren zorlamak için gerekli değildir. SQL ServerSorgu işlemci uzak istatistikleri dikkate alır ve bir uzaktan birleştirme strateji uygun olup olmadığını belirler. UZAKTAN birleştirme ipucu sütun dağıtım istatistikleri sağlamayan sağlayıcılar için kullanışlıdır.

Kullanarak Uygula

Hem sol ve sağ işlenen apply işleci tablo ifadeler vardır. Bu işlenenleri arasındaki ana fark right_table_sourcesütundan alır bir tablo değerli işlev left_table_sourceişlevin bağımsız değişkenlerinden biri olarak. left_table_sourceTablo değerli işlevler içerebilir, ancak sütunları olan bağımsız değişkenler içeremez right_table_source.

apply işleci from yan tümcesi tablo kaynak üretmek için aşağıdaki şekilde çalışır:

  1. Değerlendiren right_table_sourceher satır karşı left_table_sourcesatır kümeleri üretmek için.

    Değerleri right_table_sourcebağlı left_table_source. right_table_sourceyaklaşık bu şekilde gösterilebilir: TVF(left_table_source.row), burada TVFbir tablo değerli işlev.

  2. Sonuç kümeleri birleştiren değerlendirilmesi her satır üretilen right_table_sourceile left_table_sourcebir UNION all işlemi yaparak.

    apply işleci sonucunu tarafından üretilen sütunlar listesinde sütunlar kümesidir left_table_source, sütun listesi ile birlikte right_table_source.

Özet ve UNPIVOT

pivot_columnVe value_columnPIVOT operatör tarafından kullanılan gruplandırma sütunlar vardır. Özet çıkış sonuç kümesi elde etmek için aşağıdaki işlemi aşağıdaki gibidir:

  1. Bir grupla gerçekleştirir, input_tablekarşı gruplandırma üretir ve sütunlar için bir çıkış satır her grup.

    Çıkış satır gruplandırma sütunlar o grubun içinde karşılık gelen sütun değerlerini elde input_table.

  2. Aşağıdakileri yaparak her çıkış satır sütun listesindeki sütunlar için değerleri oluşturur:

    1. Ayrıca grup tarafından karşı bir önceki adımda oluşturulan satırları gruplandırma pivot_column.

      Her çıktı sütunu column_list, seçilmesi koşulu karşılayan bir alt grubu:

      pivot_column = CONVERT(<data type of pivot_column>, 'output_column')

    2. aggregate_functionkarşı değerlendirilen value_columnBu alt grup ve sonucu döndürülen karşılık gelen değeri output_column. Alt grup boşsa, SQL Server, boş bir değer üretir output_column. count toplama işlevidir ve alt grup boş ise, sıfır (0) verilir.

İzinler

delete, select veya update deyimi izinleri gerektirir.

Örnekler

A.Kullanarak basit bir from yan tümcesi

Aşağıdaki örnek TerritoryIDve Namesütunlarından SalesTerritoryiçinde masa AdventureWorks2012örnek veritabanı.

USE AdventureWorks2012 ;
GO
SELECT TerritoryID, Name
FROM Sales.SalesTerritory
ORDER BY TerritoryID ;

Sonuç kümesi buradadır.

TerritoryID Name                          
----------- ------------------------------
1           Northwest                     
2           Northeast                     
3           Central                       
4           Southwest                     
5           Southeast                     
6           Canada                        
7           France                        
8           Germany                       
9           Australia                     
10          United Kingdom                
(10 row(s) affected)

TerritoryID Name                          
----------- ------------------------------
1           Northwest                     
2           Northeast                     
3           Central                       
4           Southwest                     
5           Southeast                     
6           Canada                        
7           France                        
8           Germany                       
9           Australia                     
10          United Kingdom                
(10 row(s) affected)

B.tablock ve holdlock Doktoru ipuçlarını kullanarak

Bir açık paylaşılan Tablo kilidi yerleştirmek aşağıdaki kısmi hareket gösterir Employeeve dizin nasıl. Kilit Hareketin tamamı tutulur.

USE AdventureWorks2012 ;
GO
BEGIN TRAN
SELECT COUNT(*) 
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK) ;

C.sql-92 cross JOIN sözdizimini kullanarak

Aşağıdaki örnek, iki çapraz çarpımı verir Employeeve Department. Tüm olası birleşimlerini listesini BusinessEntityIDsatırları ve tüm Department adı satır döndürdü.

USE AdventureWorks2012 ;
GO
SELECT e.BusinessEntityID, d.Name AS Department
FROM HumanResources.Employee AS e
CROSS JOIN HumanResources.Department AS d
ORDER BY e.BusinessEntityID, d.Name ;

D.sql-92 full outer JOIN sözdizimini kullanarak

Aşağıdaki örnek, ürün adı ve ilgili herhangi bir satış siparişlerinde verir SalesOrderDetailtablosu. Ayrıca hiçbir ürün listelenen herhangi bir satış siparişlerini döndüren Producttablo ve tüm ürünler listelenen farklı bir satış siparişi ile Producttablosu.

USE AdventureWorks2012 ;
GO
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
FULL OUTER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL OR sod.ProductID IS NULL
ORDER BY p.Name ;

E.sql-92 full outer JOIN sözdizimini kullanarak

Aşağıdaki örnek üzerinde iki tabloyu birleştiren ProductIDve sol tablodaki eşleşmeyen satırlar korur. ProductTablo ile eşleşmesi SalesOrderDetailmasa üstünde ProductIDher tablodaki sütunların. Tüm ürünler, sipariş ve sipariş değil, sonuç kümesinde görüntülenir.

USE AdventureWorks2012 ;
GO
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
LEFT OUTER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;

F.sql-92 INNER JOIN sözdizimini kullanarak

Aşağıdaki örnek, tüm ürün adları ve satış siparişi kimlikleri verir.

USE AdventureWorks2012 ;
GO
-- By default, SQL Server performs an INNER JOIN if only the JOIN 
-- keyword is specified.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;

G.sql-92 RIGHT outer JOIN sözdizimini kullanarak

Aşağıdaki örnek üzerinde iki tabloyu birleştiren TerritoryIDve sağ tablodaki eşleşmeyen satırlar korur. SalesTerritoryTablo ile eşleşmesi SalesPersonmasa üstünde TerritoryIDher tablodaki sütun. Bölge atandıkları olsun veya olmasın tüm satış temsilcileri sonuç kümesinde görüntülenir.

USE AdventureWorks2012 ;
GO
SELECT st.Name AS Territory, sp.BusinessEntityID
FROM Sales.SalesTerritory AS st 
RIGHT OUTER JOIN Sales.SalesPerson AS sp
ON st.TerritoryID = sp.TerritoryID ;

H.KARMA ve birleştirme birleştirme ipuçlarını kullanarak

Aşağıdaki örnek, üç tablo birleştirme arasında yedekler Product, ProductVendor, ve Vendorürünler ve onların satıcıları listesini oluşturmak için tabloları. Sorgu en iyi duruma getiricisi birleşimler Productve ProductVendor( p ve pv) kullanarak birleştirme katıl. Next, sonuçlarını Productve ProductVendorBirleştirme katıl ( p ve pv) karma katılmış Vendorüretmek için tablo ( p ve pv) ve v.

Önemli notÖnemli

Sonra birleştirme ipucu belirtilmişse, iç anahtar kelime artık isteğe bağlıdır ve iç gerçekleştirilecek birleştirme için açıkça belirtilmelidir.

USE AdventureWorks2012 ;
GO
SELECT p.Name AS ProductName, v.Name AS VendorName
FROM Production.Product AS p 
INNER MERGE JOIN Purchasing.ProductVendor AS pv 
ON p.ProductID = pv.ProductID
INNER HASH JOIN Purchasing.Vendor AS v
ON pv.BusinessEntityID = v.BusinessEntityID
ORDER BY p.Name, v.Name ;

I.Türetilmiş bir tablo kullanma

Aşağıdaki örnek türetilmiş bir tablo kullanan bir SELECTdeyimi sonra FROMtüm çalışanlar ve yaşadıkları şehir ilk ve son adları verilecek yan.

USE AdventureWorks2012 ;
GO
SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City
FROM Person.Person AS p
INNER JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID 
INNER JOIN
   (SELECT bea.BusinessEntityID, a.City 
    FROM Person.Address AS a
    INNER JOIN Person.BusinessEntityAddress AS bea
    ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;

J.tablesample kullanarak bir tablodaki satırların örnek verileri okuyabilir

Aşağıdaki örnek TABLESAMPLEde FROMyaklaşık dönmek için yan 10yüzde tüm satırları, Customertablosu.

USE AdventureWorks2012 ;
GO
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;

K.Kullanarak Uygula

Aşağıdaki örnek, aşağıdaki şema aşağıdaki tabloları veritabanında varolan varsayılmaktadır:

  • Departments: DeptID, DivisionID, DeptName, DeptMgrID

  • EmpMgr: MgrID, EmpID

  • Employees: EmpID, EmpLastName, EmpFirstName, EmpSalary

Orada da bir tablo değerli işlev GetReports(MgrID), tüm çalışanların listesini döndürür (EmpID, EmpLastName, EmpSalary), belirtilen için rapor doğrudan ya da dolaylı olarak MgrID.

Örnek APPLYtüm bölümler ve tüm çalışanların bu bölümde verilecek. Tüm çalışanların belirli bir bölümü yoksa, bu bölüm için döndürülen satırları olmayacaktır.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d CROSS APPLY dbo.GetReports(d.DeptMgrID) ;

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d CROSS APPLY dbo.GetReports(d.DeptMgrID) ;

Sorgu satır olmadan boş değerler için üretecektir çalışanlar, bu bölümler için üretmek için isterseniz EmpID, EmpLastNameve EmpSalarysütunları kullanın OUTER APPLYyerine.

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d OUTER APPLY dbo.GetReports(d.DeptMgrID) ;

SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d OUTER APPLY dbo.GetReports(d.DeptMgrID) ;

L.Özet ve UNPIVOT

Aşağıdaki örnekte çalışanın kimlikleri satınalma siparişlerin sayısını döndürür 164, 198, 223, 231, ve 233, satıcı kimliği tarafından kategorize

USE AdventureWorks2012;
GO
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) AS p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [250], [251], [256], [257], [260] )
) AS pvt
ORDER BY VendorID;

Kısmi bir sonuç kümesi aşağıdadır:

VendorID    Emp1        Emp2        Emp3        Emp4        Emp5

----------------------------------------------------------------

1           4           3           5           4           4

2           4           1           5           5           5

3           4           3           5           4           4

4           4           2           5           5           4

5           5           1           5           5           5

Tablo unpivot için önceki örnekte üretilen sonuç olarak depolanır kabul pvt. Sorguyu aşağıdaki gibi görünür.

--Create the table and insert values as portrayed in the previous example.
CREATE TABLE dbo.pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO dbo.pvt VALUES 
 (1,4,3,5,4,4)
,(2,4,1,5,5,5)
,(3,4,3,5,4,4)
,(4,4,2,5,5,4)
,(5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM 
    (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
    FROM dbo.pvt) AS p
UNPIVOT
    (Orders FOR Employee IN 
        (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt
GO

Kısmi bir sonuç kümesi aşağıdadır:

VendorID    Employee    Orders

------------------------------

1           Emp1        4

1           Emp2        3

1           Emp3        5

1           Emp4        4

1           Emp5        4

2           Emp1        4

2           Emp2        1

2           Emp3        5

2           Emp4        5

2           Emp5        5

M.ÇAPRAZ kullanarak Uygula

Aşağıdaki örnek bir anlık görüntüsünü sorgulayarak plan önbelleğinde bulunan tüm sorgu planları alır sys.dm_exec_cached_plansplanı kolları tüm sorgu planları önbelleğe almak için dinamik yönetimi görünümü. Sonra CROSS APPLYoperatör planı tanıtıcıları geçmek için belirtilen sys.dm_exec_query_plan. xml Showplan çıkış için her planı plan önbelleğinde bulunan query_plandöndürülen tablo sütun.

USE master;
GO
SELECT dbid, object_id, query_plan 
FROM sys.dm_exec_cached_plans AS cp 
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle); 
GO

USE master;
GO
SELECT dbid, object_id, query_plan 
FROM sys.dm_exec_cached_plans AS cp 
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle); 
GO

Ayrıca bkz.

Başvuru

CONTAINSTABLE (Transact-sql)

Sil (Transact-sql)

freetexttable (Transact-sql)

Insert (Transact-sql)

openquery (Transact-sql)

OPENROWSET (Transact-SQL)

İşleçler (Transact-sql)

Güncelleştirme (Transact-sql)

NEREDE (Transact-sql)