Curso de MariaDB Desde la Consola/Precedencia de operadores

De WikiCabal
Saltar a: navegación, buscar

Precedencia de operdores

    INTERVAL
    BINARY, COLLATE
    !
    - (unary minus), [[bitwise-not|bitwise-not]] (unary bit inversion)
    || (string concatenation)
    ^
    *, /, DIV, %, MOD
    -, +
    <<, >>
    &
    |
    = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
    BETWEEN, CASE, WHEN, THEN, ELSE, END
    NOT
    &&, AND
    XOR
    || (logical or), OR
    = (assignment), := 

Precedencia de las funciones es siempre superior a la precedencia 
de los operadores.

En esta página el CASE se refiere al operador CASE, no al 
Declaración del CASE.

Si el HIGH_NOT_PRECEDENCE SQL_MODE se establece,
NOT tiene la misma precedencia como '!'.

La precedencia del || operador, así como su significado, depende de
la bandera de PIPES_AS_CONCAT SQL_MODE: Si está encendido, || se puede 
utilizar para concatenar cadenas (como la función CONCAT()) y tiene 
una mayor prioridad.

Pueden utilizar paréntesis para modificar la precedencia de los 
operadores en una expresión.

La precedencia del '=' operador depende del contexto: 
es mayor cuando '=' se utiliza como un operador de comparación.

Short-circuit evaluation

Los AND, OR, && y || operadores soportan evaluación de short-circuit.
Esto significa que, en algunos casos, la expresión a la derecha de los
operadores no se evalúa, porque su resultado no puede afectar el resultado.
Evaluación de short-circuit sw utiliza en los siguientes casos 
y x() no es evaluado:

    FALSE AND x()
    FALSE && x()
    TRUE OR x()
    TRUE || x()
    NULL BETWEEN x() AND x() 

Nota sin embargo que la evaluación de short-circuit no se aplica a NULL
y x(). Además, los operandos de la derecha de BETWEEN
no se evalúan si el operando del izquierda es NULL, pero en los demás 
casos se evalúan todos los operandos.

Esto es una optimización de la velocidad. También, puesto que las funciones 
pueden tener efectos secundarios, este comportamiento se puede utilizar para 
elegir si ejecutar ellos o no usando un sintaxis concisa:

SELECT alguna_funcción() OR log_error();