SELECT (Transact-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Mengambil baris dari database dan memungkinkan pemilihan satu atau banyak baris atau kolom dari satu atau banyak tabel di SQL Server. Sintaks lengkap pernyataan SELECT rumit, tetapi klausul utama dapat diringkas sebagai:

[ DENGAN { [ XMLNAMESPACES ,][ <common_table_expression> ] } ]

SELECT select_list [ INTO new_table ]

[ DARI table_source ] [ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ JENDELA ekspresi jendela]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

Operator UNION, EXCEPT, dan INTERSECT dapat digunakan di antara kueri untuk menggabungkan atau membandingkan hasilnya menjadi satu tataan hasil.

Ikon tautan topikKonvensi Sintaks Transact-SQL

Sintaks

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

Catatan

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

Keterangan

Karena kompleksitas pernyataan SELECT, elemen dan argumen sintaks terperinci diperlihatkan oleh klausa:

Urutan klausul dalam pernyataan SELECT signifikan. Salah satu klausul opsional dapat dihilangkan, tetapi ketika klausul opsional digunakan, klausul tersebut harus muncul dalam urutan yang sesuai.

Pernyataan SELECT diizinkan dalam fungsi yang ditentukan pengguna hanya jika daftar pemilihan pernyataan ini berisi ekspresi yang menetapkan nilai ke variabel yang lokal untuk fungsi.

Nama empat bagian yang dibangun dengan fungsi OPENDATASOURCE sebagai bagian nama server dapat digunakan sebagai sumber tabel di mana pun nama tabel dapat muncul dalam pernyataan SELECT. Nama empat bagian tidak dapat ditentukan untuk database Azure SQL.

Beberapa pembatasan sintaks berlaku untuk pernyataan SELECT 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 pada langkah berikutnya. Misalnya, jika prosesor kueri dapat mengikat (mengakses) tabel atau tampilan yang ditentukan dalam klausa FROM, objek ini dan kolomnya tersedia untuk semua langkah berikutnya. Sebaliknya, karena klausa SELECT adalah langkah 8, alias kolom atau kolom turunan apa pun yang ditentukan dalam klausa tersebut tidak dapat direferensikan dengan klausa sebelumnya. Namun, klausul tersebut dapat dirujuk oleh klausul berikutnya seperti klausul ORDER BY. Eksekusi fisik aktual dari pernyataan ditentukan oleh prosesor kueri dan urutannya dapat bervariasi dari daftar ini.

  1. FROM
  2. AKTIF
  3. IKUTI
  4. WHERE
  5. KELOMPOKKAN MENURUT
  6. DENGAN CUBE atau WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP

Peringatan

Urutan sebelumnya biasanya benar. Namun, ada kasus yang jarang terjadi di mana urutannya mungkin berbeda.

Misalnya, Anda memiliki indeks berkluster pada tampilan, dan tampilan mengecualikan beberapa baris tabel, dan daftar kolom SELECT tampilan menggunakan CONVERT yang mengubah jenis data dari varchar menjadi bilangan bulat. Dalam situasi ini, CONVERT dapat dijalankan sebelum klausa WHERE dijalankan. Jarang memang. Seringkali ada cara untuk memodifikasi tampilan Anda untuk menghindari urutan yang berbeda, jika itu penting dalam kasus Anda.

Izin

Memilih data memerlukan izin SELECT pada tabel atau tampilan, yang dapat diwarisi dari cakupan yang lebih tinggi seperti izin SELECT pada skema atau izin CONTROL 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 izin CREATE TABLE , dan izin ALTER SCHEMA pada skema yang memiliki tabel baru.

Contoh:

Contoh berikut menggunakan database AdventureWorksPDW2022 .

J. Menggunakan SELECT untuk mengambil baris dan kolom

Bagian ini menunjukkan tiga contoh kode. Contoh kode pertama ini mengembalikan semua baris (tidak ada klausa WHERE 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 klausa WHERE yang ditentukan) dan subset kolom (FirstName, LastName, StartDate) dari DimEmployee tabel dalam AdventureWorksPDW2012 database. 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 'M' (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. Menggunakan 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. Menggunakan 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 klausul 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. Menggunakan 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 dikelompokkan 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 berdasarkan hari.

SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY OrderDateKey  
ORDER BY OrderDateKey;  

i. Menggunakan klausa HAVING

Kueri ini menggunakan klausa HAVING untuk membatasi hasil.

SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales  
FROM FactInternetSales  
GROUP BY OrderDateKey  
HAVING OrderDateKey > 20010000  
ORDER BY OrderDateKey;  

Lihat juga

Contoh SELECT (Transact-SQL)
Petunjuk (Transact-SQL)