式 (Transact-SQL)Expressions (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

SQL Server データベース エンジンSQL Server Database Engineによって 1 つのデータ値を取得するために評価される、記号と演算子の組み合わせです。Is a combination of symbols and operators that the SQL Server データベース エンジンSQL Server Database Engine evaluates to obtain a single data value. 単純式には、1 つの定数、変数、列、またはスカラー関数を指定できます。Simple expressions can be a single constant, variable, column, or scalar function. 演算子を使用すると、2 つ以上の単純式を結合して、複合式を作成できます。Operators can be used to join two or more simple expressions into a complex expression.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- 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 SQL Data Warehouse 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 ]  
  

引数Arguments

期間Term 定義Definition
constantconstant 1 つの特定のデータ値を表す記号です。Is a symbol that represents a single, specific data value. 詳細については、「定数 (Transact-SQL)」を参照してください。For more information, see Constants (Transact-SQL).
scalar_functionscalar_function 特定のサービスを提供し、単一の値を返す Transact-SQLTransact-SQL 構文の単位です。Is a unit of Transact-SQLTransact-SQL syntax that provides a specific service and returns a single value. scalar_function には、組み込みの SUM 関数、GETDATE 関数、または CAST 関数、スカラー ユーザー定義関数などのスカラー関数を指定できます。scalar_function can be built-in scalar functions, such as the SUM, GETDATE, or CAST functions, or scalar user-defined functions.
[ table_name .[ table_name. ]] テーブルの名前または別名です。Is the name or alias of a table.
columncolumn 列の名前です。Is the name of a column. 式では列の名前だけが許可されます。Only the name of the column is allowed in an expression.
variablevariable 変数名、またはパラメーターです。Is the name of a variable, or parameter. 詳細については、「DECLARE @local_variable (Transact-SQL)」を参照してください。For more information, see DECLARE @local_variable (Transact-SQL).
( expression )( expression ) このトピックで定義されている有効な式を指定します。Is any valid expression as defined in this topic. かっこはグループ化の演算子です。かっこ内の式のすべての演算子は最初に評価され、その後で結果の式が別の式と結合されます。The parentheses are grouping operators that make sure that all the operators in the expression within the parentheses are evaluated before the resulting expression is combined with another.
( scalar_subquery )( scalar_subquery ) 1 つの値を返すサブクエリを指定します。Is a subquery that returns one value. 次に例を示します。For example:

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator }{ unary_operator } 単項演算子を適用できるのは、数値型に属するいずれかのデータ型に評価される式だけです。Unary operators can be applied only to expressions that evaluate to any one of the data types of the numeric data type category. 1 つの数値オペランドだけを含む演算子を指定します。Is an operator that has only one numeric operand:

+ は正の値を示します。+ indicates a positive number.

- は負の値を示します。- indicates a negative number.

~ は 1 の補数演算子を示します。~ indicates the one's complement operator.
{ binary_operator }{ binary_operator } 2 つの式を結合して 1 つの結果を生成する方法を定義する演算子を指定します。Is an operator that defines the way two expressions are combined to yield a single result. binary_operator には、算術演算子、代入演算子 (=)、ビットごとの演算子、比較演算子、論理演算子、文字列の連結演算子 (+)、または単項演算子を指定できます。binary_operator can be an arithmetic operator, the assignment operator (=), a bitwise operator, a comparison operator, a logical operator, the string concatenation operator (+), or a unary operator. 演算子の詳細については、「演算子 (Transact-SQL)」を参照してください。For more information about operators, see Operators (Transact-SQL).
ranking_windowed_functionranking_windowed_function 任意の Transact-SQLTransact-SQL 順位付け関数です。Is any Transact-SQLTransact-SQL ranking function. 詳細については、「順位付け関数 (Transact-SQL)」を参照してください。For more information, see Ranking Functions (Transact-SQL).
aggregate_windowed_functionaggregate_windowed_function OVER 句を含む任意の Transact-SQLTransact-SQL 集計関数です。Is any Transact-SQLTransact-SQL aggregate function with the OVER clause. 詳細については、を参照してください。 OVER 句 (Transact-SQL).For more information, see OVER Clause (Transact-SQL).

式の結果Expression Results

1 つの定数、変数、スカラー関数、または列名で構成される単純式の場合、式のデータ型、照合順序、有効桁数、小数点以下桁数、および値は、参照される要素のデータ型、照合順序、有効桁数、小数点以下桁数、および値になります。For a simple expression made up of a single constant, variable, scalar function, or column name: the data type, collation, precision, scale, and value of the expression is the data type, collation, precision, scale, and value of the referenced element.

2 つの式が比較演算子または論理演算子で結合される場合、取得される結果のデータ型は Boolean で、TRUE、FALSE、UNKNOWN のいずれかの値をとります。When two expressions are combined by using comparison or logical operators, the resulting data type is Boolean and the value is one of the following: TRUE, FALSE, or UNKNOWN. ブール データ型の詳細については、「比較演算子 (Transact-SQL)」を参照してください。For more information about Boolean data types, see Comparison Operators (Transact-SQL).

2 つの式が、算術演算子、ビットごとの演算子、または文字列演算子で結合される場合、取得される結果のデータ型は演算子によって決まります。When two expressions are combined by using arithmetic, bitwise, or string operators, the operator determines the resulting data type.

