다음을 통해 공유


Expressions (Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics분석 플랫폼 시스템(PDW)Microsoft Fabric 의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스Microsoft Fabric 미리 보기의 SQL 데이터베이스

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

Transact-SQL 구문 표기 규칙

Syntax

SQL Server 및 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
}

Azure Synapse Analytics 및 병렬 데이터 웨어하우스에 대한 구문입니다.

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

Arguments

constant

단일 특정 데이터 값을 나타내는 기호입니다. 자세한 내용은 상수를 참조하세요.

scalar_function

특정 서비스를 제공하고 단일 값을 반환하는 Transact-SQL 구문의 단위입니다. scalar_function , 함수 또는 SUM 스칼라 사용자 정의 함수와 같은 GETDATE()CAST기본 제공 스칼라 함수일 수 있습니다.

table_name

테이블의 이름 또는 별칭입니다.

column

열의 이름입니다. 식에는 열 이름만 사용할 수 있습니다.

variable

변수 또는 매개 변수의 이름입니다. 자세한 내용은 DECLARE @local_variable를 참조하세요.

expression

이 문서에 정의된 모든 유효한 식입니다. 괄호는 안에 있는 식의 모든 연산자를 평가한 후에 그 결과를 다른 식과 결합하는 그룹 연산자입니다.

scalar_subquery

하나의 값을 반환하는 하위 쿼리입니다. For example:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

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

  • + 양수를 나타냅니다.
  • - 음수를 나타냅니다.
  • ~ 는 하나의 보수 연산자를 나타냅니다.

binary_operator

두 식이 결합되어 단일 결과를 생성하는 방법을 정의하는 연산자입니다. binary_operator 산술 연산자, 대입 연산자(=), 비트 연산자, 비교 연산자, 논리 연산자, 문자열 연결 연산자(+) 또는 단항 연산자일 수 있습니다. 연산자에 대한 자세한 내용은 연산자를 참조 하세요.

ranking_windowed_function

Transact-SQL 순위 함수입니다. 자세한 내용은 순위 함수를 참조 하세요.

aggregate_windowed_function

OVER 절이 있는 Transact-SQL 집계 함수입니다. 자세한 내용은 SELECT - OVER 절을 참조하세요.

Expression results

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

비교 또는 논리 연산자를 사용하여 두 식을 결합하면 결과 데이터 형식은 부울이고 값은 다음과 TRUEFALSEUNKNOWN같습니다. 부울 데이터 형식에 대한 자세한 내용은 비교 연산자를 참조 하세요.

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

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

Remarks

연산자가 지원하는 데이터 형식이 둘 다 있고 다음 조건 중 하나 이상이 true인 경우 두 식을 연산자가 결합할 수 있습니다.

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

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

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

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

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

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

USE AdventureWorks2022;
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  */