(Transact-SQL)

Türetilen tablolar, görünümler, tablolar ve birleştirilen tablolar delete select, kullanılan ve güncelleştir deyimleri belirtir.Seçim listesinde yalnızca sabitler, değişkenler ve aritmetik ifadeler ( sütun adı) varsa, select deyimiçinde dışında from yan tümce gereklidir.

Konu bağlantısı simgesiTransact-SQL sözdizimi 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ş tablo kaynakkullanmayı veya bir diğer adolmadan belirtir Transact-SQL deyim.Kullanılabilir bellek ve diğer sorgu ifadelerde karmaşıklığına bağlı olarak sınır değişse de en çok 256 tablo deyim, kaynakları kullanılabilir.Tek tek sorguların 256 tablo kaynakları desteklemiyor olabilir.

    Not

    Sorguda başvurulan tablolar çok sayıda ile sorgu performansı olumsuz etkilenebilir.Derleme ve en iyi duruma getirme saat ek unsurlar da etkilenir.Dizinleri ve dizin oluşturulmuş görünümler her varlığını bunlar <table_source> ve boyutunu <select_list> select deyimiçinde.

    Döndürülen sonuç kümesi from anahtar sözcüğünden sonra tablo kaynakları sırasını etkilemez.SQL Serveryinelenen adlar from yan tümcetümcesinde görüntülendiğinde hata verir.

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

    Aynı örnek üzerinde başka bir veritabanındaki tablo ya da görünüm varsa, SQL Server, tam adı formunda kullanmak veritabanı.schema.nesne_adı.

    tablo veya Görünüm örnek dışında olup SQL Serverl, dört bir formun adını kullanmak linked_server.catalog.schema.object.Daha fazla bilgi için, bkz. sp_addlinkedserver (Transact-SQL).Kullanarak oluşturulmuş bir dört ad opendatasource işlev sunucu adının bir parçası olarak da uzak tablo kaynakbelirtmek için kullanılabilir.opendatasource belirtildiğinde, database_name ve schema_name tüm veri kaynaklarına uygulanmayabilir ve ole DBsağlayıcı , erişir yeteneklerini tabi olduğu uzak nesne.Daha fazla bilgi için, bkz. Dağıtılmış sorgular.

  • [OLARAK]table_alias
    diğer ad olan table_source kullanılabilecek kolaylığı için veya bir tablo veya görünümü bir kendi kendinebirleştirmek veya alt sorguiçinde ayırt etmek için.Bir diğer ad sık birleştirmektabloların belirli sütunlara başvurmak için kullanılan kısaltılmış tablo addır.Aynı sütun adı birden fazla tablo birleştirmekvarsa SQL Server sütun adı tablo adı, görünüm adı veya diğer adyetkili gerekir.Bir diğer ad tanımlanırsa, tablo adı kullanılamaz.

    tablo, satır kümesi ya da tablo-değerli işlevveya işleçyan tümce (Özet veya UNPIVOT gibi) kullanılan, gerekli table_alias yan tümce sonunda döndürülen gruplandırma sütunlar da dahil olmak üzere, tüm sütunların ilişkili tablo adıdır.

  • WITH (<table_hint> )
    sorgu iyileştiricisi bir iyileştirme veya kilitleme stratejisini bu tablo ve bu deyimiçin kullanılacağını belirtir.Daha fazla bilgi için, bkz. Tablo İpuçları (Transact-SQL).

  • rowset_function
    satır kümesi işlevler tablo başvurusu yerine kullanılabilecek bir nesne döndürür openrowset, 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).

    Uzaktaki bir nesneyi belirtmek için openrowset ve SORGUAÇ işlevleri kullanarak nesneye erişir ole DB sağlayıcı yeteneklerine bağlıdır.Daha fazla bilgi için, bkz. Dağıtılmış sorgular.

  • bulk_column_alias
    sonuç kümesi sütun adını değiştirmek için isteğe bağlı bir diğer ad adıdır.Sütun diğer adları openrowset işlev bulk seçeneğiyle kullanın yalnızca select deyimleri izin verilir.Kullandığınızda bulk_column_aliassütunlar halinde aynı sırada her tablosütun diğer ad belirtin dosya.

    Not

    Bu diğer ad varsa, bir xml biçim dosyasısütun öğelerinin ad öznitelik geçersiz kılar.

  • user_defined_function
    tablobelirtir-değerli işlev.

  • 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
    Veritabanından alınan satırların bir alt sorgu ise.derived_tableDış sorgu giriş olarak kullanılır.

    derived_tablekullanabileceğiniz Transact-SQL belirt birden çok satır için satır Oluşturucu (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);.

  • column_alias
    sonuç kümesi türetilmiş tablo sütun adını değiştirmek için isteğe bağlı bir diğer ad adıdır.sütun diğer adları tam listesini ayraç içine alın ve seçim listesinde her sütun için bir sütundiğer ad içerir.

  • <tablesample_clause>
    tablo verileri bir örneğini verdiğini belirtir.Örnek yaklaşık olabilir.Bu yan tümce herhangi bir birincil veya birleştirilen tablo select, update veya delete deyimiçinde kullanılabilir.tablesample görünümlerle belirtilemez.Daha fazla bilgi için, bkz. tablesample kullanarak ayarlar sonucu sınırlama.

    Not

    Kullandığınızda, tablesample yükseltilir veritabanlarının karşı SQL Server, veritabanı Uyumluluk düzey küme için 90 veya daha yüksek olmalıdır.küme için veritabanı Uyumluluk düzey, bkz: alter database uyumluluk düzeyi (Transact-SQL).

  • SİSTEM
    Bir uygulama bağımlı örnekleme yöntem ISO standartlarına göre belirtilir.De SQL Server, bu tek örnekleme yöntem kullanılabilir ve varsayılan olarak uygulanırSistem sayfageçerlidir-bir rasgele küme , sayfa tablo için örnek seçilir ve bu sayfalardaki tüm satırlar alt kümeörnek olarak döndürülen örneklemeyöntem temel. Daha fazla bilgi için, bkz. tablesample kullanarak ayarlar sonucu sınırlama.

  • sample_number
    Yüzde ya da satır sayısını gösteren bir tam veya yaklaşık sabit sayısal ifade edilir.YÜZDE ile belirtildiğinde sample_number örtülü olarak dönüştürülür bir float değeri; Aksi halde, onu dönüştürülür bigint.YÜZDE varsayılandır.

  • YÜZDE
    Belirleyen bir sample_number tablo satırları yüzdesi alınan tablo.YÜZDE değeri belirlendiğinde, SQL Server belirtilen yaklaşık yüzde bir verir.YÜZDE belirtilen ne zaman sample_number ifade gerekir 0 ile 100 arasında bir değere değerlendirilemiyor.

  • SATIRLARI
    Bu yaklaşık belirtir sample_number satırlarından alınır.Satır belirtilmişse, SQL Server yaklaşık olarak belirtilen satır sayısını verir.Satır belirtilmişse, sample_number ifade için sıfırdan büyük bir tamsayı değeri değerlendirmek gerekir.

  • YİNELENEBİLİR
    Seçili örnek yeniden dönebilmesi gösterir.İle aynı belirtildiğinde repeat_seed değeri SQL Server hiçbir tabloher satır için yapılan değişiklikler sürece aynı alt küme satır kümesi döndürür.Farklı bir ile belirtildiğinde repeat_seed değeri SQL Server olası dönüş farklı bazı örnek tablosatırları olur.tablo aşağıdaki eylemleri değişiklikleri kabul edilir: eklemek, güncelleştirmek, silmek, yeniden oluşturma veya birleştirme ve veritabanını geri yükleme dizin veya iliştirin.

  • repeat_seed
    Tarafından kullanılan sabit tamsayı ifade ise SQL Server için generate rasgele bir sayı.repeat_seedis bigint.repeat_seed Belirtilmezse, SQL Server rasgele bir değer atar.Özel bir repeat_seed değeri, örnekleme sonucu ise her zaman aynı değişiklik tablouygulandı.repeat_seedifade değerlendirmek için sıfırdan büyük bir tamsayı olmalıdır.

  • <joined_table>
    İki veya daha fazla tablo ürünü olan bir sonuç kümesi kümesidir.Birden fazla birleşim için birleşimler doğal sırasını değiştirmek için parantez kullanın.

  • <join_type>
    birleştirmek işleminin türünü belirtir.

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

  • TAM [DIŞ]
    sonuç kümesisatır birleştirmek koşulu uymayan ya da sola veya sağa tablo dahil, ve diğer tablo karşılık gelen bir çıktı sütunu null küme olduğunu belirtir.Tüm satırlar genellikle INNER JOIN tarafından döndürülen ek olarak budur.

  • SOL [DIŞ]
    sonuç kümesi birleştirmek koşulu toplantı değil sol tablo tüm satırları dahil ve küme boş iç birleşimtarafından döndürülen tüm satırlara ek olarak başka bir tablo çıktı sütunu olduğunu belirler.

  • SAĞ [DIŞ]
    sonuç kümesi birleştirmek koşulu toplantı değil sağ tablo tüm satırları dahil ve küme NULL, ' % s'joın iç birleşimyan döndürülen tüm satırların yanında diğer tablo karşılık gelen bir çıktı sütunu olduğunu belirler.

  • <join_hint>
    Belirleyen SQL Server sorgu iyileştiricisi bir birleştirmek ipucu veya birleştirmek sorgusu from yan tümcetümcesinde belirtilen başına yürütme algoritması kullanın.Daha fazla bilgi için, bkz. İpuçları (Transact-SQL) birleştirme.

  • BİRLEŞTİRME
    Belirtilen birleştirmek işlemi belirtilen tablo kaynakları veya görünümler arasında gerçekleşmesi gerektiğini belirtir.

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

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

    Koşul sütunlarını belirttiğinde, sütunları aynı adı veya aynı veri olması gerekmez yazın; veri türleri aynı değilse, ancak bunlar olmalıdır uyumlu veya türlerinden SQL Server için örtük dönüştürme.Veri türlerini örtük dönüştürülemiyorsa, koşul veri türü dönüştürme işlevkullanarak açıkça dönüştürmelisiniz.

    on yan tümcetümcesinde birleştirilen tablolar yalnızca birini içeren yüklemler olabilir.Böyle yüklemleri de sorgu where yan tümce olabilir.Bu tür yüklemler yerleşimini iç birleştirmeler için bir fark yapmaz, ancak dış birleşimler ilgilidir, bunlar farklı bir sonuç neden olabilir.' % S'tabloya tablo birleştirmekönce on yan tümce Doðrulamalarda uygulanan oysa where yan tümce birleştirmeksonucu gönderilmesinin uygulanır olmasıdır.

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

  • ÇAPRAZ BİRLEŞTİRME
    İki tablonun çapraz ürün belirtir.Hiçbir where yan tümce gibi aynı satırları döndürür, bir eski stil içinde olmayan belirtildi-SQL-92- birleştirmekstili.

  • left_table_source{ARASI | DIŞ} UYGULA right_table_source
    Belirleyen right_table_source UYGULA her satır karşı işleç değerlendirilir left_table_source.Bu işlevsellik ne zaman yararlıdır right_table_source bir tabloiçerir- sütun sürer değerli işlev değerler left_table_source biri kendi bağımsız değişkenleri.

    Çapraz veya dış UYGULA ile belirtilmelidir.Hiçbir satır arası belirtildiğinde, üretilen, right_table_source belirtilen satır karşı değerlendirilen left_table_source ve bir boş sonuç kümesidöndürür.

    outer belirtildiğinde, her satır için bir satır üretilen left_table_source bile right_table_source karşı o satır değerlendirir ve bir boş sonuç kümesidöndürür.

    Daha fazla bilgi için açıklamalar bölümüne bakın ve Kullanarak UYGULA.

  • left_table_source
    Önceki bağımsız değişkeninde tanımlanan tablo kaynak aynıdır.Daha fazla bilgi için açıklamalar bölümüne bakın.

  • right_table_source
    Önceki bağımsız değişkeninde tanımlanan tablo kaynak aynıdır.Daha fazla bilgi için açıklamalar bölümüne bakın.

  • table_sourcePIVOT <pivot_clause>
    Belirleyen table_source dayanan özetlenebilir pivot_column.table_sourcebir tablo veya tablo ifadeedilir.Tüm sütunları içeren bir tablo çıktı ise table_source dışında pivot_column ve value_column.Sütunlarından table_source, dışında pivot_column ve value_column, gruplandırma sütunlar pivot işleçdenir.

    Özet, bir gruplandırma sütunlar için giriş tablo gruplandırma işlemi gerçekleştirir ve her grup için bir satır döndürür.Ayrıca, çıkış belirtilen her değer için bir sütun içeren column_list görüntülenen pivot_column , input_table.

    Daha fazla bilgi için açıklamalar bölümüne bakın ve PIVOT ve UNPIVOT kullanma.

    Not

    Yükseltilir veritabanlarının karşı PIVOT kullandığınızda SQL Server, veritabanı Uyumluluk düzey küme için 90 veya daha yüksek olmalıdır.Veritabanı Uyumluluk düzeyayarlama hakkında daha fazla bilgi için bkz: alter database uyumluluk düzeyi (Transact-SQL).

  • aggregate_function
    Bir sistem veya bir veya daha fazla girdi kabul eden kullanıcı tanımlı toplu işlev değil.topluişlev null değerler sabit olmalıdır. toplu değerini değerlendirmek iken bir topluişlev null değerler sabit grubunda null değerler dikkate almaz.

    count(*) sistem toplu işlev izin verilmez.

  • value_column
    PIVOT işleçdeğer sütun kullanılamıyor.UNPIVOT ile kullanıldığında value_column Varolan bir sütun giriş adı olamaz table_source.

  • İÇİNpivot_column
    işleçPIVOT pivot sütun kullanılamıyor.pivot_columnaçıkça veya örtük olarak dönüştürülebilir için bir tür olmalıdır nvarchar().Bu sütun olamaz image veya rowversion.

    UNPIVOT kullanıldığında, pivot_column "daraltıldığı gelen" olur çıktı sütun adı table_source.Varolan bir sütun olamaz table_source o adı.

  • IN (column_list )
    PIVOT yan tümcetümcesinde değerleri listeler pivot_column Çıkış tablo sütun adlarını olacak.Liste zaten hiçbir sütun adları giriş belirtemezsiniz table_source , özetlenebilir.

    UNPIVOT yan tümcesütunlarda listeler table_source "daraltıldığı," tabloları tek pivot_column.

  • table_alias
    Çıktı tablo diğer ad adıdır.pivot_table_aliasbelirtilmesi gerekir.

  • UNPIVOT < unpivot_clause>
    "Daraltıldığı giriş tablo içinde birden çok sütun arasında" olduğunu belirtir column_list bir tek sütun adı verilen pivot_column.

    Daha fazla bilgi için açıklamalar bölümüne bakın ve PIVOT ve UNPIVOT kullanma.

    Not

    Yükseltilir veritabanlarının karşı UNPIVOT kullandığınızda SQL Server, veritabanı Uyumluluk düzey küme için 90 veya daha yüksek olmalıdır.küme için veritabanı Uyumluluk düzey, bkz: alter database uyumluluk düzeyi (Transact-SQL).