複数の記号と演算子で構成される複合式は、単一の値をとる結果に評価されます。Complex expressions made up of many symbols and operators evaluate to a single-valued result. 結果の式のデータ型、照合順序、有効桁数、および値は、構成要素の式を一度に 2 つずつ結合して取得される最終結果によって決まります。The data type, collation, precision, and value of the resulting expression is determined by combining the component expressions, two at a time, until a final result is reached. 式の結合順序は、式の中の演算子の優先順位で定義されます。The sequence in which the expressions are combined is defined by the precedence of the operators in the expression.

解説Remarks

2 つの式を演算子で結合できるのは、その演算子で両方のデータ型がサポートされており、次に示す条件の少なくとも 1 つが TRUE の場合です。Two expressions can be combined by an operator if they both have data types supported by the operator and at least one of these conditions is true:

  • 式のデータ型が等しい。The expressions have the same data type.

  • 優先順位の低いデータ型を、優先順位の高いデータ型に暗黙的に変換できる。The data type with the lower precedence can be implicitly converted to the data type with the higher data type precedence.

式がこれらの条件を満たしていない場合は、CAST 関数または CONVERT 関数によって、低い優先順位のデータ型から高い優先順位のデータ型へ明示的に変換できます。または、高い優先順位のデータ型への暗黙的な変換が可能な中間のデータ型へ変換できます。If the expressions do not meet these conditions, the CAST or CONVERT functions can be used to explicitly convert the data type with the lower precedence to either the data type with the higher precedence or to an intermediate data type that can be implicitly converted to the data type with the higher precedence.

暗黙的または明示的な変換がサポートされない場合、2 つの式を結合することはできません。If there is no supported implicit or explicit conversion, the two expressions cannot be combined.

文字列として評価される式の照合順序は、照合順序の優先順位の規則に従って設定されます。The collation of any expression that evaluates to a character string is set by following the rules of collation precedence. 詳細については、「照合順序の優先順位 (Transact-SQL)」を参照してください。For more information, see Collation Precedence (Transact-SQL).

C や MicrosoftMicrosoft Visual BasicVisual Basic などのプログラミング言語の場合、式は常に単一の結果に評価されます。In a programming language such as C or MicrosoftMicrosoft Visual BasicVisual Basic, an expression always evaluates to a single result. Transact-SQLTransact-SQL 選択リストの式は次の規則のバリエーションに従います。式は、結果セット内の各行に対して個別に評価されます。Expressions in a Transact-SQLTransact-SQL select list follow a variation on this rule: The expression is evaluated individually for each row in the result set. 1 つの式が結果セット内の各行でそれぞれ異なる値をとることもあります。ただし、各行の値は式に対して 1 つだけです。A single expression may have a different value in each row of the result set, but each row has only one value for the expression. たとえば、次の SELECT ステートメントにおいて、選択リスト内の ProductID への参照と 1+2 の項は両方とも式です。For example, in the following SELECT statement both the reference to ProductID and the term 1+2 in the select list are expressions:

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

1+2 は、結果セット内の各行で 3 と評価されます。The expression 1+2 evaluates to 3 in each row in the result set. ProductID は、結果セットの各行で一意な値をとりますが、各行に格納される ProductID の値は 1 つだけです。Although the expression ProductID generates a unique value in each result set row, each row only has one value for ProductID.

  • Azure SQL Data Warehouse では各スレッドに固定された最大メモリ量が割り当てられるため、スレッドによってすべてのメモリが使い尽くされることはありません。Azure SQL Data Warehouse allocates a fixed maximum amount of memory to each thread so no thread can use up all the memory. このメモリの一部は、クエリの式を格納するために使用されます。Some of this memory is used for storing queries’ expressions. クエリに含まれる式が多すぎて、必要なメモリが内部制限を超えた場合、そのクエリはエンジンによって実行されません。If a query has too many expressions and its required memory exceeds the internal limit, the engine will not execute it. この問題を回避するために、ユーザーはクエリを複数のクエリに変更して、それぞれのクエリに含まれる式の数を減らすことができます。To avoid this problem, users can change the query into multiple queries with smaller number of expressions in each. たとえば、次のように WHERE 句に式の長いリストを含むクエリがあるとします。For example, you have a query with a long list of expressions in the WHERE clause:
DELETE FROM dbo.MyTable 
WHERE
(c1 = '0000001' AND c2 = 'A000001') or
(c1 = '0000002' AND c2 = 'A000002') or
(c1 = '0000003' AND c2 = 'A000003') or
...

このクエリは次のように変更します。Change this query to:

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');
...

参照See Also

AT TIME ZONE (Transact-SQL) AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL) CASE (Transact-SQL)
CAST および CONVERT (Transact-SQL) CAST and CONVERT (Transact-SQL)
COALESCE (Transact-SQL) COALESCE (Transact-SQL)
データ型の変換 (データベース エンジン) Data Type Conversion (Database Engine)
データ型の優先順位 (Transact-SQL) Data Type Precedence (Transact-SQL)
データ型 (Transact-SQL) Data Types (Transact-SQL)
組み込み関数 (Transact-SQL) Built-in Functions (Transact-SQL)
LIKE (Transact-SQL) LIKE (Transact-SQL)
NULLIF (Transact-SQL) NULLIF (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)