Isso é algo que me incomodou muito na escola.
Há cinco anos, quando aprendi SQL, sempre me perguntei por que primeiro especificamos os campos que queremos e depois de onde os queremos.
De acordo com a minha ideia, devemos escrever:
From Employee e
Select e.Name
Então, por que a norma diz o seguinte?
Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is
Levei semanas para entender o SQL e sei que muito desse tempo foi consumido pela ordem errada dos elementos.
É como escrever em C #:
string name = employee.Name;
var employee = this.GetEmployee();
Então, suponho que tenha uma razão histórica. Por quê?
Linq
não ter usado aSQL
sintaxe padronizada .Respostas:
Originalmente, a linguagem SQL era chamada SEQUEL, representando
com ênfase no inglês , supondo que ele seja próximo na ortografia para o idioma natural .
Agora, soletre essas duas instruções da mesma forma que você soletraria frases em inglês:
O segundo soa mais próximo do idioma inglês natural, por isso é definido como norma.
Entre o mesmo raciocínio,
Where
etc - as instruções SQL foram projetadas intencionalmente para soarem próximas à linguagem natural.fonte
Porque SELECT é necessário em uma instrução select e FROM não é.
É claro que sua instrução sql pode ser analisada para procurar SELECT, DELETE, UPDATE após o FROM, mas será que isso é realmente importante?
Lembre-se, tudo isso foi feito antes do senso comum. Não é tão complicado.
Edit: Provavelmente não há razão para que os intérpretes sql não possam ser criados para fazer as duas coisas.
fonte
FROM myTable;
vez deFROM myTable SELECT *
; Isso só parece um requisito, porque é o que você costumava fazer.FROM
é necessário. É por isso que muitos RDBMSs têm uma tabela chamadaDUAL
ou outra tabela fictícia de linha únicaSELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber
.Não sei uma resposta que eu poderia fazer backup por referências, mas se eu tivesse que especular: SQL é uma linguagem declarativa , uma declaração dessa linguagem descreve o que você gostaria de fazer, em vez de como gostaria de fazê-lo.
Assim, "SELECT X FROM Y" soa como uma maneira mais apropriada de responder "O que eu gostaria de selecionar no banco de dados", em vez de escrever "FROM Y SELECT X".
Além disso, no SQL, SELECT / UPDATE / INSERT especifica o tipo de operação que você está prestes a executar e FROM é apenas uma cláusula que ajuda a selecionar a tabela correta no banco de dados. Novamente, o que você está fazendo com dados tem precedência sobre como exatamente você vai conseguir isso.
fonte
SQL é uma linguagem de consulta estruturada direcionada para falantes de inglês. SELECT, INSERT, UPDATE e DELETE são comandos imperativos. Em inglês, comandos imperativos iniciam a sentença ou declaração. Comparar:
para
SQL segue o segundo formato (imperativo). Além disso, os quatro comandos imperativos têm três formatos significativamente diferentes. Considerar:
ou
Se você conhece a ação que está realizando, é mais fácil selecionar o formato correto.
No caso de select, você determina quais atributos deseja e depois adiciona as tabelas que os possuem. Ao criar os critérios de seleção, você pode adicionar tabelas adicionais. Quando você adiciona critérios dinamicamente, geralmente isso pode ser feito no final de uma parte estática da consulta.
fonte
UPDATE ... FROM
não é uma estrutura semelhante ao inglês, IMO. Não que eu tenha sugestões melhores ...As instruções SQL começam com verbos. Essa foi a escolha dos designers de linguagem, e muitas linguagens de programação funcionam dessa maneira. Semanticamente, não é incomum ver linguagens de programação que funcionam assim:
Além disso, no caso da instrução SELECT que você fornece como exemplo, sua sintaxe proposta colocaria o objeto em primeiro lugar na instrução. Em vez de uma ordem de sentença VSO (verbo, assunto, objeto), você teria OVS, o que seria muito estranho quando comparado às linguagens naturais. SVO (por exemplo, inglês), VSO (por exemplo, árabe) e SOV (por exemplo, latim) são aproximações mais razoáveis da fala humana.
fonte
Eu acho que isso complicaria significativamente a análise, especialmente com subconsultas, por exemplo
Analisar isso seria mais complicado. Você não poderia dizer que o UPDATE era um erro de sintaxe até ter analisado a cláusula FROM, e o analisador precisaria lembrar o contexto suficiente para saber que estava analisando uma subconsulta. Eu não acho que as atualizações sejam permitidas nas subconsultas, mas se elas foram (talvez com uma cláusula RETURNING), talvez você não consiga dizer que isso é inválido até ter analisado a instrução SELECT.
Isso aumentaria pelo menos k (lookahead) para a gramática e, na pior das hipóteses, o tornaria sensível ao contexto, embora isso esteja ampliando os limites dos meus trabalhos de design de compilador pouco lembrados da universidade.
fonte
QUEL
isso foi desenvolvido na mesma época em que a ordem das cláusulas de sintaxe é o que o OP sugere.