FROM yan tümcesi artı JOIN, APPLY, PIVOT (Transact-SQL)
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL VeritabanıAzure Sql Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft FabricAmbarı'ndaki SQL analiz uç noktasıMicrosoft Fabric
Transact-SQL'de FROM yan tümcesi aşağıdaki deyimlerde kullanılabilir:
- DELETE
- update
- SELECT
FROM yan tümcesi genellikle SELECT deyiminde gereklidir. Bunun istisnası, hiçbir tablo sütunu listelenmediğinde ve listelenen öğelerin yalnızca değişmez değerler, değişkenler veya aritmetik ifadeler olmasıdır.
Bu makalede, FROM yan tümcesinde kullanılabilecek aşağıdaki anahtar sözcükler de ele alınmaktadır:
- JOIN
- UYGULAMAK
- PIVOT
Transact-SQL söz dizimi kuralları
Sözdizimi
SQL Server, Azure SQL Veritabanı ve Doku SQL veritabanı söz dizimi:
[ FROM { <table_source> } [ , ...n ] ]
<table_source> ::=
{
table_or_view_name [ FOR SYSTEM_TIME <system_time> ] [ [ 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 ]
<system_time> ::=
{
AS OF <date_time>
| FROM <start_date_time> TO <end_date_time>
| BETWEEN <start_date_time> AND <end_date_time>
| CONTAINED IN (<start_date_time> , <end_date_time>)
| ALL
}
<date_time>::=
<date_time_literal> | @date_time_variable
<start_date_time>::=
<date_time_literal> | @date_time_variable
<end_date_time>::=
<date_time_literal> | @date_time_variable
Paralel Veri Ambarı, Azure Synapse Analytics söz dizimi:
FROM { <table_source> [ , ...n ] }
<table_source> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias
[ <tablesample_clause> ]
| derived_table [ AS ] table_alias [ ( column_alias [ , ...n ] ) ]
| <joined_table>
}
<tablesample_clause> ::=
TABLESAMPLE ( sample_number [ PERCENT ] ) -- Azure Synapse Analytics Dedicated SQL pool only
<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 ] [ <join hint> ] JOIN
| LEFT [ OUTER ] JOIN
| RIGHT [ OUTER ] JOIN
| FULL [ OUTER ] JOIN
<join_hint> ::=
REDUCE
| REPLICATE
| REDISTRIBUTE
Microsoft Fabric söz dizimi:
FROM { <table_source> [ , ...n ] }
<table_source> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias
| derived_table [ AS ] table_alias [ ( column_alias [ , ...n ] ) ]
| <joined_table>
}
<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 ] [ <join hint> ] JOIN
| LEFT [ OUTER ] JOIN
| RIGHT [ OUTER ] JOIN
| FULL [ OUTER ] JOIN
<join_hint> ::=
REDUCE
| REPLICATE
| REDISTRIBUTE
Bağımsız değişken
<table_source>
Transact-SQL deyiminde kullanılacak bir tablo, görünüm, tablo değişkeni veya türetilmiş tablo kaynağını diğer adla veya diğer ad olmadan belirtir. Bir deyimde en fazla 256 tablo kaynağı kullanılabilir, ancak sınır kullanılabilir belleğe ve sorgudaki diğer ifadelerin karmaşıklığına bağlı olarak değişir. Tek tek sorgular en fazla 256 tablo kaynağını desteklemeyebilir.
Not
Sorgu performansı, sorguda başvuruda bulunan çok sayıda tabloyla karşılaşabilir. Derleme ve iyileştirme süresi de ek faktörlerden etkilenir. Bunlar, her <table_source> dizinlerin ve dizinlenmiş görünümlerin varlığını ve SELECT deyimindeki <select_list> boyutunu içerir.
FROM anahtar sözcüğünden sonraki tablo kaynaklarının sırası, döndürülen sonuç kümesini etkilemez. SQL Server, FROM yan tümcesinde yinelenen adlar görüntülendiğinde hatalar döndürür.
table_or_view_name
Tablo veya görünümün adı.
Tablo veya görünüm aynı SQL Server örneğindeki başka bir veritabanında varsa,veritabanı
Tablo veya görünüm SQL Serverl örneğinin dışındaysa,
[AS] table_alias
table_source için kolaylık sağlamak ya da bir tabloyu veya görünümü kendi kendine birleştirme veya alt sorguda ayırt etmek için kullanılabilecek bir diğer ad. Diğer ad genellikle birleşimdeki tabloların belirli sütunlarına başvurmak için kullanılan kısaltılmış tablo adıdır. Birleştirmede birden fazla tabloda aynı sütun adı varsa, SQL Server bu sütunları ayırt etmek için sütun adının bir tablo adı, görünüm adı veya diğer adla nitelenmiş olmasını gerektirebilir. Bir diğer ad tanımlanmışsa tablo adı kullanılamaz.
Türetilmiş bir tablo, satır kümesi veya tablo değerli işlev ya da işleç yan tümcesi (PIVOT veya UNPIVOT gibi) kullanıldığında, yan tümcenin sonunda gerekli table_alias, döndürülen sütunları gruplandırma da dahil olmak üzere tüm sütunlar için ilişkili tablo adıdır.
WITH (<table_hint> )
Sorgu iyileştiricisinin bu tablo ve bu deyim için bir iyileştirme veya kilitleme stratejisi kullandığını belirtir. Daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).
rowset_function
için geçerlidir: SQL Server ve SQL Veritabanı.
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 işlevlerinin listesi hakkında daha fazla bilgi için bkz.
Uzak bir nesne belirtmek için OPENROWSET ve OPENQUERY işlevlerinin kullanılması, nesneye erişen OLE DB sağlayıcısının özelliklerine bağlıdır.
bulk_column_alias
için geçerlidir: SQL Server ve SQL Veritabanı.
Sonuç kümesindeki bir sütun adını değiştirmek için isteğe bağlı bir diğer ad. Sütun diğer adlarına yalnızca BULK seçeneğiyle OPENROWSET işlevini kullanan SELECT deyimlerinde izin verilir. bulk_column_aliaskullandığınızda, dosyadaki sütunlarda olduğu gibi her tablo sütunu için bir diğer ad belirtin.
Not
Bu diğer ad, varsa XML biçim dosyasının COLUMN öğelerinde NAME özniteliğini geçersiz kılar.
user_defined_function
Tablo değerli bir işlev belirtir.
OPENXML <openxml_clause>
için geçerlidir: SQL Server ve SQL Veritabanı.
XML belgesi üzerinde satır kümesi görünümü sağlar. Daha fazla bilgi için bkz. OPENXML (Transact-SQL).
derived_table
Veritabanından satır alan bir alt sorgu. derived_table dış sorguya giriş olarak kullanılır.
derived_table birden çok satır belirtmek için Transact-SQL tablo değeri oluşturucu özelliğini kullanabilir. Ö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
Türetilmiş tablonun sonuç kümesindeki sütun adını değiştirmek için isteğe bağlı bir diğer ad. Seçme listesindeki her sütun için bir sütun diğer adı ekleyin ve sütun diğer adlarının tam listesini parantez içine alın.
SYSTEM_TIME <system_time> için table_or_view_name
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve SQL Veritabanı.
Belirtilen zamansal tablodan ve bağlı sistem sürümü geçmiş tablosundan belirli bir veri sürümünün döndürüldüğünü belirtir
TABLESAMPLE yan tümcesi
için geçerlidir: SQL Server, SQL Veritabanı ve Azure Synapse Analytics ayrılmış SQL havuzları
Tablodan bir veri örneğinin döndürüldüğünü belirtir. Örnek yaklaşık olabilir. Bu yan tümce, SELECT veya UPDATE deyimindeki herhangi bir birincil veya birleştirilmiş tabloda kullanılabilir. TABLESAMPLE görünümlerle belirtilemiyor.
Not
SQL Server'a yükseltilen veritabanlarında TABLESAMPLE kullandığınızda, veritabanının uyumluluk düzeyi 110 veya üzeri olarak ayarlanır; özyinelemeli ortak tablo ifadesi (CTE) sorgusunda PIVOT'a izin verilmez. Daha fazla bilgi için bkz. ALTER DATABASE Uyumluluk Düzeyi (Transact-SQL)
SİSTEM
ISO standartları tarafından belirtilen uygulamaya bağımlı örnekleme yöntemi. SQL Server'da, bu kullanılabilir tek örnekleme yöntemidir ve varsayılan olarak uygulanır. SYSTEM, örnek için tablodan rastgele bir sayfa kümesinin seçildiği ve bu sayfalardaki tüm satırların örnek alt kümesi olarak döndürüldiği sayfa tabanlı örnekleme yöntemini uygular.
sample_number
Satır yüzdesini veya sayısını temsil eden tam veya yaklaşık sabit sayısal ifade. YÜZDE ile belirtildiğinde, sample_number örtük olarak bir float değerine dönüştürülür; aksi takdirde, bigintdönüştürülür. YÜZDE varsayılan değerdir.
YÜZDE
Tablodaki satırların sample_number yüzdesinin tablodan alınması gerektiğini belirtir. YÜZDE belirtildiğinde, SQL Server belirtilen yüzdenin yaklaşık bir değerini döndürür. YÜZDE belirtildiğinde, sample_number ifadesi 0 ile 100 arasındaki bir değere değerlendirilmelidir.
SATIR
Yaklaşık sample_number satır alındığını belirtir. SATIRLAR belirtildiğinde, SQL Server belirtilen satır sayısının yaklaşık değerini döndürür. SATIRSAY belirtildiğinde, sample_number ifadesi sıfırdan büyük bir tamsayı değeri olarak değerlendirilmelidir.
TEKRARLANABİLİR
Seçilen örneğin yeniden döndürülebileceğini gösterir. Aynı repeat_seed değeriyle belirtildiğinde, tablodaki herhangi bir satırda değişiklik yapılmamış olduğu sürece SQL Server aynı satır alt kümesini döndürür. Farklı bir repeat_seed değeriyle belirtildiğinde, SQL Server büyük olasılıkla tablodaki satırların farklı bir örneğini döndürür. Tablodaki aşağıdaki eylemler değişiklik olarak kabul edilir: ekleme, güncelleştirme, silme, dizin yeniden derleme veya birleştirme ve veritabanı geri yükleme veya ekleme.
repeat_seed
SQL Server tarafından rastgele bir sayı oluşturmak için kullanılan sabit bir tamsayı ifadesi. repeat_seedbigint. repeat_seed belirtilmezse, SQL Server rastgele bir değer atar. Belirli bir repeat_seed değeri için, tabloya hiçbir değişiklik uygulanmadıysa örnekleme sonucu her zaman aynıdır. repeat_seed ifadesi sıfırdan büyük bir tamsayı olarak değerlendirilmelidir.
Birleştirilmiş tablo
Birleştirilmiş tablo, iki veya daha fazla tablonun ürünü olan bir sonuç kümesidir. Birden çok birleşim için birleştirmelerin doğal sırasını değiştirmek için parantezleri kullanın.
Birleştirme türü
Birleştirme işleminin türünü belirtir.
İÇ
Eşleşen tüm satır çiftlerinin döndürülür olduğunu belirtir. Her iki tablodan eşleşmeyen satırları atar. Birleştirme türü belirtilmediğinde, bu varsayılan değerdir.
FULL [ OUTER ]
Sol veya sağ tablodan birleştirme koşuluna uymayan bir satırın sonuç kümesine dahil olduğunu ve diğer tabloya karşılık gelen çıkış sütunlarının NULL olarak ayarlandığını belirtir. Bu, genellikle INNER JOIN tarafından döndürülen tüm satırlara ek olarak yapılır.
SOL [ DıŞ ]
Sol tablodaki birleştirme koşuluyla eşleşmeyen tüm satırların sonuç kümesine dahil olduğunu ve diğer tablodaki çıkış sütunlarının iç birleşim tarafından döndürülen tüm satırlara ek olarak NULL olarak ayarlandığını belirtir.
SAĞ [ DıŞ ]
Sağ tablodaki birleştirme koşuluna uygun olmayan tüm satırların sonuç kümesine dahil olduğunu ve diğer tabloya karşılık gelen çıkış sütunlarının iç birleşim tarafından döndürülen tüm satırlara ek olarak NULL olarak ayarlandığını belirtir.
Birleştirme ipucu
SQL Server ve SQL Veritabanı için, SQL Server sorgu iyileştiricisinin FROM sorgusu yan tümcesinde belirtilen birleştirme başına bir birleştirme ipucu veya yürütme algoritması kullandığını belirtir. Daha fazla bilgi için bkz. Birleştirme İpuçları (Transact-SQL).
Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için bu birleştirme ipuçları, iki dağıtım uyumsuz sütundaki INNER birleşimleri için geçerlidir. Sorgu işleme sırasında gerçekleşen veri taşıma miktarını kısıtlayarak sorgu performansını geliştirebilirler. Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için izin verilebilen birleştirme ipuçları şunlardır:
AZALTMAK
Uyumlu olmayan iki dağıtımı uyumlu hale getirmek için birleştirmenin sağ tarafındaki tablo için taşınacak satır sayısını azaltır. REDUCE ipucu, yarı birleştirme ipucu olarak da adlandırılır.
ÇOĞALTMAK
Birleştirmenin sağ tarafındaki tablodan birleştirme sütunundaki değerlerin tüm düğümlere çoğaltılmasına neden olur. Soldaki tablo, bu sütunların çoğaltılmış sürümüne katılır.
DAĞITA
İki veri kaynağını JOIN yan tümcesinde belirtilen sütunlara dağıtılmaya zorlar. Dağıtılmış bir tablo için Analiz Platformu Sistemi (PDW) karıştırma hareketi gerçekleştirir. Çoğaltılan bir tablo için Analiz Platformu Sistemi (PDW) kırpma hareketi gerçekleştirir. Bu taşıma türlerini anlamak için,
BİRLEŞTİRMEK
Belirtilen birleştirme işleminin belirtilen tablo kaynakları veya görünümleri arasında gerçekleşmesi gerektiğini gösterir.
ON <search_condition>
Birleştirmenin temel aldığı koşulu belirtir. Sütunlar ve karşılaştırma işleçleri sık kullanılır, ancak koşul herhangi bir koşulu belirtebilir, örneğin:
SELECT p.ProductID,
v.BusinessEntityID
FROM Production.Product AS p
INNER JOIN Purchasing.ProductVendor AS v
ON (p.ProductID = v.ProductID);
Koşul sütunları belirttiğinde, sütunların aynı ada veya aynı veri türüne sahip olması gerekmez; ancak veri türleri aynı değilse, bunların uyumlu olması veya SQL Server'ın örtük olarak dönüştürebileceği türler olması gerekir. Veri türleri örtük olarak dönüştürülemiyorsa, koşulun CONVERT işlevini kullanarak veri türünü açıkça dönüştürmesi gerekir.
ON yan tümcesinde birleştirilmiş tablolardan yalnızca birini içeren koşul olabilir. Bu tür önkoşullar sorgudaki WHERE yan tümcesinde de olabilir. Bu tür önkoşulların yerleştirilmesi INNER birleşimleri için bir fark oluşturmasa da, OUTER birleşimleri söz konusu olduğunda farklı bir sonuca neden olabilir. Bunun nedeni, ON yan tümcesindeki önkoşulların birleştirmeden önce tabloya uygulanması, WHERE yan tümcesinin ise birleştirmenin sonucuna adsal olarak uygulanmasıdır.
Arama koşulları ve koşulları hakkında daha fazla bilgi için bkz. Arama Koşulu (Transact-SQL).
ÇAPRAZ BIRLEŞTIRME
İki tablonun çapraz çarpımını belirtir. ESKI stilde, SQL-92 stili olmayan bir birleşimde WHERE yan tümcesi belirtilmemiş gibi aynı satırları döndürür.
left_table_source { CROSS | OUTER } APPLY right_table_source
APPLY işlecinin right_table_sourceleft_table_sourceher satırında değerlendirildiğini belirtir. bu işlev, right_table_source bağımsız değişkenlerinden biri olarak left_table_source sütun değerlerini alan tablo değerli bir işlev içerdiğinde kullanışlıdır.
APPLY ile CROSS veya OUTER belirtilmelidir. CROSS belirtildiğinde, right_table_source belirtilen left_table_source satırına göre değerlendirildiğinde ve boş bir sonuç kümesi döndürdüğünde hiçbir satır üretilmez.
OUTER belirtildiğinde, right_table_source bu satıra göre değerlendirildiğinde ve boş bir sonuç kümesi döndürdüğünde bile left_table_source her satırı için bir satır oluşturulur.
Daha fazla bilgi için Açıklamalar bölümüne bakın.
left_table_source
Önceki bağımsız değişkende tanımlandığı gibi bir tablo kaynağı. Daha fazla bilgi için Açıklamalar bölümüne bakın.
right_table_source
Önceki bağımsız değişkende tanımlandığı gibi bir tablo kaynağı. Daha fazla bilgi için Açıklamalar bölümüne bakın.
PIVOT yan tümcesi
PIVOT <pivot_clause>table_source
table_sourcepivot_columntemel alınarak özetlendiğini belirtir.
table_source bir tablo veya tablo ifadesidir. Çıktı, pivot_column ve value_columndışında table_source tüm sütunlarını içeren bir tablodur.
pivot_column ve value_columndışındaki table_sourcesütunları pivot işlecinin gruplandırma sütunları olarak adlandırılır. PIVOT ve UNPIVOT hakkında daha fazla bilgi için bkz. PIVOT ve UNPIVOT kullanma
PIVOT, giriş tablosunda gruplandırma sütunlarıyla ilgili olarak bir gruplandırma işlemi gerçekleştirir ve her grup için bir satır döndürür. Ayrıca çıktı, input_tablepivot_column görüntülenen column_list belirtilen her değer için bir sütun içerir.
Daha fazla bilgi için aşağıdaki Açıklamalar bölümüne bakın.
aggregate_function
Bir veya daha fazla girişi kabul eden sistem veya kullanıcı tanımlı toplama işlevi. Toplama işlevi null değerlere sabit olmalıdır. Null değerlere sabit bir toplama işlevi, toplama değerini değerlendirirken gruptaki null değerleri dikkate almaz.
COUNT(*) sistem toplama işlevine izin verilmez.
value_column
PIVOT işlecinin değer sütunu. UNPIVOT ile kullanıldığında, value_column giriş table_sourcevarolan bir sütunun adı olamaz.
FOR pivot_column
PIVOT işlecinin özet sütunu. pivot_column örtük veya açıkça nvarchar()dönüştürülebilir türünde olmalıdır. Bu sütun görüntü veya rowversionolamaz.
UNPIVOT kullanıldığında, pivot_columntable_sourcedaraltılan çıkış sütununun adıdır. table_source'da bu ada sahip bir sütun olamaz.
IN ( column_list )
PIVOT yan tümcesinde, çıkış tablosunun sütun adları haline gelen pivot_column değerleri listeler. Liste, özetlenen giriş table_source zaten var olan sütun adlarını belirtemez.
UNPIVOT yan tümcesinde, tek bir pivot_columndaraltılmış table_source sütunlarını listeler.
table_alias
Çıkış tablosunun diğer adı. pivot_table_alias belirtilmelidir.
UNPIVOT <unpivot_clause>
Giriş tablosunun column_list içindeki birden çok sütundan pivot_columnadlı tek bir sütuna daraltıldığını belirtir. PIVOT ve UNPIVOT hakkında daha fazla bilgi için bkz. PIVOT ve UNPIVOT kullanma
<date_time> ITIBARIYLE
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve SQL Veritabanı.
Geçmişte belirtilen noktada gerçek (geçerli) değerleri içeren her satır için tek kayıt içeren bir tablo döndürür. Dahili olarak, zamansal tablo ile geçmiş tablosu arasında bir birleşim gerçekleştirilir ve sonuçlar, <date_time> parametresi tarafından belirtilen zaman noktasında geçerli olan satırdaki değerleri döndürecek şekilde filtrelenir. bir satırın değeri, system_start_time_column_name değeri <date_time> parametre değerinden küçük veya buna eşitse ve system_end_time_column_name değeri <date_time> parametre değerinden büyükse geçerli kabul edilir.
FROM <start_date_time> TO <end_date_time>
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve SQL Veritabanı.
FROM bağımsız değişkeninin <start_date_time> parametre değerinden önce etkin olmaya başlamasına veya KIME bağımsız değişkeninin <end_date_time> parametre değerinden sonra etkin olmayı durdurmasına bakılmaksızın, belirtilen zaman aralığında etkin olan tüm kayıt sürümlerinin değerlerini içeren bir tablo döndürür. Dahili olarak, geçici tablo ile geçmiş tablosu arasında bir birleşim gerçekleştirilir ve sonuçlar, belirtilen zaman aralığı boyunca herhangi bir zamanda etkin olan tüm satır sürümlerinin değerlerini döndürecek şekilde filtrelenir. FROM uç noktası tarafından tanımlanan alt sınırda tam olarak etkin hale gelen satırlar dahil edilir ve tam olarak TO uç noktası tarafından tanımlanan üst sınırda etkin hale gelen satırlar dahil değildir.
BETWEEN <start_date_time> AND <end_date_time>
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve SQL Veritabanı.
FROM <start_date_time> TO <end_date_time> açıklamasında yukarıdakiyle aynıdır, ancak <end_date_time> uç noktası tarafından tanımlanan üst sınırda etkin hale gelen satırları içerir.
İÇERİKİ (<start_date_time> , <end_date_time>)
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve SQL Veritabanı.
CONTAINED IN bağımsız değişkeni için iki tarih saat değeri tarafından tanımlanan belirtilen zaman aralığında açılmış ve kapatılmış tüm kayıt sürümlerinin değerlerini içeren bir tablo döndürür. Tam olarak alt sınırda etkin hale gelen veya tam olarak üst sınırda etkin olmayı durduran satırlar eklenir.
TÜM
Hem geçerli tablo hem de geçmiş tablosundaki tüm satırlardan değerleri içeren bir tablo döndürür.
Açıklamalar
FROM yan tümcesi, birleştirilmiş tablolar ve türetilmiş tablolar için SQL-92 söz dizimini destekler. SQL-92 söz dizimi INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER ve CROSS join işleçlerini sağlar.
FROM yan tümcesi içindeki UNION ve JOIN, görünümlerde ve türetilmiş tablolarda ve alt sorgularda desteklenir.
Kendi kendine birleştirme, kendisiyle birleştirilen bir tablodur. Kendi kendine birleştirmeyi temel alan ekleme veya güncelleştirme işlemleri FROM yan tümcesindeki sırayı izler.
SQL Server, sütun dağıtım istatistikleri sağlayan bağlı sunuculardan dağıtım ve kardinalite istatistiklerini dikkate alındığından, bir birleştirmeyi uzaktan değerlendirmeye zorlamak için REMOTE join ipucu gerekli değildir. SQL Server sorgu işlemcisi uzak istatistikleri dikkate alır ve uzaktan birleştirme stratejisinin uygun olup olmadığını belirler. UZAK birleştirme ipucu, sütun dağıtım istatistikleri sağlamayan sağlayıcılar için kullanışlıdır.
APPLY kullanma
APPLY işlecinin hem sol hem de sağ işlenenleri tablo ifadeleridir. Bu işlenenler arasındaki temel fark, right_table_source işlevin bağımsız değişkenlerinden biri olarak left_table_source sütun alan tablo değerli bir işlev kullanabilmesidir. left_table_source tablo değerli işlevler içerebilir, ancak right_table_sourcesütun olan bağımsız değişkenleri içeremez.
APPLY işleci, FROM yan tümcesi için tablo kaynağını oluşturmak için aşağıdaki şekilde çalışır:
Satır kümeleri oluşturmak için left_table_source her satırı için right_table_source değerlendirir.
right_table_source değerleri left_table_sourcebağlıdır. right_table_source yaklaşık olarak şu şekilde gösterilebilir:
TVF(left_table_source.row)
, buradaTVF
tablo değerli bir işlevdir.UNION ALL işlemi gerçekleştirerek right_table_source değerlendirmesinde her satır için oluşturulan sonuç kümelerini left_table_source ile birleştirir.
APPLY işlecinin sonucuyla oluşturulan sütunların listesi, right_table_sourcesütun listesiyle birleştirilen left_table_source sütun kümesidir.
PIVOT ve UNPIVOT kullanma
pivot_column ve value_column PIVOT işleci tarafından kullanılan sütunları gruplandırıyor. PIVOT, çıkış sonuç kümesini almak için aşağıdaki işlemi izler:
Gruplandırma sütunlarında input_table bir GROUP BY gerçekleştirir ve her grup için bir çıkış satırı oluşturur.
Çıkış satırındaki gruplandırma sütunları, input_tableilgili grup için karşılık gelen sütun değerlerini alır.
Aşağıdaki işlemleri gerçekleştirerek her çıkış satırı için sütun listesindeki sütunlar için değerler oluşturur:
Ayrıca, önceki adımda GROUP BY içinde oluşturulan satırları pivot_columnile gruplandırma.
column_listiçindeki her çıkış sütunu için koşulu karşılayan bir alt grup seçin:
pivot_column = CONVERT(<data type of pivot_column>, 'output_column')
aggregate_function bu alt gruptaki value_column karşı değerlendirilir ve sonucu ilgili output_columndeğeri olarak döndürülür. Alt grup boşsa, SQL Server bu output_columniçin null bir değer oluşturur. Toplama işlevi BAĞ_DEĞ_SAY ve alt grup boşsa sıfır (0) döndürülür.
Not
UNPIVOT
yan tümcesindeki sütun tanımlayıcıları katalog harmanlamasını izler. SQL Veritabanı için harmanlama her zaman SQL_Latin1_General_CP1_CI_AS
. SQL Server kısmen kapsanan veritabanları için harmanlama her zaman Latin1_General_100_CI_AS_KS_WS_SC
. Sütun diğer sütunlarla birleştirilirse çakışmaları önlemek için bir harmanlama yan tümcesi (COLLATE DATABASE_DEFAULT
) gerekir.
Örnekler de dahil olmak üzere PIVOT ve UNPIVOT hakkında daha fazla bilgi için bkz. PIVOT ve UNPIVOTkullanma
İzinler
DELETE, SELECT veya UPDATE deyimi için izinler gerektirir.
Örnekler
A. FROM yan tümcesi kullanma
Aşağıdaki örnek, AdventureWorks2022 örnek veritabanındaki SalesTerritory
tablosundan TerritoryID
ve Name
sütunlarını alır.
SELECT TerritoryID,
Name
FROM Sales.SalesTerritory
ORDER BY TerritoryID;
Sonuç kümesi aşağıdadı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 iyileştirici ipuçlarını kullanma
Aşağıdaki kısmi işlem, Employee
açık bir paylaşılan tablo kilidinin nasıl yerleştirilip dizinin nasıl okunduğu gösterilmektedir. Kilit tüm işlem boyunca tutulur.
BEGIN TRANSACTION
SELECT COUNT(*)
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK);
C. SQL-92 CROSS JOIN söz dizimini kullanma
Aşağıdaki örnek, AdventureWorks2022 veritabanında Employee
ve Department
iki tablonun çapraz çarpımını döndürür.
BusinessEntityID
satırların ve tüm Department
ad satırlarının olası tüm birleşimlerinin listesi döndürülür.
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öz dizimini kullanma
Aşağıdaki örnek, AdventureWorks2022 veritabanındaki SalesOrderDetail
tablosunda ürün adını ve ilgili satış siparişlerini döndürür. Ayrıca, Product
tablosunda ürün listelenmeyen tüm satış siparişlerini ve Product
tablosunda listelenenden başka satış siparişi olan tüm ürünleri döndürür.
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name,
sod.SalesOrderID
FROM Production.Product AS p
FULL JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name;
E. SQL-92 LEFT OUTER JOIN söz dizimini kullanma
Aşağıdaki örnek, ProductID
iki tabloyu birleştirir ve sol tablodaki eşleşmeyen satırları korur.
Product
tablosu, her tablodaki ProductID
sütunlarındaki SalesOrderDetail
tabloyla eşleştirilir. Sipariş edilen ve sipariş edilmeyen tüm ürünler sonuç kümesinde görünür.
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öz dizimini kullanma
Aşağıdaki örnek tüm ürün adlarını ve satış siparişi kimliklerini döndürür.
-- 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Ğ DıŞ BIRLEŞIM söz dizimini kullanma
Aşağıdaki örnek, TerritoryID
iki tabloyu birleştirir ve sağ tablodaki eşleşmeyen satırları korur.
SalesTerritory
tablosu, her tablonun TerritoryID
sütunundaki SalesPerson
tabloyla eşleştirilir. Tüm satış temsilcileri, bir bölgeye atanıp atanmadıklarına bakılmaksızın sonuç kümesinde görünür.
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. HASH ve MERGE birleştirme ipuçlarını kullanma
Aşağıdaki örnek, Product
, ProductVendor
ve Vendor
tabloları arasında üç tablolu birleştirme gerçekleştirerek ürünlerin ve satıcılarının listesini oluşturur. Sorgu iyileştirici, MERGE birleştirmesi kullanarak Product
ve ProductVendor
(p
ve pv
) birleştirir. Daha sonra, Product
ve ProductVendor
MERGE birleştirmesinin (p
ve pv
) sonuçları, üretmek için Vendor
tablosuna KARMA olarak katılır (p
ve pv
) ve v
.
Önemli
Birleştirme ipucu belirtildikten sonra INNER anahtar sözcüğü artık isteğe bağlı değildir ve INNER JOIN'in gerçekleştirilmesi için açıkça belirtilmelidir.
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;
Ben. Türetilmiş tablo kullanma
Aşağıdaki örnek, tüm çalışanların ve bulundukları şehirlerin adlarını ve soyadlarını döndürmek için FROM
yan tümcesinin ardından bir SELECT
deyimi olan türetilmiş bir tablo kullanır.
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. Tablodaki bir satır örneğinden veri okumak için TABLESAMPLE kullanma
Aşağıdaki örnek, Customer
tablosundaki tüm satırların yaklaşık yüzde 10
'sini döndürmek için FROM
yan tümcesindeki TABLESAMPLE
kullanır.
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM(10 PERCENT);
K. APPLY kullanma
Aşağıdaki örnekte, aşağıdaki tabloların ve tablo değerli işlevin veritabanında mevcut olduğu varsayılır:
Nesne Adı | Sütun Adları |
---|---|
Bölüm | DeptID, DivisionID, DeptName, DeptMgrID |
EmpMgr | MgrID, EmpID |
Çalışanlar | EmpID, EmpLastName, EmpFirstName, EmpSalary |
GetReports(MgrID) | EmpID, EmpLastName, EmpSalary |
Tablo değerli GetReports
işlevi, belirtilen MgrID
doğrudan veya dolaylı olarak raporlayan tüm çalışanların listesini döndürür.
Örnek, APPLY
kullanarak ilgili departmandaki tüm departmanları ve tüm çalışanları döndürür. Belirli bir departmanın çalışanı yoksa, söz konusu bölüm için hiçbir satır döndürülemez.
SELECT DeptID,
DeptName,
DeptMgrID,
EmpID,
EmpLastName,
EmpSalary
FROM Departments d
CROSS APPLY dbo.GetReports(d.DeptMgrID);
Sorgunun çalışanları olmayan bölümler için satırlar oluşturmasını istiyorsanız ve bu da EmpID
, EmpLastName
ve EmpSalary
sütunları için null değerler üretecekse, bunun yerine OUTER APPLY
kullanın.
SELECT DeptID,
DeptName,
DeptMgrID,
EmpID,
EmpLastName,
EmpSalary
FROM Departments d
OUTER APPLY dbo.GetReports(d.DeptMgrID);
L. CROSS APPLY kullanma
Aşağıdaki örnek, önbellekteki tüm sorgu planlarının plan tanıtıcılarını almak için sys.dm_exec_cached_plans
dinamik yönetim görünümünü sorgulayarak plan önbelleğinde bulunan tüm sorgu planlarının anlık görüntüsünü alır. Ardından CROSS APPLY
işleci plan tanıtıcılarını sys.dm_exec_query_plan
geçirmek için belirtilir. Şu anda plan önbelleğinde bulunan her plan için XML Showplan çıkışı, döndürülen tablonun query_plan
sütununda yer alır.
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
M. FOR SYSTEM_TIME kullanma
için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve SQL Veritabanı.
Aşağıdaki örnekte, 1 Ocak 2014 itibarıyla gerçek (geçerli) olan tablo satırlarını döndürmek için FOR SYSTEM_TIME AS date_time_literal_or_variable bağımsız değişkeni kullanılır.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME AS OF '2014-01-01'
WHERE ManagerID = 5;
Aşağıdaki örnekte, 1 Ocak 2013'ten başlayıp 1 Ocak 2014 ile biten ve üst sınır dışında olarak tanımlanan dönem boyunca etkin olan tüm satırları döndürmek için FOR SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable bağımsız değişkeni kullanılır.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME FROM '2013-01-01' TO '2014-01-01'
WHERE ManagerID = 5;
Aşağıdaki örnekte FOR SYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variable bağımsız değişkeni, 1 Ocak 2013 ile başlayıp üst sınır dahil 1 Ocak 2014 ile biten dönemde etkin olan tüm satırları döndürmek için kullanılır.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME BETWEEN '2013-01-01' AND '2014-01-01'
WHERE ManagerID = 5;
Aşağıdaki örnek, 1 Ocak 2013 ile başlayıp 1 Ocak 2014 ile biten dönem boyunca açılan ve kapatılan tüm satırları döndürmek için FOR SYSTEM_TIME CONTAINED IN (date_time_literal_or_variable, date_time_literal_or_variable) bağımsız değişkenini kullanır.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME CONTAINED IN ('2013-01-01', '2014-01-01')
WHERE ManagerID = 5;
Aşağıdaki örnek, sorgunun tarih sınırı değerlerini sağlamak için değişmez değer yerine bir değişken kullanır.
DECLARE @AsOfFrom DATETIME2 = DATEADD(month, -12, SYSUTCDATETIME());
DECLARE @AsOfTo DATETIME2 = DATEADD(month, -6, SYSUTCDATETIME());
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME
FROM @AsOfFrom TO @AsOfTo
WHERE ManagerID = 5;
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
N. INNER JOIN söz dizimini kullanma
Aşağıdaki örnek, birleştirme anahtarının ProductKey
her iki tabloda da eşleştiği FactInternetSales
ve DimProduct
tablolarındaki SalesOrderNumber
, ProductKey
ve EnglishProductName
sütunlarını döndürür.
SalesOrderNumber
ve EnglishProductName
sütunlarının her biri yalnızca tablolardan birinde bulunduğundan, gösterildiği gibi bu sütunlarla tablo diğer adını belirtmek gerekmez; bu diğer adlar okunabilirlik için eklenmiştir. Diğer addan önce AS
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
INNER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey;
İç birleşimler için INNER
anahtar sözcüğü gerekli olmadığından, aynı sorgu şu şekilde yazılabilir:
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
INNER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey;
Sonuçları sınırlamak için bu sorguyla bir WHERE
yan tümcesi de kullanılabilir. Bu örnek sonuçları 'SO5000' değerinden daha yüksek SalesOrderNumber
değerlerle sınırlar:
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
INNER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey
WHERE fis.SalesOrderNumber > 'SO50000'
ORDER BY fis.SalesOrderNumber;
O. SOL OUTER JOIN ve SAĞ OUTER JOIN söz dizimini kullanma
Aşağıdaki örnek, ProductKey
sütunlarında FactInternetSales
ve DimProduct
tablolarını birleştirir. Sol dış birleştirme söz dizimi, soldaki (FactInternetSales
) tablodan eşleşmeyen satırları korur.
FactInternetSales
tablosu DimProduct
tablosuyla eşleşmeyen ProductKey
değerleri içermediğinden, bu sorgu bu makalenin önceki bölümlerindeki ilk iç birleştirme örneğiyle aynı satırları döndürür.
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey;
Bu sorgu OUTER
anahtar sözcüğü olmadan da yazılabilir.
Sağ dış birleşimlerde, sağ tablodaki eşleşmeyen satırlar korunur. Aşağıdaki örnek, yukarıdaki sol dış birleşim örneğiyle aynı satırları döndürür.
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
RIGHT OUTER JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
Aşağıdaki sorgu, sol dış birleşimde sol tablo olarak DimSalesTerritory
tablosunu kullanır.
FactInternetSales
tablosundan SalesOrderNumber
değerlerini alır. Belirli bir SalesTerritoryKey
için sipariş yoksa, sorgu bu satıra ait SalesOrderNumber
için NULL döndürür. Bu sorgu SalesOrderNumber
sütununa göre sıralanır, böylece bu sütundaki tüm NUL'ler sonuçların en üstünde görünür.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
LEFT OUTER JOIN FactInternetSales AS fis
ON dst.SalesTerritoryKey = fis.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
Bu sorgu, aynı sonuçları almak için sağ dış birleşimle yeniden yazılabilir:
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM FactInternetSales AS fis
RIGHT OUTER JOIN DimSalesTerritory AS dst
ON fis.SalesTerritoryKey = dst.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
P. FULL OUTER JOIN söz dizimini kullanma
Aşağıdaki örnek, her iki birleştirilmiş tablodaki tüm satırları döndüren ancak diğer tablodan eşleşmeyen değerler için NULL döndüren tam dış birleştirmeyi gösterir.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
FULL JOIN FactInternetSales AS fis
ON dst.SalesTerritoryKey = fis.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
Bu sorgu OUTER
anahtar sözcüğü olmadan da yazılabilir.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
FULL JOIN FactInternetSales AS fis
ON dst.SalesTerritoryKey = fis.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
Q. CROSS JOIN söz dizimini kullanma
Aşağıdaki örnek, FactInternetSales
ve DimSalesTerritory
tablolarının çapraz çarpımını döndürür. tüm olası SalesOrderNumber
ve SalesTerritoryKey
birleşimlerinin listesi döndürülür. Çapraz birleştirme sorgusunda ON
yan tümcesinin olmadığına dikkat edin.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
CROSS JOIN FactInternetSales AS fis
ORDER BY fis.SalesOrderNumber;
R. Türetilmiş tablo kullanma
Aşağıdaki örnek, 1 Ocak 1970'ten sonraki BirthDate
değerleri ve soyadı 'Smith' olan DimCustomer
tablosundaki tüm müşterilerin CustomerKey
ve LastName
sütunlarını döndürmek için türetilmiş bir tablo (FROM
yan tümcesinden sonra SELECT
deyimi) kullanır.
-- Uses AdventureWorks
SELECT CustomerKey,
LastName
FROM (
SELECT *
FROM DimCustomer
WHERE BirthDate > '01/01/1970'
) AS DimCustomerDerivedTable
WHERE LastName = 'Smith'
ORDER BY LastName;
S. REDUCE birleştirme ipucu örneği
Aşağıdaki örnek, türetilmiş tablonun sorgu içinde işlenmesini değiştirmek için REDUCE
birleştirme ipucunu kullanır. Bu sorguda REDUCE
birleştirme ipucu kullanılırken, fis.ProductKey
yansıtılır, çoğaltılır ve ayrı yapılır ve ProductKey
DimProduct
karıştırma sırasında DimProduct
birleştirilir. Elde edilen türetilmiş tablo fis.ProductKey
üzerinde dağıtılır.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REDUCE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
T. ÇOĞALTMA birleştirme ipucu örneği
Bu sonraki örnekte, REDUCE
birleştirme ipucu yerine bir REPLICATE
birleştirme ipucu kullanılması dışında önceki örnekle aynı sorgu gösterilmektedir.
REPLICATE
ipucunun kullanılması, FactInternetSales
tablosundaki ProductKey
(birleştirme) sütunundaki değerlerin tüm düğümlere çoğaltılmasına neden olur.
DimProduct
tablosu, bu değerlerin çoğaltılmış sürümüne katılır.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REPLICATE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
U. Dağıtım uyumsuz birleştirme için Karıştırma taşımasını garanti etmek için DAĞITIM ipucunu kullanın
Aşağıdaki sorgu, uyumsuz bir dağıtım birleştirmesi üzerinde REDISTRIBUTE sorgu ipucunu kullanır. Bu, sorgu iyileştiricisinin sorgu planında Karıştırma taşıması kullanmasını garanti eder. Bu, sorgu planının dağıtılmış tabloyu çoğaltılmış bir tabloya taşıyan Yayın taşıması kullanmayacağını da garanti eder.
Aşağıdaki örnekte, ProductKey DimProduct dağıtım sütunu olduğundan ve FactInternetSales için dağıtım sütunu olmadığından, REDISTRIBUTE ipucu FactInternetSales tablosunda Karıştırma hareketini zorlar.
-- Uses AdventureWorks
SELECT dp.ProductKey,
fis.SalesOrderNumber,
fis.TotalProductCost
FROM DimProduct AS dp
INNER REDISTRIBUTE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
V. Tablodaki bir satır örneğinden veri okumak için TABLESAMPLE kullanma
Aşağıdaki örnek, Customer
tablosundaki tüm satırların yaklaşık yüzde 10
'sini döndürmek için FROM
yan tümcesindeki TABLESAMPLE
kullanır.
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM(10 PERCENT);
İlgili içerik
- CONTAINSTABLE (Transact-SQL)
- FREETEXTTABLE (Transact-SQL)
- INSERT (Transact-SQL)
- OPENQUERY (Transact-SQL)
- OPENROWSET (Transact-SQL)
- İşleçleri (Transact-SQL)
- WHERE (Transact-SQL)