Почему SQL строг в отношении порядка предложений? - PullRequest
2 голосов
/ 23 марта 2011

Это работает:

SELECT * FROM users ORDER BY id LIMIT 5

Это не - выдает синтаксическую ошибку:

SELECT * FROM users LIMIT 5 ORDER BY id

Кажется, что SQL слишком строг в отношении порядка предложений.

Есть ли веские основания для такой строгости?

PS SELECT и FROM указывают источник данных, и я согласен, что в запросе должна быть определенная позиция.Другие пункты, тем не менее, просто «играют» с этими данными - они связаны с источником данных, но не друг с другом, поэтому тот факт, что они должны быть упорядочены определенным образом, не кажется мне очень интуитивным.

Ответы [ 6 ]

6 голосов
/ 23 марта 2011

Хью Дарвен считает, что в 1960-х годах для языков было модно быть таким:

Считаете ли вы SELECT-FROM-WHERE само собой разумеющимся или вы, как и я, находите это довольноЛюбопытно, что команда System R должна была отвергнуть обычный способ написания выражений произвольной сложности в пользу чего-то совершенно своеобразного и, можно сказать, довольно диктаторского ...?

Дело в том, что в 1960-е годы различныеЯзыки сценариев (как мы обычно называем такие вещи в наши дни) появились для целей генерации отчетов, особенно для генерации отчетов ad hoc.У нас был один такой язык в предреляционной СУБД, называемый Terminal Business System (TBS), над которым я работал в IBM с 1969 по 1977 годы.Наш язык требовал, чтобы пользователь указывал требуемый отчет в серии шагов, которые должны были быть даны в установленном порядке ...

Несколько более похожий, но гораздо более сложный генератор отчетов был позжеразработанный IBM в США, как часть продукта, названного (прозаично, как это было в стиле IBM в те дни) Обобщенной информационной системой (ГИС) ... когда я впервые взглянул на SQL, моей немедленной реакцией было: «О нет! СынГИС? Пожалуйста, не так!Возможно, я был совершенно неправ по этому поводу.Сходство, которое я воспринимал, могло быть иллюзорным, и даже если бы это было не так, у меня нет четких доказательств того, что кто-либо из команды System R был знаком с ГИС.Факт остается фактом, что общий стиль фиксированного порядка действий был порядок дня в то время.Я постулирую, что SQL SELECT-FROM-WHERE возник из этой моды.

С HAVING Грубое время

2 голосов
/ 23 марта 2011

Когда вы пишете на английском или другом языке, вы также используете определенную грамматику.Вы никогда не помещаете глагол в конце предложения на английском языке, но он используется на немецком языке.

В SQL то же самое, есть синтаксис, который вы должны соблюдать.
Вы также не пишететакой запрос FROM user SELECT * ORDER BY xy WHERE a=b

0 голосов
/ 23 марта 2011
Кроме 1000 * LIMIT (например, это TOP в SQL Server), есть логический ORDER для операторов SQL, который отражает порядок синтаксиса
  1. FROM
  2. WHERE
  3. GROUP BY
  4. CUBE / ROLLUP
  5. HAVING
  6. SELECT
  7. DISTINCT
  8. TOP / LIMIT
  9. ЗАКАЗАТЬBY

если заменить LIMIT на TOP, то это вполне очевидно

0 голосов
/ 23 марта 2011

Прежде всего, позвольте мне сказать вам

«Каждый язык имеет свои правила и нормы»

Мы должны следовать этим правилам.Нарушение любого вида правил (например, синтаксиса) любой команды приведет нас к ошибке.


Используйте предложение ORDER BY, чтобы указать порядок, в котором должны оцениваться ячейки в левой части правила.Выражение должно преобразовываться в столбец измерения или меры.Если предложение ORDER BY не указано, по умолчанию используется порядок столбцов, указанный в предложении DIMENSION BY.

Проверьте здесь для получения дополнительной информации:

0 голосов
/ 23 марта 2011

Парсер построен для скорости.Если вы разрешите несовместимый синтаксис, анализатору потребуется больше времени, чтобы выяснить, что нужно сделать.Это может оказать существенное влияние на производительность.

Кроме того, людям легче читать.

0 голосов
/ 23 марта 2011

Потому что это синтаксис MySQL: http://dev.mysql.com/doc/refman/5.0/en/select.html

...