Spec-Zone.ru › MariaDB

Порядок Преcedence Операторов

Порядок precedence — это порядок, в котором оцениваются операторы SQL.

Следующий список показывает порядок precedence операторов SQL. Операторы, которые появляются первыми в списке, имеют более высокий precedence. Операторы, которые перечислены вместе, имеют одинаковый precedence.

  • INTERVAL
  • BINARY, COLLATE
  • !
  • - (унарный минус), [[bitwise-not|]] (унарное побитовое отрицание)
  • || (конкатенация строк)
  • ^
  • *, /, DIV, %, MOD
  • -, +
  • <<, >>
  • &
  • |
  • = (сравнение), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
  • BETWEEN, CASE, WHEN, THEN, ELSE, END
  • NOT
  • &&, AND
  • XOR
  • || (логическое или), OR
  • = (присваивание), :=

Precedence функций всегда выше, чем precedence операторов.

На этой странице CASE относится к оператору CASE, а не к оператору CASE.

Если HIGH_NOT_PRECEDENCE значение SQL_MODE установлено, NOT имеет тот же precedence, что и !.

Precedence оператора ||, а также его значение, зависит от флага PIPES_AS_CONCAT SQL_MODE: если он включен, || может использоваться для конкатенации строк (как функция CONCAT()) и имеет более высокий precedence.

Precedence оператора = зависит от контекста — он выше, когда = используется как оператор сравнения.

Скобки могут использоваться для изменения precedence операторов в выражении.

Краткое вычисление

Операторы AND, OR, && и || поддерживают краткое вычисление. Это означает, что в некоторых случаях выражение справа от этих операторов не оценивается, потому что его результат не может повлиять на результат. В следующих случаях используется краткое вычисление, и x() не оценивается:

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

Однако следует отметить, что краткое вычисление не применяется к NULL AND x(). Кроме того, правые операнды BETWEEN не оцениваются, если левый операнд NULL, но во всех других случаях все операнды оцениваются.

Это оптимизация производительности. Кроме того, поскольку функции могут иметь побочные эффекты, это поведение можно использовать для выбора, выполнять ли их или нет, используя лаконичный синтаксис:

SELECT some_function() OR log_error();
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/operator-precedence/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API