Açıklamalar

from yan tümce SQL-92 destekler-SQL sözdizimi tabloları birleştirilmiş ve türetilen tablolar.SQL-92 sözdizimi iç, sol dış, sağ dış, tam dış ve çapraz birleştirmek işleçleri sağlar.

BİRLİĞİ ve bir from yan tümce içinde birleştirme görünümler içinde ve türetilen tablolar ve alt sorgular desteklenir.

Bir kendi kendinebirleştirmek kendisine katıldığı bir tablo olur.Ekleme veya güncelleştirme, bir kendi kendinebirleştirmek üzerinde temel işlemleri from yan tümcesırayla izleyin.

Çünkü SQL Server düşünür dağıtım ve kardinalite istatistikleri bağlı sütun dağıtım istatistikleri sağlar sunucuların, uzaktan birleştirmek ipucu uzaktan birleştirmek değerlendirme zorlamak için gerekli değildir.SQL Server Sorgu işlemci uzak istatistikleri dikkate alır ve Uzaktan -birleştirmek yöntemi uygun olup olmadığını belirler.Uzaktan birleştirmek ipucu sütun dağıtım istatistikleri sağlamayan sağlayıcılar için kullanışlıdır.Daha fazla bilgi için, bkz. ole db sağlayıcıları için dağıtım istatistikleri gereksinimleri.

