Klausul FROM dan JOIN, APPLY, PIVOT (Transact-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Dalam Transact-SQL, klausul FROM tersedia pada pernyataan berikut:

Klausa FROM biasanya diperlukan pada pernyataan SELECT. Pengecualiannya adalah ketika tidak ada kolom tabel yang tercantum, dan satu-satunya item yang tercantum adalah harfiah atau variabel atau ekspresi aritmatika.

Artikel ini juga membahas kata kunci berikut yang dapat digunakan pada klausa FROM:

tautan topikIkon Konvensi Sintaks Transact-SQL

Sintaks

-- Syntax for SQL Server and Azure SQL Database  
  
[ 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  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
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  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

<table_source>
Menentukan tabel, tampilan, variabel tabel, atau sumber tabel turunan, dengan atau tanpa alias, untuk digunakan dalam pernyataan Transact-SQL. Hingga 256 sumber tabel dapat digunakan dalam pernyataan, meskipun batasnya bervariasi tergantung pada memori yang tersedia dan kompleksitas ekspresi lain dalam kueri. Kueri individual mungkin tidak mendukung hingga 256 sumber tabel.

Catatan

Performa kueri mungkin menderita banyak tabel yang dirujuk dalam kueri. Waktu kompilasi dan pengoptimalan juga dipengaruhi oleh faktor tambahan. Ini termasuk keberadaan indeks dan tampilan terindeks pada setiap <table_source> dan ukuran <select_list> dalam pernyataan SELECT.

Urutan sumber tabel setelah kata kunci FROM tidak memengaruhi tataan hasil yang dikembalikan. SQL Server mengembalikan kesalahan saat nama duplikat muncul di klausa FROM.

table_or_view_name
Adalah nama tabel atau tampilan.

Jika tabel atau tampilan ada di database lain pada instans SQL Server yang sama, gunakan nama yang sepenuhnya memenuhi syarat dalam database formulir. skema. object_name.

Jika tabel atau tampilan ada di luar instans SQL Serverl, gunakan nama empat bagian dalam formulir linked_server. katalog. skema. objek . Untuk informasi selengkapnya, lihat sp_addlinkedserver (Transact-SQL). Nama empat bagian yang dibangun dengan menggunakan fungsi OPENDATASOURCE sebagai bagian server dari nama juga dapat digunakan untuk menentukan sumber tabel jarak jauh. Ketika OPENDATASOURCE ditentukan, database_name dan schema_name mungkin tidak berlaku untuk semua sumber data dan tunduk pada kemampuan penyedia OLE DB yang mengakses objek jarak jauh.

[AS] table_alias
Adalah alias untuk table_source yang dapat digunakan baik untuk kenyamanan atau untuk membedakan tabel atau tampilan dalam gabungan mandiri atau subkueri. Alias sering kali merupakan nama tabel singkat yang digunakan untuk merujuk ke kolom tabel tertentu dalam gabungan. Jika nama kolom yang sama ada di lebih dari satu tabel dalam gabungan, SQL Server mengharuskan nama kolom memenuhi syarat dengan nama tabel, nama tampilan, atau alias. Nama tabel tidak dapat digunakan jika alias ditentukan.

Saat tabel turunan, set baris, atau fungsi bernilai tabel, atau klausa operator (seperti PIVOT atau UNPIVOT) digunakan, table_alias yang diperlukan di akhir klausa adalah nama tabel terkait untuk semua kolom, termasuk kolom pengelompokan, dikembalikan.

WITH (<table_hint> )
Menentukan bahwa pengoptimal kueri menggunakan strategi pengoptimalan atau penguncian dengan tabel ini dan untuk pernyataan ini. Untuk informasi selengkapnya, lihat Petunjuk Tabel (Transact-SQL).

rowset_function
Berlaku untuk: SQL Server 2008 dan yang lebih baru dan SQL Database.
Menentukan salah satu fungsi set baris, seperti OPENROWSET, yang mengembalikan objek yang dapat digunakan alih-alih referensi tabel. Untuk informasi selengkapnya tentang daftar fungsi set baris, lihat Fungsi Set Baris (Transact-SQL).

Menggunakan fungsi OPENROWSET dan OPENQUERY untuk menentukan objek jarak jauh tergantung pada kemampuan penyedia OLE DB yang mengakses objek .

bulk_column_alias
Berlaku untuk: SQL Server 2008 dan yang lebih baru dan SQL Database.
Adalah alias opsional untuk mengganti nama kolom dalam tataan hasil. Alias kolom hanya diperbolehkan dalam pernyataan SELECT yang menggunakan fungsi OPENROWSET dengan opsi MASSAL. Saat Anda menggunakan bulk_column_alias, tentukan alias untuk setiap kolom tabel dalam urutan yang sama dengan kolom dalam file.

Catatan

Alias ini menggantikan atribut NAME dalam elemen COLUMN dari file format XML, jika ada.

user_defined_function
Menentukan fungsi bernilai tabel.

openxml_clause OPENXML <>
Berlaku untuk: SQL Server 2008 dan yang lebih baru dan SQL Database.
Menyediakan tampilan set baris di atas dokumen XML. Untuk informasi selengkapnya, lihat OPENXML (Transact-SQL).

derived_table
Adalah subkueri yang mengambil baris dari database. derived_table digunakan sebagai input ke kueri luar.

derived_table dapat menggunakan fitur konstruktor nilai tabel Transact-SQL untuk menentukan beberapa baris. Contohnya:SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b); Untuk informasi selengkapnya, lihat Konstruktor Nilai Tabel (Transact-SQL).

column_alias
Adalah alias opsional untuk mengganti nama kolom dalam kumpulan hasil tabel turunan. Sertakan satu alias kolom untuk setiap kolom dalam daftar pilih, dan sertakan daftar lengkap alias kolom dalam tanda kurung.

table_or_view_name UNTUK SYSTEM_TIME <system_time> gpplies ke**: SQL Server 2016 (13.x) dan yang lebih baru dan SQL Database.
Menentukan bahwa versi data tertentu dikembalikan dari tabel temporal yang ditentukan dan tabel riwayat versi sistem yang ditautkan

Klausa tablesample

Berlaku untuk: SQL Server, SQL Database Menentukan bahwa sampel data dari tabel dikembalikan. Sampel mungkin perkiraan. Klausa ini dapat digunakan pada tabel utama atau gabungan apa pun dalam pernyataan SELECT atau UPDATE. TABLESAMPLE tidak dapat ditentukan dengan tampilan.

Catatan

Saat Anda menggunakan TABLESAMPLE terhadap database yang ditingkatkan ke SQL Server, tingkat kompatibilitas database diatur ke 110 atau lebih tinggi, PIVOT tidak diizinkan dalam kueri ekspresi tabel umum (CTE) rekursif. Untuk informasi selengkapnya, lihat MENGUBAH Tingkat Kompatibilitas DATABASE (Transact-SQL).

SISTEM
Adalah metode pengambilan sampel yang bergantung pada implementasi yang ditentukan oleh standar ISO. Dalam SQL Server, ini adalah satu-satunya metode pengambilan sampel yang tersedia dan diterapkan secara default. SYSTEM menerapkan metode pengambilan sampel berbasis halaman di mana sekumpulan halaman acak dari tabel dipilih untuk sampel, dan semua baris pada halaman tersebut dikembalikan sebagai subset sampel.

sample_number
Adalah ekspresi numerik konstanta yang tepat atau perkiraan yang mewakili persen atau jumlah baris. Ketika ditentukan dengan PERCENT, sample_number secara implisit dikonversi ke nilai float ; jika tidak, itu dikonversi ke bigint. PERCENT adalah default.

PERCENT
Menentukan bahwa persentase sample_number dari baris tabel harus diambil dari tabel. Ketika PERCENT ditentukan, SQL Server mengembalikan perkiraan persentase yang ditentukan. Ketika PERCENT ditentukan, ekspresi sample_number harus dievaluasi ke nilai dari 0 hingga 100.

ROWS
Menentukan bahwa sekitar sample_number baris akan diambil. Saat ROWS ditentukan, SQL Server mengembalikan perkiraan jumlah baris yang ditentukan. Saat ROWS ditentukan, ekspresi sample_number harus mengevaluasi ke nilai bilangan bulat yang lebih besar dari nol.

BERULANG
Menunjukkan bahwa sampel yang dipilih dapat dikembalikan lagi. Ketika ditentukan dengan nilai repeat_seed yang sama, SQL Server akan mengembalikan subset baris yang sama selama tidak ada perubahan yang dilakukan pada baris apa pun dalam tabel. Ketika ditentukan dengan nilai repeat_seed yang berbeda, SQL Server kemungkinan akan mengembalikan beberapa sampel baris yang berbeda dalam tabel. Tindakan berikut pada tabel dianggap sebagai perubahan: menyisipkan, memperbarui, menghapus, membangun kembali indeks atau defragmentasi, dan pemulihan atau lampirkan database.

repeat_seed
Adalah ekspresi bilangan bulat konstan yang digunakan oleh SQL Server untuk menghasilkan angka acak. repeat_seed itu besar. Jika repeat_seed tidak ditentukan, SQL Server menetapkan nilai secara acak. Untuk nilai repeat_seed tertentu, hasil pengambilan sampel selalu sama jika tidak ada perubahan yang diterapkan ke tabel. Ekspresi repeat_seed harus mengevaluasi ke bilangan bulat yang lebih besar dari nol.

Klausa tablesample

Berlaku untuk: Azure Synapse Analytics

Menentukan bahwa sampel data dari tabel dikembalikan. Sampel mungkin perkiraan. Klausa ini dapat digunakan pada tabel utama atau gabungan apa pun dalam pernyataan SELECT atau UPDATE. TABLESAMPLE tidak dapat ditentukan dengan tampilan.

PERCENT
Menentukan bahwa persentase sample_number dari baris tabel harus diambil dari tabel. Saat PERCENT ditentukan, Azure Synapse Analytics mengembalikan perkiraan persentase yang ditentukan. Ketika PERCENT ditentukan, ekspresi sample_number harus dievaluasi ke nilai dari 0 hingga 100.

Tabel yang digabungkan

Tabel yang digabungkan adalah kumpulan hasil yang merupakan produk dari dua tabel atau lebih. Untuk beberapa gabungan, gunakan tanda kurung untuk mengubah urutan alami gabungan.

Jenis gabungan

Menentukan jenis operasi gabungan.

INNER
Menentukan semua pasangan baris yang cocok dikembalikan. Membuang baris yang tidak cocok dari kedua tabel. Ketika tidak ada jenis gabungan yang ditentukan, ini adalah default.

PENUH [ LUAR ]
Menentukan bahwa baris dari tabel kiri atau kanan yang tidak memenuhi kondisi gabungan disertakan dalam kumpulan hasil, dan kolom output yang sesuai dengan tabel lain diatur ke NULL. Ini selain semua baris yang biasanya dikembalikan oleh INNER JOIN.

KIRI [ LUAR ]
Menentukan bahwa semua baris dari tabel kiri yang tidak memenuhi kondisi gabungan disertakan dalam kumpulan hasil, dan kolom output dari tabel lain diatur ke NULL selain semua baris yang dikembalikan oleh gabungan dalam.

KANAN [LUAR]
Menentukan semua baris dari tabel kanan yang tidak memenuhi kondisi gabungan disertakan dalam kumpulan hasil, dan kolom output yang sesuai dengan tabel lain diatur ke NULL, selain semua baris yang dikembalikan oleh gabungan dalam.

Petunjuk bergabung

Untuk SQL Server dan SQL Database, menentukan bahwa pengoptimal kueri SQL Server menggunakan satu petunjuk gabungan, atau algoritma eksekusi, per gabungan yang ditentukan dalam klausa FROM kueri. Untuk informasi selengkapnya, lihat Menggabungkan Petunjuk (Transact-SQL).

Untuk Azure Synapse Analytics dan Analytics Platform System (PDW), petunjuk gabungan ini berlaku untuk gabungan INNER pada dua kolom distribusi yang tidak kompatibel. Mereka dapat meningkatkan performa kueri dengan membatasi jumlah pergerakan data yang terjadi selama pemrosesan kueri. Petunjuk gabungan yang diizinkan untuk Azure Synapse Analytics dan Analytics Platform System (PDW) adalah sebagai berikut:

KURANGI
Mengurangi jumlah baris yang akan dipindahkan untuk tabel di sisi kanan gabungan untuk membuat dua tabel yang tidak kompatibel distribusi kompatibel. Petunjuk REDUCE juga disebut petunjuk semi-gabungan.

REPLICATE
Menyebabkan nilai dalam kolom gabungan dari tabel di sisi kiri gabungan direplikasi ke semua simpul. Tabel di sebelah kanan digabungkan ke versi kolom tersebut yang direplikasi.

MENDISTRIBUSIKAN
Memaksa dua sumber data untuk didistribusikan pada kolom yang ditentukan dalam klausa JOIN. Untuk tabel terdistribusi, Analytics Platform System (PDW) akan melakukan pemindahan acak. Untuk tabel yang direplikasi, Analytics Platform System (PDW) akan melakukan pemindahan trim. Untuk memahami jenis pemindahan ini, lihat bagian "Operasi Rencana Kueri DMS" di topik "Memahami Rencana Kueri" dalam dokumentasi produk Analytics Platform System (PDW). Petunjuk ini dapat meningkatkan performa saat rencana kueri menggunakan pemindahan siaran untuk menyelesaikan gabungan distribusi yang tidak kompatibel.

IKUTI
Menunjukkan bahwa operasi gabungan yang ditentukan harus terjadi antara sumber tabel atau tampilan yang ditentukan.

ON <search_condition>
Menentukan kondisi di mana gabungan didasarkan. Kondisi ini dapat menentukan predikat apa pun, meskipun operator kolom dan perbandingan sering digunakan, misalnya:

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

Saat kondisi menentukan kolom, kolom tidak harus memiliki nama yang sama atau jenis data yang sama; namun, jika jenis data tidak sama, jenis data harus kompatibel atau jenis yang SQL Server dapat dikonversi secara implisit. Jika jenis data tidak dapat dikonversi secara implisit, kondisi harus secara eksplisit mengonversi jenis data dengan menggunakan fungsi CONVERT.

Mungkin ada predikat yang hanya melibatkan salah satu tabel yang digabungkan dalam klausa ON. Predikat tersebut juga dapat berada dalam klausa WHERE dalam kueri. Meskipun penempatan predikat tersebut tidak membuat perbedaan untuk gabungan INNER, mereka dapat menyebabkan hasil yang berbeda ketika gabungan OUTER terlibat. Ini karena predikat dalam klausul ON diterapkan ke tabel sebelum gabungan, sedangkan klausul WHERE diterapkan secara semantik ke hasil gabungan.

Untuk informasi selengkapnya tentang kondisi dan predikat pencarian, lihat Kondisi Pencarian (Transact-SQL).

CROSS JOIN
Menentukan produk silang dari dua tabel. Mengembalikan baris yang sama seolah-olah tidak ada klausa WHERE yang ditentukan dalam gabungan gaya lama non-SQL-92.

left_table_source { CROSS | OUTER } TERAPKAN right_table_source
Menentukan bahwa right_table_source operator APPLY dievaluasi terhadap setiap baris left_table_source. Fungsionalitas ini berguna ketika right_table_source berisi fungsi bernilai tabel yang mengambil nilai kolom dari left_table_source sebagai salah satu argumennya.

Cross atau OUTER harus ditentukan dengan APPLY. Saat CROSS ditentukan, tidak ada baris yang dihasilkan saat right_table_source dievaluasi terhadap baris left_table_source tertentu dan mengembalikan tataan hasil kosong.

Ketika OUTER ditentukan, satu baris diproduksi untuk setiap baris left_table_source bahkan ketika right_table_source mengevaluasi terhadap baris tersebut dan mengembalikan tataan hasil kosong.

Untuk informasi lebih lanjut, lihat bagian Keterangan.

left_table_source
Adalah sumber tabel seperti yang didefinisikan dalam argumen sebelumnya. Untuk informasi lebih lanjut, lihat bagian Keterangan.

right_table_source
Adalah sumber tabel seperti yang didefinisikan dalam argumen sebelumnya. Untuk informasi lebih lanjut, lihat bagian Keterangan.

Klausul PIVOT

table_source pivot_clause PIVOT <>
Menentukan bahwa table_source dipivot berdasarkan pivot_column. table_source adalah tabel atau ekspresi tabel. Output adalah tabel yang berisi semua kolom table_source kecuali pivot_column dan value_column. Kolom table_source, kecuali pivot_column dan value_column, disebut kolom pengelompokan operator pivot. Untuk informasi selengkapnya tentang PIVOT dan UNPIVOT, lihat Menggunakan PIVOT dan UNPIVOT.

PIVOT melakukan operasi pengelompokan pada tabel input sehubungan dengan kolom pengelompokan dan mengembalikan satu baris untuk setiap grup. Selain itu, output berisi satu kolom untuk setiap nilai yang ditentukan dalam column_list yang muncul di pivot_columninput_table.

Untuk informasi selengkapnya, lihat bagian Keterangan yang mengikuti.

aggregate_function
Adalah sistem atau fungsi agregat yang ditentukan pengguna yang menerima satu atau beberapa input. Fungsi agregat harus invariant ke nilai null. Fungsi agregat invarian ke nilai null tidak mempertimbangkan nilai null dalam grup saat mengevaluasi nilai agregat.

Fungsi agregat sistem COUNT(*) tidak diperbolehkan.

value_column
Adalah kolom nilai operator PIVOT. Saat digunakan dengan UNPIVOT, value_column tidak dapat menjadi nama kolom yang ada di table_source input.

UNTUK pivot_column
Adalah kolom pivot operator PIVOT. pivot_column harus berjenis secara implisit atau eksplisit dapat dikonversi ke nvarchar(). Kolom ini tidak boleh berupa gambar atau rowversion.

Ketika UNPIVOT digunakan, pivot_column adalah nama kolom output yang menjadi sempit dari table_source. Tidak boleh ada kolom yang ada di table_source dengan nama tersebut.

IN (column_list )
Dalam klausa PIVOT, mencantumkan nilai dalam pivot_column yang akan menjadi nama kolom tabel output. Daftar tidak dapat menentukan nama kolom apa pun yang sudah ada di table_source input yang sedang dipivot.

Dalam klausa UNPIVOT, mencantumkan kolom di table_source yang akan dipersempit menjadi satu pivot_column.

table_alias
Adalah nama alias tabel output. pivot_table_alias harus ditentukan.

unpivot_clause UNPIVOT <>
Menentukan bahwa tabel input dipersempit dari beberapa kolom dalam column_list ke dalam satu kolom yang disebut pivot_column. Untuk informasi selengkapnya tentang PIVOT dan UNPIVOT, lihat Menggunakan PIVOT dan UNPIVOT.

PADA <date_time>
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru dan SQL Database.
Mengembalikan tabel dengan satu rekaman untuk setiap baris yang berisi nilai aktual (saat ini) pada titik waktu yang ditentukan di masa lalu. Secara internal, penyatuan dilakukan antara tabel temporal dan tabel riwayatnya dan hasilnya difilter untuk mengembalikan nilai dalam baris yang valid pada titik waktu yang ditentukan oleh <parameter date_time> . Nilai untuk baris dianggap valid jika nilai system_start_time_column_name kurang dari atau sama dengan <nilai parameter date_time> dan nilai system_end_time_column_name lebih besar dari <nilai parameter date_time> .

FROM <start_date_time> TO <end_date_time>Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru dan SQL Database. Mengembalikan tabel dengan nilai untuk semua versi rekaman yang aktif dalam rentang waktu yang ditentukan, terlepas dari apakah mereka mulai aktif sebelum <nilai parameter start_date_time> untuk argumen FROM atau berhenti aktif setelah <nilai parameter end_date_time> untuk argumen TO. Secara internal, penyatuan dilakukan antara tabel temporal dan tabel riwayatnya dan hasilnya difilter untuk mengembalikan nilai untuk semua versi baris yang aktif kapan saja selama rentang waktu yang ditentukan. Baris yang menjadi aktif persis pada batas bawah yang ditentukan oleh titik akhir FROM disertakan dan baris yang menjadi aktif persis pada batas atas yang ditentukan oleh titik akhir TO tidak disertakan.

ANTARA <start_date_time> DAN <end_date_time>
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru dan SQL Database.
Sama seperti di atas dalam deskripsi FROM <start_date_time> TO <end_date_time> , kecuali menyertakan baris yang menjadi aktif pada batas atas yang ditentukan oleh <titik akhir end_date_time> .

TERKANDUNG DALAM (<start_date_time> , <end_date_time>)
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru dan SQL Database.
Mengembalikan tabel dengan nilai untuk semua versi rekaman yang dibuka dan ditutup dalam rentang waktu yang ditentukan oleh dua nilai tanggalwaktu untuk argumen CONTAINED IN. Baris yang menjadi aktif persis pada batas bawah atau berhenti aktif persis di batas atas disertakan.

SEMUA
Mengembalikan tabel dengan nilai dari semua baris dari tabel saat ini dan tabel riwayat.

Keterangan

Klausa FROM mendukung sintaks SQL-92-SQL untuk tabel gabungan dan tabel turunan. Sintaks SQL-92 menyediakan operator INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, dan CROSS join.

UNION dan JOIN dalam klausul FROM didukung dalam tampilan dan dalam tabel turunan dan subkueri.

Gabungan mandiri adalah tabel yang digabungkan dengan dirinya sendiri. Sisipkan atau perbarui operasi yang didasarkan pada gabungan mandiri mengikuti urutan dalam klausa FROM.

Karena SQL Server mempertimbangkan statistik distribusi dan kardinalitas dari server tertaut yang menyediakan statistik distribusi kolom, petunjuk gabungan JARAK JAUH tidak diperlukan untuk mengevaluasi gabungan dari jarak jauh. Prosesor kueri SQL Server mempertimbangkan statistik jarak jauh dan menentukan apakah strategi gabungan jarak jauh sesuai. Petunjuk gabungan JARAK JAUH berguna untuk penyedia yang tidak menyediakan statistik distribusi kolom.

Menggunakan APPLY

Operan kiri dan kanan operator APPLY adalah ekspresi tabel. Perbedaan utama antara operan ini adalah bahwa right_table_source dapat menggunakan fungsi bernilai tabel yang mengambil kolom dari left_table_source sebagai salah satu argumen fungsi. left_table_source dapat menyertakan fungsi bernilai tabel, tetapi tidak dapat berisi argumen yang merupakan kolom dari right_table_source.

Operator APPLY bekerja dengan cara berikut untuk menghasilkan sumber tabel untuk klausul FROM:

  1. Mengevaluasi right_table_source terhadap setiap baris left_table_source untuk menghasilkan kumpulan baris.

    Nilai dalam right_table_source bergantung pada left_table_source. right_table_source dapat diwakili kira-kira dengan cara ini: TVF(left_table_source.row), di mana TVF adalah fungsi bernilai tabel.

  2. Menggabungkan kumpulan hasil yang dihasilkan untuk setiap baris dalam evaluasi right_table_source dengan left_table_source dengan melakukan operasi UNION ALL.

    Daftar kolom yang dihasilkan oleh hasil operator APPLY adalah kumpulan kolom dari left_table_source yang dikombinasikan dengan daftar kolom dari right_table_source.

Using PIVOT and UNPIVOT

pivot_column dan value_column mengelompokkan kolom yang digunakan oleh operator PIVOT. PIVOT mengikuti proses berikut untuk mendapatkan tataan hasil output:

  1. Melakukan GROUP BY pada input_table terhadap kolom pengelompokan dan menghasilkan satu baris output untuk setiap grup.

    Kolom pengelompokan di baris output mendapatkan nilai kolom terkait untuk grup tersebut dalam input_table.

  2. Menghasilkan nilai untuk kolom dalam daftar kolom untuk setiap baris output dengan melakukan hal berikut:

    1. Pengelompokan selain baris yang dihasilkan di GROUP BY pada langkah sebelumnya terhadap pivot_column.

      Untuk setiap kolom output dalam column_list, memilih subgrup yang memenuhi kondisi:

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

    2. aggregate_function dievaluasi terhadap value_column pada subgrup ini dan hasilnya dikembalikan sebagai nilai output_column yang sesuai. Jika subgrup kosong, SQL Server menghasilkan nilai null untuk output_column tersebut. Jika fungsi agregat adalah COUNT dan subgrup kosong, nol (0) dikembalikan.

Catatan

Pengidentifikasi kolom dalam UNPIVOT klausul mengikuti kolate katalog. Untuk SQL Database, kolab selalu SQL_Latin1_General_CP1_CI_AS. Untuk SQL Server database yang sebagian berisi, kolase selalu Latin1_General_100_CI_AS_KS_WS_SC. Jika kolom dikombinasikan dengan kolom lain, maka klausa susun (COLLATE DATABASE_DEFAULT) diperlukan untuk menghindari konflik.

Untuk informasi selengkapnya tentang PIVOT dan UNPIVOT termasuk contoh, lihat Menggunakan PIVOT dan UNPIVOT.

Izin

Memerlukan izin untuk pernyataan DELETE, SELECT, atau UPDATE.

Contoh

A. Menggunakan klausa FROM sederhana

Contoh berikut mengambil TerritoryID kolom dan Name dari SalesTerritory tabel dalam database sampel AdventureWorks2019.

SELECT TerritoryID, Name  
FROM Sales.SalesTerritory  
ORDER BY TerritoryID ;  

Berikut adalah tataan hasil.

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. Menggunakan petunjuk pengoptimal TABLOCK dan HOLDLOCK

Transaksi parsial berikut menunjukkan cara menempatkan kunci Employee tabel bersama eksplisit dan cara membaca indeks. Kunci ditahan di seluruh transaksi.

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

C. Menggunakan sintaks SQL-92 CROSS JOIN

Contoh berikut mengembalikan produk silang dari dua tabel Employee dan Department dalam database AdventureWorks2019. Daftar semua kemungkinan kombinasi BusinessEntityID baris dan semua Department baris nama dikembalikan.

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. Menggunakan sintaks SQL-92 FULL OUTER JOIN

Contoh berikut mengembalikan nama produk dan pesanan penjualan yang sesuai dalam SalesOrderDetail tabel dalam database AdventureWorks2019. Ini juga mengembalikan pesanan penjualan apa pun yang tidak memiliki produk yang tercantum dalam Product tabel, dan produk apa pun dengan pesanan penjualan selain yang tercantum dalam Product tabel.

-- 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  
ORDER BY p.Name ;  

E. Menggunakan sintaks SQL-92 LEFT OUTER JOIN

Contoh berikut menggabungkan dua tabel dan ProductID mempertahankan baris yang tidak cocok dari tabel kiri. Tabel Product dicocokkan dengan SalesOrderDetail tabel pada ProductID kolom di setiap tabel. Semua produk, dipesan dan tidak dipesan, muncul dalam tataan hasil.

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. Menggunakan sintaks SQL-92 INNER JOIN

Contoh berikut mengembalikan semua nama produk dan ID pesanan penjualan.

-- 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. Menggunakan sintaks SQL-92 RIGHT OUTER JOIN

Contoh berikut menggabungkan dua tabel dan TerritoryID mempertahankan baris yang tidak cocok dari tabel kanan. Tabel SalesTerritory dicocokkan dengan SalesPerson tabel pada TerritoryID kolom di setiap tabel. Semua tenaga penjualan muncul dalam tataan hasil, apakah mereka diberi wilayah atau tidak.

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. Menggunakan petunjuk gabungan HASH dan MERGE

Contoh berikut melakukan gabungan tiga tabel di antara Producttabel , , ProductVendordan Vendor untuk menghasilkan daftar produk dan vendornya. Pengoptimal kueri bergabung Product dan ProductVendor (p dan pv) dengan menggunakan gabungan MERGE. Selanjutnya, hasil gabungan Product dan ProductVendor MERGE (p dan pv) adalah HASH yang bergabung ke Vendor tabel untuk menghasilkan (p dan pv) dan v.

Penting

Setelah petunjuk gabungan ditentukan, kata kunci INNER tidak lagi opsional dan harus secara eksplisit dinyatakan agar INNER JOIN dilakukan.

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. Menggunakan tabel turunan

Contoh berikut menggunakan tabel turunan, SELECT pernyataan setelah FROM klausul, untuk mengembalikan nama depan dan belakang semua karyawan dan kota tempat mereka tinggal.

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. Menggunakan TABLESAMPLE untuk membaca data dari sampel baris dalam tabel

Contoh berikut menggunakan dalam FROM klausul TABLESAMPLE untuk mengembalikan sekitar 10 persentase semua baris dalam Customer tabel.

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

K. Menggunakan APPLY

Contoh berikut mengasumsikan bahwa tabel dan fungsi bernilai tabel berikut ada dalam database:

Nama Objek Nama Kolom
Departments DeptID, DivisionID, DeptName, DeptMgrID
EmpMgr MgrID, EmpID
Karyawan EmpID, EmpLastName, EmpFirstName, EmpSalary
GetReports(MgrID) EmpID, EmpLastName, EmpSalary

Fungsi GetReports bernilai tabel, mengembalikan daftar semua karyawan yang melaporkan secara langsung atau tidak langsung ke yang ditentukan MgrID.

Contohnya menggunakan APPLY untuk mengembalikan semua departemen dan semua karyawan di departemen tersebut. Jika departemen tertentu tidak memiliki karyawan, tidak akan ada baris yang dikembalikan untuk departemen tersebut.

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

Jika Anda ingin kueri menghasilkan baris untuk departemen tersebut tanpa karyawan, yang akan menghasilkan nilai kosong untuk EmpIDkolom , dan EmpLastNameEmpSalary , gunakan OUTER APPLY sebagai gantinya.

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

L. Menggunakan CROSS APPLY

Contoh berikut mengambil rekam jepret dari semua rencana kueri yang berada di cache paket, dengan mengkueri sys.dm_exec_cached_plans tampilan manajemen dinamis untuk mengambil handel rencana dari semua rencana kueri di cache. CROSS APPLY Kemudian operator ditentukan untuk meneruskan handel rencana ke sys.dm_exec_query_plan. Output Xml Showplan untuk setiap paket yang saat ini ada di cache paket berada di query_plan kolom tabel yang dikembalikan.

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. Menggunakan for SYSTEM_TIME

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru dan SQL Database.
Contoh berikut menggunakan argumen FOR SYSTEM_TIME AS OF date_time_literal_or_variable untuk mengembalikan baris tabel yang sebenarnya (saat ini) per 1 Januari 2014.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME AS OF '2014-01-01'  
WHERE ManagerID = 5;

Contoh berikut menggunakan argumen FOR SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable untuk mengembalikan semua baris yang aktif selama periode yang didefinisikan sebagai dimulai dengan 1 Januari 2013 dan berakhir dengan 1 Januari 2014, tidak termasuk batas atas.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME FROM '2013-01-01' TO '2014-01-01'  
WHERE ManagerID = 5;

Contoh berikut menggunakan argumen FOR SYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variable untuk mengembalikan semua baris yang aktif selama periode yang didefinisikan sebagai dimulai dengan 1 Januari 2013 dan berakhir dengan 1 Januari 2014, termasuk batas atas.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME BETWEEN '2013-01-01' AND '2014-01-01'  
WHERE ManagerID = 5;

Contoh berikut menggunakan argumen FOR SYSTEM_TIME CONTAINED IN ( date_time_literal_or_variable, date_time_literal_or_variable ) untuk mengembalikan semua baris yang dibuka dan ditutup selama periode yang ditentukan sebagai dimulai dengan 1 Januari 2013 dan berakhir dengan 1 Januari 2014.

SELECT DepartmentNumber,   
    DepartmentName,   
    ManagerID,   
    ParentDepartmentNumber   
FROM DEPARTMENT  
FOR SYSTEM_TIME CONTAINED IN ( '2013-01-01', '2014-01-01' )  
WHERE ManagerID = 5;

Contoh berikut menggunakan variabel daripada harfiah untuk menyediakan nilai batas tanggal untuk kueri.

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;

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

N. Menggunakan sintaks INNER JOIN

Contoh berikut mengembalikan SalesOrderNumberkolom , ProductKey, dan EnglishProductName dari FactInternetSales tabel dan DimProduct tempat kunci gabungan, ProductKey, cocok di kedua tabel. Kolom SalesOrderNumber dan EnglishProductName masing-masing hanya ada di salah satu tabel, sehingga tidak perlu menentukan alias tabel dengan kolom ini, seperti yang ditunjukkan; alias ini disertakan untuk keterbacaan. Kata AS sebelum nama alias tidak diperlukan tetapi direkomendasikan untuk keterbacaan dan sesuai dengan standar ANSI.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
INNER JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey;  

INNER Karena kata kunci tidak diperlukan untuk gabungan dalam, kueri yang sama ini dapat ditulis sebagai:

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
JOIN DimProduct AS dp  
ON dp.ProductKey = fis.ProductKey;  

WHERE Klausa juga dapat digunakan dengan kueri ini untuk membatasi hasil. Contoh ini membatasi hasil ke SalesOrderNumber nilai yang lebih tinggi dari 'SO5000':

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey  
WHERE fis.SalesOrderNumber > 'SO50000'  
ORDER BY fis.SalesOrderNumber;  

O. Menggunakan sintaks LEFT OUTER JOIN dan RIGHT OUTER JOIN

Contoh berikut menggabungkan FactInternetSales tabel dan DimProduct pada ProductKey kolom. Sintaks gabungan luar kiri mempertahankan baris yang tidak cocok dari tabel sebelah kiri (FactInternetSales). FactInternetSales Karena tabel tidak berisi nilai apa pun ProductKey yang tidak cocok dengan DimProduct tabel, kueri ini mengembalikan baris yang sama dengan contoh gabungan dalam pertama di atas.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM FactInternetSales AS fis 
LEFT OUTER JOIN DimProduct AS dp  
    ON dp.ProductKey = fis.ProductKey;  

Kueri ini juga dapat ditulis tanpa OUTER kata kunci.

Di gabungan luar kanan, baris yang tidak cocok dari tabel kanan dipertahankan. Contoh berikut mengembalikan baris yang sama dengan contoh gabungan luar kiri di atas.

-- Uses AdventureWorks  
  
SELECT fis.SalesOrderNumber, dp.ProductKey, dp.EnglishProductName  
FROM DimProduct AS dp 
RIGHT OUTER JOIN FactInternetSales AS fis  
    ON dp.ProductKey = fis.ProductKey;  

Kueri berikut menggunakan DimSalesTerritory tabel sebagai tabel kiri di gabungan luar kiri. Ini mengambil SalesOrderNumber nilai dari FactInternetSales tabel. Jika tidak ada pesanan untuk tertentu SalesTerritoryKey, kueri akan mengembalikan NULL untuk baris tersebut SalesOrderNumber . Kueri ini diurutkan berdasarkan SalesOrderNumber kolom, sehingga SETIAP NULL di kolom ini akan muncul di bagian atas hasil.

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

Kueri ini dapat ditulis ulang dengan gabungan luar kanan untuk mengambil hasil yang sama:

-- 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. Menggunakan sintaks FULL OUTER JOIN

Contoh berikut menunjukkan gabungan luar penuh, yang mengembalikan semua baris dari kedua tabel yang digabungkan tetapi mengembalikan NULL untuk nilai yang tidak cocok dari tabel lain.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, dst.SalesTerritoryRegion, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
FULL OUTER JOIN FactInternetSales AS fis  
    ON dst.SalesTerritoryKey = fis.SalesTerritoryKey  
ORDER BY fis.SalesOrderNumber;  

Kueri ini juga dapat ditulis tanpa OUTER kata kunci.

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

T. Menggunakan sintaks CROSS JOIN

Contoh berikut mengembalikan lintas produk dari FactInternetSales tabel dan DimSalesTerritory . Daftar semua kemungkinan kombinasi SalesOrderNumber dan SalesTerritoryKey dikembalikan. Perhatikan tidak adanya ON klausa dalam kueri gabungan silang.

-- Uses AdventureWorks  
  
SELECT dst.SalesTerritoryKey, fis.SalesOrderNumber  
FROM DimSalesTerritory AS dst 
CROSS JOIN FactInternetSales AS fis  
ORDER BY fis.SalesOrderNumber;  

R. Menggunakan tabel turunan

Contoh berikut menggunakan tabel turunan ( SELECT pernyataan setelah FROM klausul) untuk mengembalikan CustomerKey kolom dan LastName semua pelanggan dalam DimCustomer tabel dengan BirthDate nilai lebih lambat dari 1 Januari 1970 dan nama belakang 'Smith'.

-- Uses AdventureWorks  
  
SELECT CustomerKey, LastName  
FROM  
   (SELECT * FROM DimCustomer  
    WHERE BirthDate > '01/01/1970') AS DimCustomerDerivedTable  
WHERE LastName = 'Smith'  
ORDER BY LastName;  

S. Contoh petunjuk gabungan REDUCE

Contoh berikut menggunakan REDUCE petunjuk gabungan untuk mengubah pemrosesan tabel turunan dalam kueri. Saat menggunakan REDUCE petunjuk gabungan dalam kueri ini, fis.ProductKey diproyeksikan, direplikasi dan dibuat berbeda, lalu digabungkan selama DimProduct pengacakan DimProduct pada ProductKey. Tabel turunan yang dihasilkan didistribusikan pada fis.ProductKey.

-- Uses AdventureWorks  
  
EXPLAIN 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. Contoh petunjuk gabungan REPLICATE

Contoh berikutnya ini memperlihatkan kueri yang sama dengan contoh sebelumnya, kecuali bahwa REPLICATE petunjuk gabungan digunakan alih-alih REDUCE petunjuk gabungan. Penggunaan REPLICATE petunjuk menyebabkan nilai dalam ProductKey kolom (bergabung) dari FactInternetSales tabel direplikasi ke semua simpul. Tabel DimProduct digabungkan ke versi nilai-nilai tersebut yang direplikasi.

-- Uses AdventureWorks  
  
EXPLAIN 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. Menggunakan petunjuk REDISTRIBUTE untuk menjamin pemindahan Acak untuk gabungan distribusi yang tidak kompatibel

Kueri berikut menggunakan petunjuk kueri REDISTRIBUTE pada gabungan distribusi yang tidak kompatibel. Ini menjamin pengoptimal kueri akan menggunakan pemindahan Acak dalam rencana kueri. Ini juga menjamin rencana kueri tidak akan menggunakan pemindahan Siaran yang memindahkan tabel terdistribusi ke tabel yang direplikasi.

Dalam contoh berikut, petunjuk REDISTRIBUTE memaksa pemindahan Shuffle pada tabel FactInternetSales karena ProductKey adalah kolom distribusi untuk DimProduct, dan bukan kolom distribusi untuk FactInternetSales.

-- Uses AdventureWorks  
  
EXPLAIN  
SELECT dp.ProductKey, fis.SalesOrderNumber, fis.TotalProductCost  
FROM DimProduct AS dp 
INNER REDISTRIBUTE JOIN FactInternetSales AS fis  
    ON dp.ProductKey = fis.ProductKey;  

V. Menggunakan TABLESAMPLE untuk membaca data dari sampel baris dalam tabel

Contoh berikut menggunakan dalam FROM klausul TABLESAMPLE untuk mengembalikan sekitar 10 persentase semua baris dalam Customer tabel.

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

Lihat juga

CONTAINSTABLE (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
OPENQUERY (Transact-SQL)
OPENROWSET (Transact-SQL)
Operator (Transact-SQL)
WHERE (Transact-SQL)