식(Transact-SQL)

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

SQL Server 데이터베이스 엔진에서 단일 데이터 값을 얻기 위해 평가하는 기호와 연산자 조합입니다. 단순 식으로는 단일 상수, 변수, 열 또는 스칼라 함수가 있습니다. 연산자를 사용하면 두 개 이상의 단순 식을 결합하여 복합 식으로 만들 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

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

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

참고

SQL Server 2014 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

인수

용어 정의
constant 특정한 단일 데이터 값을 나타내는 기호입니다. 자세한 내용은 상수(Transact-SQL)를 참조하세요.
scalar_function 특정 서비스를 제공하고 단일 값을 반환하는 Transact-SQL 구문의 단위입니다. scalar_function은 SUM, GETDATE 또는 CAST 함수 또는 스칼라 사용자 정의 함수와 같은 기본 제공 스칼라 함수가 될 수 있습니다.
[ table_name. ] 테이블의 이름 또는 별칭입니다.
column 열의 이름입니다. 식에는 열 이름만 사용할 수 있습니다.
variable 변수 또는 매개 변수의 이름입니다. 자세한 내용은 DECLARE @local_variable (Transact-SQL)를 참조하세요.
(expression) 이 항목에서 정의된 바와 같이 유효한 식입니다. 괄호는 안에 있는 식의 모든 연산자를 평가한 후에 그 결과를 다른 식과 결합하는 그룹 연산자입니다.
(scalar_subquery) 한 개의 값을 반환하는 하위 쿼리입니다. 다음은 그 예입니다.

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator } 단항 연산자는 숫자 데이터 형식 범주의 데이터 형식 하나로 평가되는 식에 대해서만 적용할 수 있습니다. 단 하나의 숫자 피연산자만 있는 연산자입니다.

+는 양수를 나타냅니다.

-는 음수를 나타냅니다.

~는 보수 연산자를 나타냅니다.
{ binary_operator } 두 식을 결합하여 단일 결과를 만드는 방식을 정의하는 연산자입니다. binary_operator는 산술 연산자, 대입 연산자(=), 비트 연산자, 비교 연산자, 논리 연산자, 문자열 연결 연산자(+) 또는 단항 연산자일 수 있습니다. 연산자에 대한 자세한 내용은 연산자(Transact-SQL)를 참조하세요.
ranking_windowed_function Transact-SQL 순위 함수입니다. 자세한 내용은 순위 함수(Transact-SQL)를 참조하세요.
aggregate_windowed_function OVER 절을 사용하는 Transact-SQL 집계 함수입니다. 자세한 내용은 OVER 절(Transact-SQL)을 참조하세요.

식 결과

단일 상수, 변수, 스칼라 함수, 열 이름, 데이터 정렬, 전체 자릿수, 소수 자릿수 및 식의 값으로 이루어진 단순 식은 데이터 형식, 데이터 정렬, 전체 자릿수, 소수 자릿수 및 참조된 요소의 값입니다.

두 식이 비교 연산자 또는 논리 연산자를 사용하여 결합되면, 결과 데이터 형식은 부울이고 값은 TRUE, FALSE 또는 UNKNOWN 중 하나입니다. 부울 데이터 형식에 대한 자세한 내용은 비교 연산자(Transact-SQL)를 참조하세요.

산술, 비트 또는 문자열 연산자를 사용하여 두 식을 결합하면 연산자에 따라 결과 데이터 형식이 결정됩니다.

복합 식은 많은 기호로 구성되며 연산자는 단일 값의 결과로 평가됩니다. 결과 식의 데이터 형식, 데이터 정렬, 전체 자릿수 및 값은 최종 결과에 도달할 때까지 한 번에 두 개씩 구성 요소 식을 결합하여 결정됩니다. 식이 결합되는 순서는 식의 연산자 우선 순위에 따라 정의됩니다.

설명

두 식이 모두 연산자가 지원하는 데이터 형식을 갖고 있으며 다음 조건 중 최소한 하나가 참인 경우에는 연산자로 두 식을 결합할 수 있습니다.

  • 식의 데이터 형식이 동일한 경우

  • 우선 순위가 낮은 데이터 형식이 우선 순위가 높은 데이터 형식으로 암시적으로 변환될 수 있는 경우

식이 이러한 조건을 만족하지 않으면 CAST 또는 CONVERT 함수를 사용하여 명시적으로 우선 순위가 낮은 데이터 형식을 우선 순위가 높은 데이터 형식으로 변환하거나 중간 데이터 형식으로 변환한 후 암시적으로 우선 순위가 높은 데이터 형식으로 변환할 수 있습니다.

지원되는 명시적 변환 또는 암시적 변환이 없는 경우에는 두 식을 결합할 수 없습니다.

문자열로 평가되는 모든 식의 데이터 정렬은 선행 정렬 규칙에 따라 설정됩니다. 자세한 내용은 선행 정렬 우선 순위(Transact-SQL)를 참조하세요.

C 또는 Microsoft Visual Basic과 같은 프로그래밍 언어에서 식은 항상 단일 결과로 평가됩니다. Transact-SQL 선택 목록의 식은 이 규칙의 변형을 따릅니다. 즉, 식은 결과 집합의 각 행에 대해 개별적으로 평가됩니다. 단일 식은 결과 집합의 각 행에 서로 다른 값을 가질 수 있습니다. 그러나 각 행은 식에 대해 단 하나의 값만을 가집니다. 예를 들어 다음 SELECT 문에서 ProductID에 대한 참조와 선택 목록의 1+2 항목은 모두 식입니다.

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

1+2 식은 결과 집합의 각 행에서 3으로 평가됩니다. ProductID 식이 각 결과 집합 행에서 고유한 값을 생성하더라도 각 행은 ProductID에 대해 단 하나의 값을 가집니다.

  • Azure Synapse Analytics는 각 스레드에 고정된 최대 메모리 양을 할당하므로 스레드가 모든 메모리를 소비할 수는 없습니다. 이 메모리 중 일부는 쿼리 식을 저장하는 데 사용됩니다. 쿼리에 너무 많은 식이 있고 필요한 메모리가 내부 제한을 초과하는 경우 엔진이 이 쿼리를 실행하지 않습니다. 이러한 문제를 방지하기 위해 사용자는 각각에 적은 수의 식을 포함하는 여러 쿼리로 변경할 수 있습니다. 예를 들어, 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 */

이 쿼리를 다음과 같이 변경합니다.

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  */

관련 항목

AT TIME ZONE(Transact-SQL)
CASE(Transact-SQL)
CAST 및 CONVERT(Transact-SQL)
COALESCE(Transact-SQL)
데이터 형식 변환(데이터베이스 엔진)
데이터 형식 우선 순위(Transact-SQL)
데이터 형식(Transact-SQL)
기본 제공 함수(Transact-SQL)
LIKE(Transact-SQL)
NULLIF(Transact-SQL)
SELECT(Transact-SQL)
WHERE(Transact-SQL)