Birleşimler ile çalışma hakkında daha fazla bilgi için bkz: Fundamentals katılın ve Birleşimler kullanma.

Kullanarak UYGULA

Hem apply işleç sol ve sağ işlenen tablo deyimleridir.Bu işlenenleri arasındaki temel fark ise right_table_source tablo-değerli bir sütun götüren işlev left_table_source bir işlevbağımsız değişken olarak.left_table_source tabloiçerebilir-değerli fonksiyonlar, ancak sütunları olan bağımsız değişkenler içerebilir right_table_source.

apply işleç from yan tümce tablokaynak üretmek için aşağıdaki şekilde çalışır:

  1. Değerlendiren right_table_source her satır karşı left_table_source için üretir satır kümeleri.

    Değerler right_table_source bağlıdır left_table_source.right_table_sourceBu şekilde yaklaşık olarak temsil edilebilir: TVF(left_table_source.row), burada TVF bir tablo-değerli işlev.

  2. Sonuç kümeleri birleştirir değerlendirmesini içindeki her satırı için üretilen right_table_source ile left_table_source tarafından gerçekleştiriliyor UNION all bir işlem.

    apply işleç sonucunu tarafından üretilen sütunlar listesi küme , sütunları olan left_table_source sütun listesi ile birleştiğinde right_table_source.

