식(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
SQL Server에서 단일 데이터 값을 얻기 위해 평가할 데이터베이스 엔진 기호와 연산자의 조합입니다. 단순 식으로는 단일 상수, 변수, 열 또는 스칼라 함수가 있습니다. 연산자를 사용하면 두 개 이상의 단순 식을 결합하여 복합 식으로 만들 수 있습니다.
구문
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 ] ]
인수
constant
단일 특정 데이터 값을 나타내는 기호입니다. 자세한 내용은 상수를 참조하세요.
scalar_function
특정 서비스를 제공하고 단일 값을 반환하는 Transact-SQL 구문의 단위입니다. scalar_function , 함수 또는 CAST
스칼라 사용자 정의 함수와 같은 SUM
GETDATE()
기본 제공 스칼라 함수일 수 있습니다.
table_name
테이블의 이름 또는 별칭입니다.
column
열의 이름입니다. 식에는 열 이름만 사용할 수 있습니다.
variable
변수 또는 매개 변수의 이름입니다. 자세한 내용은 DECLARE @local_variable를 참조하세요.
expression
이 문서에 정의된 모든 유효한 식입니다. 괄호는 안에 있는 식의 모든 연산자를 평가한 후에 그 결과를 다른 식과 결합하는 그룹 연산자입니다.
scalar_subquery
하나의 값을 반환하는 하위 쿼리입니다. 예시:
SELECT MAX(UnitPrice)
FROM Products;
unary_operator
단항 연산자는 숫자 데이터 형식 범주의 데이터 형식 하나로 평가되는 식에 대해서만 적용할 수 있습니다. 단 하나의 숫자 피연산자만 있는 연산자입니다.
+
양수를 나타냅니다.-
음수를 나타냅니다.~
는 하나의 보수 연산자를 나타냅니다.
binary_operator
두 식이 결합되어 단일 결과를 생성하는 방법을 정의하는 연산자입니다. binary_operator 산술 연산자, 대입 연산자(=
), 비트 연산자, 비교 연산자, 논리 연산자, 문자열 연결 연산자(+
) 또는 단항 연산자일 수 있습니다. 연산자에 대한 자세한 내용은 연산자를 참조 하세요.
ranking_windowed_function
Transact-SQL 순위 함수입니다. 자세한 내용은 순위 함수를 참조 하세요.
aggregate_windowed_function
OVER 절이 있는 Transact-SQL 집계 함수입니다. 자세한 내용은 SELECT - OVER 절을 참조하세요.
식 결과
단일 상수, 변수, 스칼라 함수, 열 이름, 데이터 정렬, 전체 자릿수, 소수 자릿수 및 식의 값으로 이루어진 단순 식은 데이터 형식, 데이터 정렬, 전체 자릿수, 소수 자릿수 및 참조된 요소의 값입니다.
비교 또는 논리 연산자를 사용하여 두 식을 결합하면 결과 데이터 형식은 부울이고 값은 다음과 TRUE
FALSE
UNKNOWN
같습니다. 부울 데이터 형식에 대한 자세한 내용은 비교 연산자를 참조 하세요.
산술, 비트 또는 문자열 연산자를 사용하여 두 식을 결합하면 연산자에 따라 결과 데이터 형식이 결정됩니다.
복합 식은 많은 기호로 구성되며 연산자는 단일 값의 결과로 평가됩니다. 결과 식의 데이터 형식, 데이터 정렬, 전체 자릿수 및 값은 최종 결과에 도달할 때까지 한 번에 두 개씩 구성 요소 식을 결합하여 결정됩니다. 식이 결합되는 순서는 식의 연산자 우선 순위에 따라 정의됩니다.
설명
연산자가 지원하는 데이터 형식이 둘 다 있고 다음 조건 중 하나 이상이 true인 경우 두 식을 연산자가 결합할 수 있습니다.
식의 데이터 형식이 동일한 경우
우선 순위가 낮은 데이터 형식이 우선 순위가 높은 데이터 형식으로 암시적으로 변환될 수 있는 경우
식이 이러한 조건을 CAST
충족하지 않는 경우 또는 CONVERT
함수를 사용할 수 있습니다. CONVERT
우선 순위가 낮은 데이터 형식을 우선 순위가 높은 데이터 형식 또는 우선 순위가 높은 데이터 형식으로 암시적으로 변환할 수 있는 중간 데이터 형식으로 명시적으로 변환하거나 사용합니다CAST
.
지원되는 암시적 또는 명시적 변환이 없으면 두 식을 결합할 수 없습니다.
문자열로 평가되는 모든 식의 데이터 정렬은 선행 정렬 규칙에 따라 설정됩니다. 자세한 내용은 데이터 정렬 우선 순위를 참조하세요.
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 */