次のルールによって、MySQL での式の構文が定義されます。ここで示す文法は、MySQL ソース配布の sql/sql_yacc.yy
ファイルで与えられた文法に基づいています。一部の条件に関する追加情報については、文法のあとに表示される注意事項を参照してください。
expr:
expr OR expr
| expr || expr
| expr XOR expr
| expr AND expr
| expr && expr
| NOT expr
| ! expr
| boolean_primary IS [NOT] {TRUE | FALSE | UNKNOWN}
| boolean_primary
boolean_primary:
boolean_primary IS [NOT] NULL
| boolean_primary <=> predicate
| boolean_primary comparison_operator predicate
| boolean_primary comparison_operator {ALL | ANY} (subquery)
| predicate
comparison_operator: = | >= | > | <= | < | <> | !=
predicate:
bit_expr [NOT] IN (subquery)
| bit_expr [NOT] IN (expr [, expr] ...)
| bit_expr [NOT] BETWEEN bit_expr AND predicate
| bit_expr SOUNDS LIKE bit_expr
| bit_expr [NOT] LIKE simple_expr [ESCAPE simple_expr]
| bit_expr [NOT] REGEXP bit_expr
| bit_expr
bit_expr:
bit_expr | bit_expr
| bit_expr & bit_expr
| bit_expr << bit_expr
| bit_expr >> bit_expr
| bit_expr + bit_expr
| bit_expr - bit_expr
| bit_expr * bit_expr
| bit_expr / bit_expr
| bit_expr DIV bit_expr
| bit_expr MOD bit_expr
| bit_expr % bit_expr
| bit_expr ^ bit_expr
| bit_expr + interval_expr
| bit_expr - interval_expr
| simple_expr
simple_expr:
literal
| identifier
| function_call
| simple_expr COLLATE collation_name
| param_marker
| variable
| simple_expr || simple_expr
| + simple_expr
| - simple_expr
| ~ simple_expr
| ! simple_expr
| BINARY simple_expr
| (expr [, expr] ...)
| ROW (expr, expr [, expr] ...)
| (subquery)
| EXISTS (subquery)
| {identifier expr}
| match_expr
| case_expr
| interval_expr
注:
演算子の優先順位については、セクション12.3.1「演算子の優先順位」を参照してください。
リテラル値の構文については、セクション9.1「リテラル値」を参照してください。
識別子の構文については、セクション9.2「スキーマオブジェクト名」を参照してください。
変数には、ユーザー変数、システム変数、ストアドプログラムのローカル変数またはパラメータがあります。
ユーザー変数: セクション9.4「ユーザー定義変数」
システム変数: セクション5.1.5「システム変数の使用」
パラメータ: セクション13.1.15「CREATE PROCEDURE および CREATE FUNCTION 構文」
param_marker
は、準備されたステートメントでプレースホルダーに使用されているように ?
です。セクション13.5.1「PREPARE 構文」を参照してください。
(
は、単一の値を返すサブクエリー、つまりスカラーサブクエリーを示します。セクション13.2.10.1「スカラーオペランドとしてのサブクエリー」を参照してください。
subquery
)
{
は、ODBC エスケープ構文であり、ODBC との互換性のために認められています。値は identifier
expr
}expr
です。構文内のカールした中括弧は文字どおりに書き込まれる必要があります。それらは構文説明の別の部分で利用されているようなメタ構文ではありません。
match_expr
は MATCH
式を示します。セクション12.9「全文検索関数」を参照してください。
case_expr
は CASE
式を示します。セクション12.4「制御フロー関数」を参照してください。
interval_expr
は時間間隔を表します。構文は INTERVAL
です。ここで expr
unit
unit
は HOUR
、DAY
、WEEK
などの指定子です。unit
指定子の完全なリストについては、セクション12.7「日付および時間関数」の DATE_ADD()
関数の説明を参照してください。
一部の演算子の意味は、SQL モードによって異なります。
デフォルトでは、
||
は論理OR
演算子です。PIPES_AS_CONCAT
が有効になっている場合は、||
は^
と単項演算子間の優先順位を持つ文字列連結です。デフォルトでは、
!
はNOT
よりも高い優先順位です。HIGH_NOT_PRECEDENCE
が有効になっている場合は、!
とNOT
の優先順位は同じです。
セクション5.1.7「サーバー SQL モード」を参照してください。