Esto es algo que me molestó mucho en la escuela.
Hace cinco años, cuando aprendí SQL, siempre me pregunté por qué primero especificamos los campos que queremos y luego de dónde los queremos.
Según mi idea, deberíamos escribir:
From Employee e
Select e.Name
Entonces, ¿por qué la norma dice lo siguiente?
Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is
Me llevó semanas comprender SQL, y sé que gran parte de ese tiempo fue consumido por el orden incorrecto de los elementos.
Es como escribir en C #:
string name = employee.Name;
var employee = this.GetEmployee();
Entonces, supongo que tiene una razón histórica. ¿Por qué?
Linq
no haber usado laSQL
sintaxis estandarizada .Respuestas:
Originalmente, el lenguaje SQL se llamaba SEQUEL, que significa
con énfasis en el inglés , suponiendo que esté cerca en la ortografía del lenguaje natural .
Ahora, deletrea estas dos frases como deletreas oraciones en inglés:
El segundo suena más cerca del idioma inglés natural, por eso se establece como norma.
Por cierto, el mismo razonamiento se aplica a
Where
etc. Las instrucciones SQL fueron diseñadas intencionalmente para sonar cercanas al lenguaje natural.fuente
Porque SELECT se requiere en una instrucción select y FROM no.
Por supuesto, su instrucción sql se puede analizar para buscar SELECT, DELETE, UPDATE después de FROM, pero ¿es realmente tan importante?
Recuerde, todo esto se hizo antes de intellisense. No es tan complicado.
Editar: Probablemente no haya ninguna razón por la que los intérpretes sql no puedan construirse para hacer ambas cosas.
fuente
FROM myTable;
lugar deFROM myTable SELECT *
; Esto solo parece un requisito porque es lo que solías hacer.FROM
se requiere SQL . Esta es la razón por la cual muchos RDBMS tienen una tabla llamadaDUAL
u otra tabla ficticia de una sola filaSELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber
.No sé una respuesta que pueda respaldar por referencias, pero si tuviera que especular: SQL es un lenguaje declarativo , una declaración de dicho lenguaje describe lo que le gustaría hacer en lugar de cómo le gustaría hacerlo.
Como tal, "SELECCIONAR X DE Y" suena como una forma más apropiada de responder "Qué me gustaría seleccionar de la base de datos", en lugar de escribir "DE Y SELECCIONAR X".
Además, en SQL, SELECT / UPDATE / INSERT especifica el tipo de operación que está a punto de realizar y FROM es solo una cláusula que lo ayuda a seleccionar de la tabla correcta en la base de datos. Nuevamente, lo que está haciendo con los datos tiene prioridad sobre cómo exactamente va a lograr eso.
fuente
SQL es un lenguaje de consulta estructurado dirigido a hablantes de inglés. SELECT, INSERT, UPDATE y DELETE son comandos imperativos. En inglés, los comandos imperativos comienzan la oración o enunciado. Comparar:
a
SQL sigue el segundo formato (imperativo). Además, los cuatro comandos imperativos tienen tres formatos significativamente diferentes. Considerar:
o
Si conoce la acción que está realizando, es más fácil seleccionar el formato correcto.
En el caso de select, usted determina qué atributos desea y luego agrega las tablas que los tienen. A medida que crea los criterios de selección, puede agregar tablas adicionales. Cuando agrega criterios dinámicamente, generalmente se puede hacer al final de una parte estática de la consulta.
fuente
UPDATE ... FROM
No es una estructura de tipo inglés, OMI. No es que tenga mejores sugerencias ...Las declaraciones SQL comienzan con verbos. Esa fue la elección de los diseñadores de idiomas, y muchos lenguajes de programación funcionan de esa manera. Semánticamente, no es raro ver lenguajes de programación que funcionan así:
Además, en el caso de la instrucción SELECT que proporcione como ejemplo, la sintaxis propuesta pondría el objeto primero en la instrucción. En lugar de un orden de oración VSO (verbo, sujeto, objeto), tendría OVS, que sería muy extraño en comparación con los lenguajes naturales. SVO (por ejemplo, inglés), VSO (por ejemplo, árabe) y SOV (por ejemplo, latín) son aproximaciones más razonables del habla humana.
fuente
Creo que complicaría significativamente el análisis, especialmente con subconsultas, por ejemplo
Analizar esto sería más complicado. No podría decir que la ACTUALIZACIÓN fue un error de sintaxis hasta que haya analizado la cláusula FROM, y el analizador tendría que recordar suficiente contexto para saber que estaba analizando una subconsulta. No creo que las actualizaciones estén permitidas en las subconsultas de todos modos, pero si lo fueran (tal vez con una cláusula RETURNING), entonces es posible que no pueda decir que esto no es válido hasta que haya analizado la instrucción SELECT.
Esto al menos aumentaría k (búsqueda anticipada) para la gramática y, en el peor de los casos, lo haría sensible al contexto, aunque esto está ampliando los límites de mis trabajos de diseño de compiladores bastante poco recordados de la universidad.
fuente
QUEL
eso fue desarrollado aproximadamente al mismo tiempo, el orden de las cláusulas de sintaxis es lo que sugiere el OP.