Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Mengambil baris dari database dan mengaktifkan pemilihan satu atau banyak baris atau kolom dari satu atau banyak tabel di Mesin Database SQL Server. Sintaks SELECT lengkap pernyataan ini kompleks, tetapi klausul utama dapat diringkas sebagai berikut:
[ DENGAN { [ XMLNAMESPACES , ] [ common_table_expression ] } ] ]
PILIH select_list[ KE new_table ]
[ DARI table_source ] [ WHERE search_condition ]
[ KELOMPOK BERDASARKAN group_by_expression ]
[ PESANAN OLEH order_expression [ ASC | DESC ] ]
Operator UNION, EXCEPT, dan INTERSECT dapat digunakan di antara kueri untuk menggabungkan atau membandingkan hasilnya menjadi satu tataan hasil.
Syntax
Sintaks untuk SQL Server dan Azure SQL Database:
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
<query_expression>
[ ORDER BY <order_by_expression> ]
[ <FOR Clause> ]
[ OPTION ( <query_hint> [ , ...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [ ...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
<select_list>
[ INTO new_table ]
[ FROM { <table_source> } [ , ...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING <search_condition> ]
[ ; ]
Sintaks untuk Azure Synapse Analytics dan Gudang Data Paralel dan Microsoft Fabric:
[ WITH <common_table_expression> [ , ...n ] ]
SELECT <select_criteria>
[ ; ]
<select_criteria> ::=
[ TOP ( top_expression ) ]
[ ALL | DISTINCT ]
{ * | column_name | expression } [ , ...n ]
[ FROM { table_source } [ , ...n ] ]
[ WHERE <search_condition> ]
[ GROUP BY <group_by_clause> ]
[ HAVING <search_condition> ]
[ ORDER BY <order_by_expression> ]
[ OPTION ( <query_option> [ , ...n ] ) ]
Remarks
Karena kompleksitas SELECT pernyataan, elemen sintaksis dan argumen terperinci ditampilkan per klausul:
- DENGAN XMLNAMESPACES
- HAVING
- DENGAN common_table_expression
- UNION
- Klausa SELECT
- EXCEPT dan INTERSECT
- Klausul INTO
- PESAN OLEH
- FROM
- Klausul FOR
- WHERE
- Klausul OPTION
- KELOMPOKKAN BERDASARKAN
Urutan klausul dalam SELECT pernyataan signifikan. Salah satu klausa opsional dapat dihilangkan, tetapi ketika klausul opsional digunakan, klausul tersebut harus muncul dalam urutan yang sesuai.
SELECT pernyataan diizinkan dalam fungsi yang ditentukan pengguna hanya jika daftar pemilihan pernyataan ini berisi ekspresi yang menetapkan nilai ke variabel yang bersifat lokal untuk fungsi.
Nama empat bagian yang dibangun dengan OPENDATASOURCE fungsi sebagai bagian nama server dapat digunakan sebagai sumber tabel di mana pun nama tabel dapat muncul dalam SELECT pernyataan. Nama empat bagian tidak dapat ditentukan untuk Azure SQL Database.
Beberapa pembatasan sintaks berlaku untuk SELECT pernyataan yang melibatkan tabel jarak jauh.
Urutan pemrosesan logis dari pernyataan SELECT
Langkah-langkah berikut menunjukkan urutan pemrosesan logis, atau urutan pengikatan, untuk pernyataan SELECT . Urutan ini menentukan kapan objek yang ditentukan dalam satu langkah tersedia untuk klausul dalam langkah berikutnya. Misalnya, jika prosesor kueri dapat mengikat ke (akses) tabel atau tampilan yang ditentukan dalam FROM klausa, objek ini dan kolomnya tersedia untuk semua langkah berikutnya. Sebaliknya, karena SELECT klausanya adalah langkah 8, alias kolom atau kolom turunan apa pun yang ditentukan dalam klausul tersebut tidak dapat direferensikan dengan klausa sebelumnya. Namun, klausul tersebut ORDER BY dapat direferensikan oleh klausul berikutnya seperti klausul. Prosesor kueri menentukan eksekusi fisik pernyataan yang sebenarnya, dan urutannya mungkin bervariasi dari daftar ini.
FROMONJOINWHEREGROUP BY-
WITH CUBEatauWITH ROLLUP HAVINGSELECTDISTINCTORDER BYTOP
Warning
Ada kasus yang jarang terjadi di mana urutan sebelumnya mungkin berbeda. Misalkan Anda memiliki indeks berkluster pada tampilan, dan tampilan mengecualikan beberapa baris tabel, dan daftar kolom tampilan SELECT menggunakan yang mengubah CONVERT jenis data dari varchar ke int. Dalam situasi ini, CONVERT dapat dijalankan sebelum WHERE klausul dijalankan. Seringkali ada cara untuk memodifikasi tampilan Anda untuk menghindari urutan yang berbeda, jika itu penting dalam kasus Anda.
Permissions
Memilih data memerlukan SELECT izin pada tabel atau tampilan, yang dapat diwarisi dari cakupan yang lebih tinggi seperti SELECT izin pada skema atau CONTROL izin pada tabel. Atau memerlukan keanggotaan dalam peran database tetap db_datareader atau db_owner , atau peran server tetap sysadmin . Membuat tabel baru menggunakan SELECT INTO juga memerlukan CREATE TABLE izin, dan ALTER SCHEMA izin pada skema yang memiliki tabel baru.
Examples
Contoh berikut menggunakan database AdventureWorksPDW2022 .
A. Menggunakan SELECT untuk mengambil baris dan kolom
Bagian ini memperlihatkan tiga contoh kode. Contoh kode pertama ini mengembalikan semua baris (tidak ada WHERE klausa yang ditentukan) dan semua kolom (menggunakan *) dari DimEmployee tabel.
SELECT *
FROM DimEmployee
ORDER BY LastName;
Contoh berikutnya menggunakan alias tabel untuk mencapai hasil yang sama.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Contoh ini mengembalikan semua baris (tidak ada WHERE klausa yang ditentukan) dan subset kolom (FirstName, LastName, StartDate) dari DimEmployee tabel dalam database AdventureWorksPDW2022 . Judul kolom ketiga diganti namanya menjadi FirstDay.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
Contoh ini hanya mengembalikan baris untuk DimEmployee yang memiliki EndDate yang bukan NULL dan MaritalStatus dari M (sudah menikah).
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
B. Menggunakan SELECT dengan judul dan perhitungan kolom
Contoh berikut mengembalikan semua baris dari DimEmployee tabel, dan menghitung gaji kotor untuk setiap karyawan berdasarkan minggu kerja mereka BaseRate dan 40 jam.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. Gunakan DISTINCT dengan SELECT
Contoh berikut menggunakan DISTINCT untuk menghasilkan daftar semua judul unik dalam DimEmployee tabel.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. Gunakan GROUP BY
Contoh berikut menemukan jumlah total untuk semua penjualan pada setiap hari.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Karena klausa GROUP BY , hanya satu baris yang berisi jumlah semua penjualan yang dikembalikan untuk setiap hari.
E. Menggunakan GROUP BY dengan beberapa grup
Contoh berikut menemukan harga rata-rata dan jumlah penjualan Internet untuk setiap hari, dikelompokkan menurut tanggal pesanan dan kunci promosi.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. Gunakan GROUP BY dan WHERE
Contoh berikut menempatkan hasilnya ke dalam grup setelah hanya mengambil baris dengan tanggal pesanan lebih lambat dari 1 Agustus 2002.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. Menggunakan GROUP BY dengan ekspresi
Contoh berikut mengelompokkan menurut ekspresi. Anda dapat mengelompokkan menurut ekspresi jika ekspresi tidak menyertakan fungsi agregat.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. Menggunakan GROUP BY dengan ORDER BY
Contoh berikut menemukan jumlah penjualan per hari, dan pesanan menurut hari.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. Menggunakan klausa HAVING
Kueri ini menggunakan klausul HAVING untuk membatasi hasil.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;