Özet ve UNPIVOT

pivot_column Ve value_column PIVOT işleçtarafından kullanılan gruplandırma sütunlar.Özet çıkış sonuç kümesielde etmek için aşağıdaki işlemi aşağıdaki gibidir:

  1. Bir grupla gerçekleştirir, input_table karşı gruplandırma sütunlar ve oluşturan bir çıkış satır her grup.

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

  2. Aşağıdakileri gerçekleştirerek her çıktı satırının sütun listesindeki sütunlar için değerleri oluşturur:

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

      Her sütun çıktı için column_list, bir koşula uygun bir alt seçme:

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

    2. aggregate_functionkarşı değerlendirilen value_column Bu alt grup ve sonuçlarını döndürülür buna karşılık gelen değer olarak output_column.Alt grup boş ise, SQL Server için null bir değer üretir output_column.SAYI toplu işlev olan ve alt grup boş ise, sıfır (0) döndürülür.

Daha fazla bilgi için, bkz. PIVOT ve UNPIVOT kullanma.

İzinler

delete, select veya update deyimizinleri gerektirir.

Örnekler

A.Kullanarak basit bir from yan tümce

Aşağıdaki örnek alır TerritoryID ve Name sütunlarından SalesTerritory tablo AdventureWorks2008R2 örnek veritabanı.

