적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
분석 플랫폼 시스템(PDW)
Microsoft Fabric
의 SQL 분석 엔드포인트Microsoft Fabric
의 웨어하우스Microsoft Fabric 미리 보기의 SQL 데이터베이스
SQL Server에서 단일 데이터 값을 얻기 위해 평가할 데이터베이스 엔진 기호와 연산자의 조합입니다. 단순 식으로는 단일 상수, 변수, 열 또는 스칼라 함수가 있습니다. 연산자를 사용하면 두 개 이상의 단순 식을 결합하여 복합 식으로 만들 수 있습니다.
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
단일 상수, 변수, 스칼라 함수, 열 이름, 데이터 정렬, 전체 자릿수, 소수 자릿수 및 식의 값으로 이루어진 단순 식은 데이터 형식, 데이터 정렬, 전체 자릿수, 소수 자릿수 및 참조된 요소의 값입니다.
비교 또는 논리 연산자를 사용하여 두 식을 결합하면 결과 데이터 형식은 부울이고 값은 다음과 TRUE
FALSE
UNKNOWN
같습니다. 부울 데이터 형식에 대한 자세한 내용은 비교 연산자를 참조 하세요.
산술, 비트 또는 문자열 연산자를 사용하여 두 식을 결합하면 연산자에 따라 결과 데이터 형식이 결정됩니다.
복합 식은 많은 기호로 구성되며 연산자는 단일 값의 결과로 평가됩니다. 결과 식의 데이터 형식, 데이터 정렬, 전체 자릿수 및 값은 최종 결과에 도달할 때까지 한 번에 두 개씩 구성 요소 식을 결합하여 결정됩니다. 식이 결합되는 순서는 식의 연산자 우선 순위에 따라 정의됩니다.
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 */