SQL: порядок выражений в сравнении SQL

#sql

#sql

Вопрос:

Уместен ли порядок выражений в инструкции compare? Например:

 select * from person where name = 'John'
  

и

 select * from person where 'John' = name
  

Есть ли другая причина, помимо удобства чтения, для того, чтобы сначала указывать столбец вместо значения?

Комментарии:

1. Нет, это не имеет значения.

2. Есть ли какая-либо причина, кроме отсутствия удобочитаемости, для помещения значения первым?

Ответ №1:

В документации большинства систем баз данных SQL будут разделы, явно описывающие их синтаксис. Я буду использовать условие поиска SQL Servers 1, поскольку это моя самая распространенная ссылка:

 <search_condition> ::=  
    MATCH(<graph_search_pattern>) | <search_condition_without_match> | <search_condition> AND <search_condition>

<search_condition_without_match> ::= 
    { [ NOT ] <predicate> | ( <search_condition_without_match> ) }   
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition_without_match> ) } ]   
[ ...n ]   
  
<predicate> ::=   
    { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression
  

Здесь мы можем видеть, что элементы с обеих сторон = (а также многие другие операторы) описываются как expression — то есть все, что может появиться слева, может одинаково хорошо появиться справа.

Сравните это, например, с IN 2:

 | expression [ NOT ] IN ( subquery | expression [ ,...n ] )
  

где мы можем ясно видеть, что то, что разрешено слева и справа, немного отличается.

Если у вас есть вопросы по синтаксису, стоит обратиться к соответствующей документации для вашего продукта базы данных. Для стандартного SQL, как здесь, подойдет документация практически любого продукта.


1, который, в свою очередь, был получен из документации для WHERE

2 Та же страница, что и <predicate>

Комментарии:

1. Спасибо за понимание, Damien_The_Unbeliever!