Bagikan melalui


Ekspresi (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

Kombinasi simbol dan operator yang dievaluasi SQL Server Database Engine untuk mendapatkan satu nilai data. Ekspresi sederhana dapat berupa fungsi konstanta, variabel, kolom, atau skalar tunggal. Operator dapat digunakan untuk menggabungkan dua atau beberapa ekspresi sederhana ke dalam ekspresi kompleks.

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk SQL Server dan Azure SQL Database.

{ constant | scalar_function | [ table_name. ] column | variable
    | ( expression ) | ( scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
    | ranking_windowed_function | aggregate_windowed_function
}

Sintaks untuk Azure Synapse Analytics dan Gudang Data Paralel.

-- Expression in a SELECT statement
<expression> ::=
{
    constant
    | scalar_function
    | column
    | variable
    | ( expression )
    | { unary_operator } expression
    | expression { binary_operator } expression
}
[ COLLATE Windows_collation_name ]

-- Scalar Expression in a DECLARE , SET , IF...ELSE , or WHILE statement
<scalar_expression> ::=
{
    constant
    | scalar_function
    | variable
    | ( expression )
    | (scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
}
[ COLLATE [ Windows_collation_name ] ]

Argumen

constant

Simbol yang mewakili satu nilai data tertentu. Liihat Konstanta untuk informasi selengkapnya.

scalar_function

Unit sintaks Transact-SQL yang menyediakan layanan tertentu dan mengembalikan satu nilai. scalar_function dapat berupa fungsi skalar bawaan, seperti SUMfungsi , , GETDATE()atau CAST , atau skalar yang ditentukan pengguna.

table_name

Nama atau alias tabel.

column

Nama kolom. Hanya nama kolom yang diizinkan dalam ekspresi.

variabel

Nama variabel, atau parameter. Untuk informasi selengkapnya, lihat DECLARE @local_variable .

expression

Ekspresi valid apa pun seperti yang didefinisikan dalam artikel ini. Tanda kurung adalah operator pengelompokan yang memastikan bahwa semua operator dalam ekspresi dalam tanda kurung dievaluasi sebelum ekspresi yang dihasilkan dikombinasikan dengan yang lain.

scalar_subquery

Subkueri yang mengembalikan satu nilai. Contohnya:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

Operator unary hanya dapat diterapkan ke ekspresi yang mengevaluasi ke salah satu jenis data dari kategori tipe data numerik. Adalah operator yang hanya memiliki satu operand numerik:

  • + menunjukkan angka positif
  • - menunjukkan angka negatif
  • ~ menunjukkan operator pelengkap seseorang

binary_operator

Operator yang menentukan cara dua ekspresi digabungkan untuk menghasilkan satu hasil. binary_operator dapat menjadi operator aritmatika, operator penugasan (=), operator bitwise, operator perbandingan, operator logis, operator penggalian string (+), atau operator unary. Untuk informasi selengkapnya tentang operator, lihat Operator.

ranking_windowed_function

Fungsi peringkat Transact-SQL apa pun. Untuk informasi selengkapnya, lihat Fungsi Peringkat.

aggregate_windowed_function

Fungsi agregat Transact-SQL apa pun dengan klausa OVER. Untuk informasi selengkapnya, lihat klausa SELECT - OVER.

Hasil ekspresi

Untuk ekspresi sederhana yang terdiri dari satu konstanta, variabel, fungsi skalar, atau nama kolom: jenis data, kolase, presisi, skala, dan nilai ekspresi adalah jenis data, kolase, presisi, skala, dan nilai elemen yang direferensikan.

Ketika dua ekspresi digabungkan dengan menggunakan operator perbandingan atau logis, jenis data yang dihasilkan adalah Boolean dan nilainya adalah: TRUE, FALSE, atau UNKNOWN. Untuk informasi selengkapnya tentang jenis data Boolean, lihat Operator Perbandingan.

Saat dua ekspresi digabungkan dengan menggunakan operator aritmatika, bitwise, atau string, operator menentukan jenis data yang dihasilkan.

Ekspresi kompleks terdiri dari banyak simbol dan operator yang dievaluasi ke hasil bernilai tunggal. Jenis data, kolase, presisi, dan nilai ekspresi yang dihasilkan ditentukan dengan menggabungkan ekspresi komponen, dua per satu, hingga hasil akhir tercapai. Urutan di mana ekspresi digabungkan didefinisikan oleh prioritas operator dalam ekspresi.

Keterangan

Dua ekspresi dapat digabungkan oleh operator jika keduanya memiliki jenis data yang didukung oleh operator, dan setidaknya salah satu kondisi ini benar:

  • Ekspresi memiliki jenis data yang sama.

  • Jenis data dengan prioritas yang lebih rendah dapat dikonversi secara implisit ke jenis data dengan prioritas jenis data yang lebih tinggi.

Jika ekspresi tidak memenuhi kondisi ini, CAST fungsi atau CONVERT dapat digunakan. Gunakan CAST atau CONVERT untuk mengonversi tipe data secara eksplisit dengan prioritas yang lebih rendah ke jenis data dengan prioritas yang lebih tinggi atau ke jenis data perantara yang dapat dikonversi secara implisit ke jenis data dengan prioritas yang lebih tinggi.

Jika tidak ada konversi implisit atau eksplisit yang didukung, kedua ekspresi tidak dapat digabungkan.

Kolase ekspresi apa pun yang mengevaluasi ke string karakter diatur dengan mengikuti aturan kolase yang diutamakan. Untuk informasi selengkapnya, lihat Prioritas kolase.

Dalam bahasa pemrograman seperti C atau Microsoft Visual Basic, ekspresi selalu mengevaluasi ke satu hasil. Ekspresi dalam daftar pemilihan Transact-SQL mengikuti variasi pada aturan ini: Ekspresi dievaluasi satu per satu untuk setiap baris dalam tataan hasil. Ekspresi tunggal dapat memiliki nilai yang berbeda di setiap baris kumpulan hasil, tetapi setiap baris hanya memiliki satu nilai untuk ekspresi. Misalnya, dalam pernyataan berikut SELECT , referensi ke ProductID dan istilah 1+2 dalam daftar pilih adalah ekspresi:

USE AdventureWorks2022;
GO

SELECT ProductID, 1 + 2
FROM Production.Product;
GO

Ekspresi 1+2 mengevaluasi ke 3 di setiap baris dalam tataan hasil. Meskipun ekspresi ProductID menghasilkan nilai unik di setiap baris tataan hasil, setiap baris hanya memiliki satu nilai untuk ProductID.

  • Azure Synapse Analytics mengalokasikan jumlah memori maksimum tetap untuk setiap utas sehingga tidak ada utas yang dapat menggunakan semua memori. Beberapa memori ini digunakan untuk menyimpan ekspresi kueri. Jika kueri memiliki terlalu banyak ekspresi dan memori yang diperlukan melebihi batas internal, mesin tidak menjalankannya. Untuk menghindari masalah ini, pengguna dapat mengubah kueri menjadi beberapa kueri dengan jumlah ekspresi yang lebih kecil di masing-masing kueri. Misalnya, Anda memiliki kueri dengan daftar panjang ekspresi dalam klausa WHERE:
DELETE
FROM dbo.MyTable
WHERE (c1 = '0000001' AND c2 = 'A000001')
    OR (c1 = '0000002' AND c2 = 'A000002')
    OR (c1 = '0000003' AND c2 = 'A000003')
/* ... additional, similar expressions omitted for simplicity */

Ubah kueri ini menjadi:

DELETE FROM dbo.MyTable WHERE (c1 = '0000001' AND c2 = 'A000001');
DELETE FROM dbo.MyTable WHERE (c1 = '0000002' AND c2 = 'A000002');
DELETE FROM dbo.MyTable WHERE (c1 = '0000003' AND c2 = 'A000003');
/* ... refactored, individual DELETE statements omitted for simplicity  */