USE AdventureWorks2008R2 ;
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)

B.tablock ve holdlock en iyi hale getirme ipuçları kullanma

Aşağıdaki kısmi hareket açık paylaşılan tablo kilit koymak gösterilmiştir Employee ve nasıl okuma dizini.Hareketin tamamı kilit tutulur.

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

C.SQL-92 çapraz JOIN sözdizimini kullanarak

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

USE AdventureWorks2008R2 ;
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 kullanarak full outer JOIN söz dizimini

Aşağıdaki örnek, ürün adı ve karşılık gelen tüm satış siparişlerini verir SalesOrderDetail tablo.Ayrıca listelenen hiçbir ürüne sahip tüm satış siparişlerini döndüren Product tablove ürünlerden farklı olarak listelenen bir satış siparişi ile Product tablo.

USE AdventureWorks2008R2 ;
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 left outer JOIN sözdizimini kullanarak

Aşağıdaki örnek üzerinde iki tabloyu birleştiren ProductID ve sol tabloeşleştirilmemiş satırları korur.Productİletablo eşleşen SalesOrderDetailtablo ProductID her tablo.Tüm ürünler, sipariş ve sipariş değil, sonuç kümesigörüntülenir.

USE AdventureWorks2008R2 ;
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 AdventureWorks2008R2 ;
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 sağa outer JOIN sözdizimini kullanarak

