The following rules define expression syntax in MySQL. The grammar
shown here is based on that given in the
sql/sql_yacc.yy
file of MySQL source
distributions. See the notes after the grammar for additional
information about some of the terms. Operator precedence is given
in Section 11.3.1, “Operator Precedence”.
expr
:expr
ORexpr
|expr
||expr
|expr
XORexpr
|expr
ANDexpr
|expr
&&expr
| NOTexpr
| !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] BETWEENbit_expr
ANDpredicate
|bit_expr
SOUNDS LIKEbit_expr
|bit_expr
[NOT] LIKEsimple_expr
[ESCAPEsimple_expr
] |bit_expr
[NOT] REGEXPbit_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
DIVbit_expr
|bit_expr
MODbit_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
COLLATEcollation_name
|param_marker
|variable
|simple_expr
||simple_expr
| +simple_expr
| -simple_expr
| ~simple_expr
| !simple_expr
| BINARYsimple_expr
| (expr
[,expr
] ...) | ROW (expr
,expr
[,expr
] ...) | (subquery
) | EXISTS (subquery
) | {identifier
expr
} |match_expr
|case_expr
|interval_expr
Notes:
For literal value syntax, see Section 8.1, “Literal Values”.
For identifier syntax, see Section 8.2, “Schema Object Names”.
Variables can be user variables, system variables, or stored program local variables or parameters:
User variables: Section 8.4, “User-Defined Variables”
System variables: Section 5.1.5, “Using System Variables”
Local variables: Section 12.7.3.1, “
DECLARE
for Local Variables”Parameters: Section 12.1.12, “
CREATE PROCEDURE
andCREATE FUNCTION
Syntax”
param_marker
is '?'
as used in prepared statements for placeholders. See
Section 12.6.1, “PREPARE
Syntax”.
(
indicates
a subquery that returns a single value; that is, a scalar
subquery. See Section 12.2.10.1, “The Subquery as Scalar Operand”.
subquery
)
{
is ODBC escape syntax
and is accepted for ODBC compatibility. The value is
identifier
expr
}expr
. The curly braces in the syntax
should be written literally; they are not metasyntax as used
elsewhere in syntax descriptions.
match_expr
indicates a
MATCH
expression. See
Section 11.9, “Full-Text Search Functions”.
case_expr
indicates a
CASE
expression. See
Section 11.4, “Control Flow Functions”.
interval_expr
represents a time
interval. The syntax is INTERVAL
, where
expr
unit
unit
is a specifier such as
HOUR
, DAY
, or
WEEK
. For the full list of
unit
specifiers, see the description of
the DATE_ADD()
function in
Section 11.7, “Date and Time Functions”.
The meaning of some operators depends on the SQL mode:
By default,
||
is a logicalOR
operator. WithPIPES_AS_CONCAT
enabled,||
is string concatenation, with a precedence between^
and the unary operators.By default,
!
has a higher precedence thanNOT
. WithHIGH_NOT_PRECEDENCE
enabled,!
andNOT
have the same precedence.