Transact-SQL ()

Tablolar, görünümler, tablolar türetilmiş ve birleştirilmiş tablo ifadeleri UPDATE ve DELETE SELECT, kullanılan belirtir.SELECT, deyim, seçim listesi yalnızca sabitler, değişkenler ve aritmetik ifadeler (sütun adları) içeren dışında FROM yan tümce gereklidir.

Topic link iconTransact-SQL sözdizimi kuralları

[ 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üretilen tablonun kaynağı veya kullanmak için diğer ad ad olmadan belirtirTransact-SQLdeyim.En çok 256 tablo kaynakları sınırı bellek ve diğer deyimleri sorgu karmaşıklığına bağlı olarak değişir, ancak bir deyimde kullanılabilir.Tek tek sorguların en çok 256 tablo kaynaklarını desteklemiyor olabilir.

    Not

    Çok sayıda sorguda başvurulan tablolar olan sorgu performansı düşebilir.Derleme ve en iyi duruma getirme saat da ek Etkenler tarafından etkilenir.Bu dizinler varlığını içerir ve dizin oluşturulmuş görünümler her<table_source>ve<select_list>deyim.

    The order of table sources after the FROM keyword does not affect the result set that is returned.SQL Server returns errors when duplicate names appear in the FROM clause.

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

    , tablo Görünümü aynı örneğini başka bir veritabanındaki veyaSQL Servertam adı biçiminde kullanınveritabanı.schema.object_name.

    Tabloyu veya görünümü, varolan örnek dışındaSQL Serverl, four-part bir formun adını kullanınlinked_server.catalog.schema.object.Daha fazla bilgi için bkz:sp_addlinkedserver (Transact-SQL).Kullanılarak oluşturulmuş bir four-part adıOPENDATASOURCE belirlenecek uzak tablo kaynak. işlev sunucu adının bir parçası olarak da kullanılabilir OPENDATASOURCE belirtilirdatabase_nameveschema_nameuygulama tüm veri kaynaklarına ve olduğu için özellikleri OLE DB sağlayıcısına erişim, uzak nesne.Daha fazla bilgi için bkz:Dağıtılmış sorgular.

  • [AS]table_alias
    diğer ad ad iş table_sourcekullanılabilecek kolaylığı için veya bir tablo veya Görünüm kendini-ayırt etmek için birleştirmek veya alt sorgu.Sık sık tablo birleştirmek belirli sütunlara başvurmak için kullanılan kısaltılmış bir tablo adı adıdır.Birden çok tablonun, aynı sütun adını bulunmaktadırSQL Serversütun adı olarak bir tablo adı, görünüm adı veya tam gerekir diğer ad ad.diğer ad ad tanımlıysa, tablo adı kullanılamaz.

    Ne zaman türetilmiş tablo, satır kümesi kümesi veya tablo değerli işlev veya (PIVOT veya UNPIVOT) gibi yan işleç kullanıldığında, gereklitable_aliasYan tümcenin sonunda tüm sütunları döndürülen gruplandırma sütunları da dahil olmak üzere, ilişkili tablonun adıdır.

  • (< Table_hint > ile)
    Sorgu iyileştirici bir en iyi duruma getirme veya kilitleme stratejisini Bu tablo ve bu ifadeyi kullandığını belirtir.Daha fazla bilgi için bkz:Tablo ipuçları (Transact-SQL).

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

    Uzak bir nesne belirtmek için OPENROWSET ve OPENQUERY işlevlerini kullanarak nesneyi erişen OLE DB sağlayıcı yeteneklerini bağlıdır.Daha fazla bilgi için bkz:Dağıtılmış sorgular.

  • bulk_column_alias
    İsteğe bağlı diğer ad ad sonuç sütun adını değiştirmek için ayarlandı.Sütun diğer adları yalnızca BULK seçeneği OPENROWSET işlevini kullanan SELECT ifadelerine izin verilir.Kullanırkenbulk_column_aliasbir diğer ad sütunlar aynı sırada bulunan her tablo sütun belirtin dosyasının.

    Not

    , Bu diğer ad ad adın XML biçimi dosyası, sütun öğelerinin, NAME özniteliğinin geçersiz kılar şu.

  • user_defined_function
    Belirtir bir tablo değerli işlev.

  • OPENXML openxml_clause < >
    Bir XML belgesi üzerinde satır kümesi kümesi görünümü sağlar.Daha fazla bilgi için bkz:OPENXML (Transact-SQL).

  • derived_table
    Is a subquery that retrieves rows from the database.derived_table is used as input to the outer query.

    derived_tablekullanabilmek içinTransact-SQLTablo değeri yapıcı özelliği için birden çok satır.Ö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şturucu (Transact-SQL).

  • column_alias
    Sonuç bir sütun adı değiştirmek için isteğe bağlı bir diğer ad ad iş küme türetilen tablonun.Sütun diğer ad ad adları tam listesini ayraç içine alın ve seçim listesinde her sütun için bir sütun diğer ad ad adı içerir.

  • <tablesample_clause>
    Belirleyen bir örnek verileri tablo döndürülür.Örnek yaklaşık olabilir.Bu yan kullanılan herhangi bir birincil veya katılan tablo SELECT, UPDATE veya DELETE deyim içinde.Görünümlerle TABLESAMPLE belirtilemez.Daha fazla bilgi için bkz:TABLESAMPLE kullanarak sonuçları sınırlama ayarlar.

    Not

    Veritabanları için yükseltme karşı TABLESAMPLE kullandığınızdaSQL Server, veritabanının uyumluluk düzey olmalıdır küme 90 veya daha fazla.İçin küme veritabanı uyumluluk düzeyi, bkz:DATABASE uyumluluk düzey (Transact-SQL) ALTER.

  • SYSTEM (Sistem)
    ISO standartları tarafından belirtilen yöntem uygulamasında kullanılan örnekleme iş.InSQL Server, bu yalnızca, örnekleme yöntem kullanılabilir ve uygulandığı varsayılan.Sistem tablo sayfalarından rasgele bir dizi örnek için seçilir ve bu sayfalardaki tüm satırları örnek alt küme küme olarak döndürülen sayfa tabanlı örnekleme yöntem uygulanır.Daha fazla bilgi için bkz:TABLESAMPLE kullanarak sonuçları sınırlama ayarlar.

  • sample_number
    Yüzde veya satır sayısını gösteren tam veya yaklaşık sabit sayısal ifade belirtilir.PERCENT ile belirtilen zamansample_numberiçin dolaylı olarak dönüştürülen birfloatdeğer; aksi halde, bu dönüştürülürbigint.PERCENT varsayılandır.

  • YÜZDE
    Belirleyen birsample_numberTablo satırlarının yüzdesi alınan tablo.PERCENT belirtilmişseSQL Serverbelirtilen yüzde olarak yaklaşık bir verir.PERCENT belirtildiğindesample_numberifade gereken 0 ile 100 arasında bir değer değerlendirilemiyor.

  • SATIR
    Bu yaklaşık olarak belirtirsample_numbersatırlarından alınır.SATIRSAY, belirtilenSQL Serveryaklaşık belirtilen satır sayısını verir., SATIRSAY belirtilirse,sample_numberifade değerlendirilemiyor için'den büyük bir tamsayı olmalıdır sıfır.

  • YİNELENEBİLİR
    Seçili örnek yeniden döndürülebilir gösterir.Belirtilen ile aynırepeat_seed değerSQL Serverdöndürecektir aynı alt küme küme satır kümesi olduğu sürece tüm satırları tablosunda. herhangi bir değişiklik yapıldıFarklı bir ile belirtilen zamanrepeat_seeddeğerSQL Serverbüyük olasılıkla döndürecektir farklı bazı örnek satırların tablo.Tablo aşağıdaki eylemleri değişiklikler kabul edilir: ekleme, güncelleştirme, silme, dizinini yeniden oluşturma, birleştirme ve veritabanı geri yükleme veya ekleme.

  • repeat_seed
    Is a constant integer expression used by SQL Server to generate a random number.repeat_seed is bigint.Ifrepeat_seedbelirtilmemişse,SQL Serverrasgele bir değer atar.Belirli bir içinrepeat_seed değer, örnekleme sonuç aynıdır her zaman, hiçbir değişiklik uygulanıp tablo.The repeat_seed expression must evaluate to an integer greater than zero.

  • <joined_table>
    Bir sonuç mu küme olan iki veya daha fazla tablo ürün.Birden fazla birleşim için biri doğal sırasını değiştirmek için parantez kullanın.

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

  • İÇ
    Döndürülen satırları eşleşen tüm çiftlerini belirtir.Her iki tablodan eşleşmeyen satırları atar.Hiçbir birleştirmek türü belirtildiğinde bu varsayılandır.

  • TAM [DIŞ]
    Bir satırı tablosundan birleştirmek koşulu karşılayan ya da sağa veya sola bulunan belirtir sonuç kümesi, ve diğer tablo ile karşılık gelen çıktı sütunu NULL olarak küme.Bu genellikle tarafından döndürülen tüm satırların yanında olan iç birleşim.

  • SOL [DIŞ]
    birleştirmek koşulu toplantı sol tablodaki tüm satırlar sonuç kümesinde bulunan ve başka bir tablo çıktı sütunları iç birleştirmek tarafından döndürülen tüm satırların yanında NULL olarak ayarlanan belirtir.

  • SAĞ [DIŞ]
    İç birleştirmek tarafından döndürülen tüm satırların yanında diğer tablo ile karşılık gelen çıktı sütunu NULL olarak küme ve birleştirmek koşulu toplantı sağ tablodaki tüm satırlar sonuç kümesinde bulunan belirtir.

  • <join_hint>
    BelirleyenSQL Serversorgu iyileştirici kullanan bir birleştirmek ipucu, ya da yürütme algoritma her birleştirmek belirtilen sorgunun FROM yan tümce.Daha fazla bilgi için bkz:Ipucu (Transact-SQL) katılın..

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

  • < Search_condition > ON
    birleştirmek dayandığı koşulu belirtir.Sütun ve karşılaştırma işleçleri sık sık, örneğin kullanılır, ancak koşul bir karşılaştırma belirtebilirsiniz:

    Sütun koşulunu belirtir, sütunlar aynı veri türüne ve aynı ada sahip gerekmez; veri türleri aynı değilse, ancak bunlar da olmalıdır uyumlu veya türleri,SQL Serveriçin dolaylı olarak.Dolaylı olarak veri türlerine dönüştürülemez, durum açıkça veri türü CONVERT işlev kullanılarak dönüştürmeniz gerekir.

    ON birleştirilmiş tabloda yalnızca birini içeren koşullarına olabilir yan tümce.Sorgu, WHERE yan tümcesinde tür koşullarına da olabilir.Bu tür koşullarına yerleşimini INNER birleştirmeler için bir fark yapmaz, ancak OUTER joins ilgilidir, bunlar farklı bir sonuç neden olabilir.Bunun nedeni, ON yan tümcende koşullarına uygulanır tablo birleştirmek önce ise WHERE yan tümce birleştirmek sonucuna semantically uygulanır.

    Arama koşullarında 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.WHERE yan tümce gibi aynı satırları döndürür, eski stil, olmayan SQL-92-stili bir birleştirmek belirtildi.

  • left_table_source{ARASI | DIŞ} UYGULAMA right_table_source
    Belirleyenright_table_sourceAPPLY karşı her satırı işleç değerlendirilirleft_table_source.Yararlı olduğunda bu işlevselliğiright_table_sourcesütun değerleri alır tablo değerli işlev içerenleft_table_sourcebiri, bağımsız değişken.

    Çapraz veya OUTER APPLY ile belirtilmiş olması gerekir., Çapraz belirtilirse, hiçbir satır üretildiğini,right_table_sourcebelirtilen satır karşı değerlendirilirleft_table_sourceve boş bir sonuç küme.

    , OUTER belirtilirse, her satır için bir satır üretilenleft_table_sourcebileright_table_sourcekarşı satır değerlendirir ve bir boş sonuç döndüren küme.

    Daha fazla bilgi için Açıklamalar bölümüne bakın veAPPLY'ı kullanma.

  • left_table_source
    Önceki değişkeninde tanımlanan tablo kaynak belirtilir.Daha fazla bilgi için Açıklamalar bölümüne bakın.

  • right_table_source
    Önceki değişkeninde tanımlanan tablo kaynak belirtilir.Daha fazla bilgi için Açıklamalar bölümüne bakın.

  • table_sourcePIVOT<pivot_clause>
    Specifies that the table_source is pivoted based on the pivot_column.table_source is a table or table expression.Çıktı, tüm sütunları içeren bir tablo olantable_sourcedışındapivot_columnvevalue_column.Sütunlarınıtable_source, dışındapivot_columnvevalue_columnverilir gruplama sütunu Özet işleç.

    PIVOT bir gruplama sütunu ilgili giriş tablosuna ile gruplandırma işlemi yapar ve her grup için bir satır döndürür.Ayrıca, çıktıyı belirtilen her değer için bir sütun içerencolumn_listgörünür,pivot_column,input_table.

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

    Not

    PIVOT veritabanları için yükseltme karşı kullanırkenSQL Server, veritabanının uyumluluk düzey 90 veya daha fazla ayarlanması gerekir.Veritabanı uyumluluk düzeyini ayarlama hakkında daha fazla bilgi için bkz:DATABASE uyumluluk düzey (Transact-SQL) ALTER.

  • aggregate_function
    Bir sistem iş veya kullanıcı tanımlı toplamak işlev kabul eden bir veya daha fazla girdi.toplamak işlev İçin null değerler sabit olmalıdır.Bir toplamak işlev null değerlere invariant değil düşünün null değerler gruptaki toplam değeri değerlendirme sırada.

    The COUNT(*) sistem toplamak işlevine izin verilmez.

  • value_column
    PIVOT işlecin değeri sütun kullanılamıyor.UNPIVOT ile kullanıldığındavalue_columnGiriş, varolan sütun adını olamaztable_source.

  • FORpivot_column
    Is the pivot column of the PIVOT operator.pivot_column must be of a type implicitly or explicitly convertible to nvarchar().Bu sütun olamazimageorrowversion.

    Zaman UNPIVOT kullanılır,pivot_columngelen daraltıldığı olur çıktı sütun adıtable_source.Varolan bir sütun olamaztable_sourceBu adı.

  • IN (column_list )
    , PIVOT yan tümce değerleri listelerpivot_columnÇıktı sütun adlarını olacak tablo.Listede bir sütun adı, zaten var, girdi belirtemezsiniztable_source, pivoted.

    yan tümce, UNPIVOT sütunları listelertable_sourcedaraltıldığı içine tek birpivot_column.

  • table_alias
    Is the alias name of the output table.pivot_table_alias must be specified.

  • < Unpivot_clause > UNPIVOT
    Belirleyen giriş tablo birden çok sütun daraltıldığıcolumn_listtek bir sütunda denir.pivot_column.

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

    Not

    Veritabanları için yükseltme karşı UNPIVOT kullandığınızdaSQL Server, veritabanının uyumluluk düzey olmalıdır küme 90 veya daha fazla.İçin küme veritabanı uyumluluk düzeyi, bkz:DATABASE uyumluluk düzey (Transact-SQL) ALTER.

Remarks

FROM yan tümce Birleştirilmiş tablo ve türetilen tablolar için SQL-92 SQL sözdizimini destekler.İşleçler INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER ve çapraz birleştirmek, SQL-92 sözdizimi sağlar.

UNION ve birleştirmek FROM yan tümce içinde görünüm ve türetilen tablolar ve alt sorgular desteklenir.

A iç birleştirmek kendisine katıldığı bir tablodur.Eklediğinizde veya güncelleştirdiğinizde Kendiyle dayalı işlemler FROM yan tümce sırayla izleyin.

Earlier versions of SQL Server support the definition of outer joins that use the *= and =* operators in the WHERE clause.SQL Server version 7.0 supports the ISO standard.Bu birleştirmek işleçleri FROM yan tümcesinde sağlar.Veritabanı uyumluluk düzeyini olduğunda küme 90 veya daha fazla, dış birleştirmek işleçleri (* = ve = *) desteklenmez.

ÇünküSQL Serverdikkate alır, dağıtım ve önem istatistikleri alınan bağlı sütun dağılım istatistiklerini sağlayan sunucular, REMOTE birleştirmek İpucu birleştirmek uzaktan değerlendirme zorlamak için gerekli değildir.The SQL Server query processor considers remote statistics and determines whether a remote-join strategy is appropriate.REMOTE birleştirmek İpucu sütun dağılım istatistiklerini 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ğılım istatistiklerini gereksinimleri.

Birleşim, çalışmak hakkında daha fazla bilgi için bkz:Temelleri katılın.veBirleşimler kullanma.

APPLY'ı kullanma

Her iki sağ ve sol işlenen, APPLY işleç tablo deyimleridir.Bu işlenen arasındaki temel fark olanright_table_sourcebir sütundan alan tablo değerli işlev kullanarakleft_table_sourcebir bağımsız değişken işlev.The left_table_source can include table-valued functions, but it cannot contain arguments that are columns from the right_table_source.

The APPLY işleç çalışır FROM yan tümce için tablo kaynak oluşturmak için aşağıdaki şekilde:

  1. Sonucuright_table_sourceher satırının karşıleft_table_sourceoluşturmak için satır kümeleri.

    The values in the right_table_source depend on left_table_source.right_table_source can be represented approximately this way: TVF(left_table_source.row)Burada,TVFbir tablo değerli işlev.

  2. Her satırı değerlendirme için üretilen sonuç kümelerini birleştirirright_table_sourceileleft_table_sourceolarak gerçekleştirme UNION ALL bir işlem.

    APPLY işlecinin sonucu oluşturulan sütunlar listesi küme sütunlar,left_table_sourcesütun listesi ile birlikteright_table_source.

PIVOT UNPIVOT ile

The pivot_column and value_column are grouping columns that are used by the PIVOT operator.PIVOT çıktı sonuç kümesi elde etmek için aşağıdaki işlemi aşağıdaki gibidir:

  1. GROUP BY gerçekleştirir,input_tableüretir ve gruplandırma sütunlar karşı bir çıkış satırına her grup.

    Çıkış satır gruplama sütun alanındaki bir grubun karşılık gelen sütun değerleri eldeinput_table.

  2. Aşağıdakileri yaparak sütun değerlerinin her çıktı satırının sütun listesi oluşturur:

    1. Ayrıca, GROUP BY karşı önceki adımda oluşturulan satırları gruplandırmapivot_column.

      Çıkış her sütun içincolumn_list, koşulu karşılayan bir alt seçme:

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

    2. aggregate_functiongöre değerlendirilirvalue_columnBu alt ve sonucu döndürülür, buna karşılık gelen değer olarakoutput_column.Alt işlemi nullSQL Serveriçin null bir değer oluşturur.output_column.COUNT toplamak işlevidir ve alt boş ise, sıfır (0) verilir.

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

İzinler

İzinler için DELETE, SELECT veya UPDATE deyim gerektirir.

Örnekler

C.Kullanarak basit bir FROM yan tümce

Aşağıdaki örnek alanTerritoryIDveNamesütunSalesTerritory, tabloAdventureWorksörnek veritabanı.

Here is the result set.

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 İpuçları'nı kullanma

Aşağıdaki kısmi hareket gösterir nasıl yerleştirileceği bir açık paylaşılan tablo kilitEmployeeve nasıl okunur dizin.kilit, tüm işlem tutulur.

C.SQL-92 çapraz birleştirmek sözdizimini kullanarak

Aşağıdaki örnek, iki çapraz çarpımı verirEmployeeveDepartment.Tüm olası birleşimlerini listesiEmployeeIDsatırları ve tümDepartment adı satır döndürdü.

D.SQL-92 tam dış birleştirmek söz dizimini kullanarak

Aşağıdaki örnek, ürün adı ve ilgili tüm satış siparişlerini verirSalesOrderDetailTablo.Listelenen herhangi bir ürüne sahip tüm satış siparişlerini verir...ProductTablo ve ürünlerden farklı olarak listelenen bir satış siparişi ileProductTablo.

E.SQL-92 LEFT dış birleştirmek sözdizimini kullanarak

Aşağıdaki örnek birleşim iki tablonun üzerindeProductIDve korur eşleşmeyen satırları sol tablo.The Product table is matched with the SalesOrderDetail table on the ProductID columns in each table.Tüm ürünler, sipariş ve sipariş değil, sonuçta görünen küme.

F.SQL-92 kullanarak iç birleşim sözdizimi

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

G.SQL-92 RIGHT dış birleştirmek sözdizimini kullanarak

Aşağıdaki örnek birleşim iki tablonun üzerindeTerritoryIDve korur eşleşmeyen satırları sağ tablo.The SalesTerritory table is matched with the SalesPerson table on the TerritoryID column in each table.Bir bölgeye atanmış olup olmadığını tüm alfabetik sonuç kümesinde görüntülenir.

H.HASH ve birleştirmek birleştirmek ipuçlarını kullanma

Aşağıdaki örnek üç tablo arasında birleştirmek yapanProduct,ProductVendor, veVendorürünler ve listesini oluşturmak için tabloları onların satıcıları.Sorgu iyileştirici birleşimlerProductvekullanarak bir BİRLEŞTİRMEYİ birleştirmek. ProductVendor(pandpv)Sonraki sonuçlarProductveProductVendorbirleştirmek birleştirmek ( pve pv) için HASH katılanVendoroluşturmak için tablo ( pve pv) vev.

Important noteImportant Note:

Sonra bir birleştirmek İpucu belirtilmişse, INNER anahtar sözcüğü isteğe bağlıdır ve bir INNER gerçekleştirilecek birleştirmek için açıkça belirtilmelidir.

I.Türetilmiş bir tablo kullanma

Aşağıdaki örnekte türetilmiş bir tablo kullanan birSELECTbildiriFROMtüm çalışanlar, Canlı Şehir, ad ve soyadları geri dönmek için yan tümce.

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

Aşağıdaki örnekTABLESAMPLE,FROMyan yaklaşık geri dönmek için10tüm satırlarda, tamamlananCustomer, tabloAdventureWorksveritabanı.

K.APPLY'ı kullanma

Aşağıdaki örnekte, aşağıdaki şema ile aşağıdaki tabloda veritabanında varolan kabul eder:

  • Departments: DeptID, DivisionID, DeptName, DeptMgrID

  • EmpMgr: MgrID, EmpID

  • Employees: EmpID, EmpLastName, EmpFirstName, EmpSalary

Ayrıca bir tablo deerli işlev vardır.GetReports(MgrID), tüm çalışanların listesini verir ( EmpID, EmpLastName, EmpSalary), rapor doğrudan veya dolaylı olarak belirtilenMgrID.

Bu örnek kullanırAPPLYiçin iade tüm bölümler ve tüm çalışanların bu bölüm.Tüm çalışanların belirli bir bölüm yoksa, bu bölüm için verilen tüm satırları olmayacak.

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

Olmadan null değerleri oluşturacak çalışanlar, bu bölümler için satır oluşturmak için sorgu istersenizEmpID,EmpLastNameveEmpSalarysütunları kullanmaOUTER APPLYyerine.

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

L.PIVOT UNPIVOT ile

Aşağıdaki örnek yerleştirilmiş olarak çalışan kimliklerini satınalma siparişlerinin sayısını verir164,198,223,231, ve233kategorilere göre satıcı kimliği,

Kısmi bir sonuç işte küme:

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

Unpivot tablo için sonuç kabul küme üretilen önceki örnek olarak depolananpvt.Sorguyu aşağıdaki gibi görünür.

Kısmi bir sonuç işte küme:

VendorID çalışan siparişler

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

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