Aşağıdaki örnek üzerinde iki tabloyu birleştiren TerritoryID ve sağ tabloeşleştirilmemiş satırları korur.SalesTerritoryİletablo eşleşen SalesPersontablo TerritoryIDher tablosütun . Bölge atanmış olup olmadığını sonuç kümesi, tüm satış temsilcileri görünür.

USE AdventureWorks2008R2 ;
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.SAĞLAMA ve birleştirme birleştirmek ipuçlarını kullanarak

Aşağıdaki örnek, üç - yedekler arasındatablobirleştirmek Product, ProductVendor, ve Vendor ürünler ve listesini oluşturmak için tablolarıonların satıcıları. sorgu iyileştiricisi birleşimler Product ve ProductVendor ()p ve pv) kullanarak birleştirme birleştirmek.Sonraki, sonuçlar Product ve ProductVendor birleştirme birleştirmek (p ve pv) için KARMA katılan Vendorüretmek içintablo ( p ve pv) ve v.

Önemli notÖnemli

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

USE AdventureWorks2008R2 ;
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 ;

Ö.Türetilmiş bir tablokullanma

Aşağıdaki örnek türetilmiş tablokullanır bir SELECTdeyim FROMtüm çalışanları ve yaşadığı şehirler ilk ve son adları verilecekyan tümce.

USE AdventureWorks2008R2 ;
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.tablosatır örneği veri okumak tablesample kullanarak

Aşağıdaki örnek TABLESAMPLE , FROM yan tümce dönün yaklaşık 10 tüm satırlardan birinde yüzde Customer tablo AdventureWorks2008R2 veritabanı.

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

K.Kullanarak UYGULA

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

  • Departments: DeptID, DivisionID, DeptName, DeptMgrID

  • EmpMgr: MgrID, EmpID

  • Employees: EmpID, EmpLastName, EmpFirstName, EmpSalary

Ayrıca bir tablovardır-değerli işlev, GetReports(MgrID) , tüm çalışanların listesini döndürür (EmpID, EmpLastName, EmpSalary), rapor doğrudan veya dolaylı olarak belirtilen MgrID.

Bu örnek kullanır APPLY tüm bölümler ve tüm çalışanların geri dönmek içinbu Bakanlığı.Herhangi bir çalışan belirli bir bölüm yoksa, o bölüm için döndürülen tüm satırların olmayacak.

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

null değerleri üretecektir çalışanlar olmadan bu bölümleri için satırlar oluşturmak için sorguyu isteyip EmpID, EmpLastName ve EmpSalary sütunlarını, OUTER APPLY bunun yerine.

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

L.Özet ve UNPIVOT

Aşağıdaki örnek çalışan kimliklerini tarafından verilen satınalma siparişlerin sayısını döndürür 164, 198, 223, 231, ve 233, kategorilere göre satıcı kimliği.

USE AdventureWorks2008R2;
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;

İşte bir kısmi sonuç kümesi:

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

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

--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

İşte bir kısmi sonuç kümesi:

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