Это то, что меня очень беспокоило в школе.
Пять лет назад, когда я изучал SQL, я всегда задавался вопросом, почему мы сначала указываем поля, которые хотим, а затем, откуда мы их хотим.
Согласно моей идее, мы должны написать:
From Employee e
Select e.Name
Так почему же норма говорит следующее?
Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is
Мне потребовались недели, чтобы понять SQL, и я знаю, что много этого времени было потрачено на неправильный порядок элементов.
Это как писать в C #:
string name = employee.Name;
var employee = this.GetEmployee();
Итак, я предполагаю, что у этого есть историческая причина. Почему?
Linq
чтобы не могли использовать стандартизированныйSQL
синтаксис.Ответы:
Первоначально язык SQL назывался SEQUEL, обозначая
с упором на английский , предполагая, что он близок к написанию на естественном языке.
Теперь произнесите эти два утверждения так же, как и английские предложения:
Второй звучит ближе к естественному английскому языку, поэтому он считается нормой.
Кстати, то же самое относится и к
Where
т. Д. - операторы SQL были специально разработаны, чтобы звучать близко к естественному языку.источник
Потому что SELECT требуется в операторе выбора, а FROM - нет.
Конечно, ваш оператор SQL может быть проанализирован для поиска SELECT, DELETE, UPDATE после FROM, но действительно ли это так важно?
Помните, все это было сделано до осмысления. Это не так сложно.
Редактировать: Вероятно, нет причин, по которым SQL-интерпретаторы не могут быть созданы для обеих целей
источник
FROM myTable;
вместоFROM myTable SELECT *
; Это только кажется требованием, потому что это то, к чему вы привыкли.FROM
требуется. Вот почему во многих РСУБД есть таблица с именемDUAL
или другаяSELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber
,Не знаю ответа, который я мог бы подтвердить ссылками, но если бы мне пришлось размышлять: SQL - декларативный язык , оператор такого языка описывает то, что вы хотели бы сделать, а не то, как вы хотели бы это сделать.
Таким образом, «SELECT X FROM Y» звучит как более подходящий способ ответить «Что бы я хотел выбрать из базы данных», а не писать «FROM Y SELECT X».
Кроме того, в SQL SELECT / UPDATE / INSERT указывает тип операции, которую вы собираетесь выполнить, а FROM - это просто предложение, которое помогает вам выбрать нужную таблицу в базе данных. Опять же, то , что вы делаете с данными, имеет приоритет над тем, как именно вы собираетесь этого достичь.
источник
SQL - это язык структурированных запросов, ориентированный на носителей английского языка. SELECT, INSERT, UPDATE и DELETE являются обязательными командами. В английском языке императивные команды начинают предложение или утверждение. Для сравнения:
в
SQL следует второму (обязательному) формату. Также четыре императивные команды имеют три существенно разных формата. Рассмотреть возможность:
или же
Если вы знаете, какое действие вы предпринимаете, проще выбрать правильный формат.
В случае выбора вы определяете, какие атрибуты вы хотите, а затем добавляете таблицы, которые имеют их. По мере построения критериев выбора вы можете добавлять дополнительные таблицы. Когда вы динамически добавляете критерии, это обычно можно сделать в конце статической части запроса.
источник
UPDATE ... FROM
это не англоязычная структура, IMO. Не то чтобы у меня были лучшие предложения ...Операторы SQL начинаются с глаголов. Это был выбор разработчиков языков, и многие языки программирования работают именно так. Семантически, это не редкость видеть языки программирования, которые работают так:
Кроме того, в случае оператора SELECT, который вы приводите в качестве примера, предложенный вами синтаксис помещает объект на первое место в операторе. Вместо порядка предложений VSO (глагол, субъект, объект) у вас будет OVS, что будет очень странно по сравнению с естественными языками. SVO (например, английский), VSO (например, арабский) и SOV (например, латинский) являются более разумными приближениями человеческой речи.
источник
Я думаю, что это значительно усложнит анализ, особенно с подзапросами, например
Разбор это было бы более сложным. Вы не могли бы сказать, что UPDATE была синтаксической ошибкой, пока вы не проанализировали предложение FROM, и парсер должен был запомнить достаточно контекста, чтобы знать, что он анализирует подзапрос. Я не думаю, что обновления допустимы в подзапросах в любом случае, но если бы они были (возможно, с предложением RETURNING), то вы не сможете сказать, что это недопустимо, пока не проанализируете инструкцию SELECT.
Это, по крайней мере, увеличило бы k (перспектива) для грамматики и в худшем случае сделало бы ее контекстно-зависимой, хотя это расширяет границы моих довольно смутно запомненных работ по проектированию компиляторов из университета.
источник
QUEL
которая была разработана примерно в то же время, порядок предложений синтаксиса - это то, что предлагает OP.