¿Por qué se selecciona antes de De en una consulta SQL? [cerrado]

67

Esto es algo que me molestó mucho en la escuela.

Hace cinco años, cuando aprendí SQL, siempre me preguntaba 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 tomó semanas entender 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, asumo que tiene una razón histórica. ¿Por qué?

    
pregunta Cyril Gandon 30.12.2011 - 14:34

6 respuestas

86

Originalmente el lenguaje SQL se llamaba SEQUEL para

  • Inglés estructurado Idioma de consulta
    con el énfasis en inglés , asumiendo que tiene una ortografía cercana al lenguaje natural .

Ahora, deletrea estas dos afirmaciones como deletrearías oraciones en inglés:

  1. "De la tabla de empleados e Seleccione la columna e.Nombre"
  2. "Seleccione la columna e.Nombre de la tabla de empleados e"

El segundo suena más cerca del idioma inglés natural, por eso se establece como norma.

Por cierto, el mismo razonamiento va a Where etc: las sentencias de SQL se diseñaron intencionalmente para que suenen cercanas al lenguaje natural.

    
respondido por el gnat 30.12.2011 - 14:43
37

Debido a que se requiere SELECT en una declaración de selección y FROM no lo es.

Select 'This String'

Por supuesto, se puede analizar su declaración SQL 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 razón para que los intérpretes de sql no puedan construirse para hacer ambas cosas.

    
respondido por el JeffO 30.12.2011 - 15:34
10

No sé una respuesta de la que pueda hacer una copia de seguridad por referencias, pero si tuviera que especular: SQL es un lenguaje declarativo , una declaración de dicho lenguaje describe qué le gustaría hacer en lugar de cómo le gustaría hacerlo.

Como tal, "SELECT X FROM Y" suena como una forma más adecuada de responder "¿Qué me gustaría seleccionar de la base de datos", en lugar de escribir "FROM Y SELECT 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 la tabla correcta en la base de datos. Una vez más, qué estás haciendo con los datos tiene prioridad sobre cómo exactamente lo lograrás.

    
respondido por el 0x4B1D 30.12.2011 - 14:47
5

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 declaración. Comparar:

West young man go!

a

Go west young man!

SQL sigue el segundo formato (imperativo). También los cuatro comandos imperativos tienen tres formatos significativamente diferentes. Considera:

FROM    employees a,
        accounts b
UPDATE  ...

o

INTO    customers a
SELECT  ...

Si conoce la acción que está realizando, es más fácil seleccionar el formato correcto.

En el caso de seleccionar, determina qué atributos desea y luego agrega las tablas que los tienen. A medida que construye los criterios de selección, puede agregar tablas adicionales. Cuando agrega criterios de forma dinámica, generalmente se puede hacer al final de una parte estática de la consulta.

    
respondido por el BillThor 01.01.2012 - 07:38
3

Las sentencias de SQL comienzan con verbos. Esa fue la elección de los diseñadores de lenguaje, y muchos lenguajes de programación funcionan de esa manera. Semánticamente, no es raro ver lenguajes de programación que funcionan así:

verb(noun, noun, noun);

También, en el caso de la instrucción SELECT que da como ejemplo, su sintaxis propuesta pondría el objeto primero en la declaración. En lugar de un orden de oraciones VSO (verbo, sujeto, objeto), tendría OVS, lo que sería muy extraño en comparación con los idiomas naturales. SVO (por ejemplo, inglés), VSO (por ejemplo, árabe) y SOV (por ejemplo, latín) son aproximaciones más razonables del habla humana.

    
respondido por el David Cloutman 21.03.2012 - 10:10
2

Creo que complicaría significativamente el análisis, especialmente con subconsultas, por ejemplo,

  FROM Foo f
  JOIN (FROM Bar b
        WHERE b.ID = f.ID
        UPDATE b
           SET b.Wibble = 1) x
    ON x.ID = f.ID
SELECT f.XYZ

Analizar esto sería más complicado. No se podría decir que la ACTUALIZACIÓN era un error de sintaxis hasta que hubiera analizado la cláusula FROM, y el analizador tendría que recordar el contexto suficiente para saber que se estaba analizando una subconsulta. No creo que las actualizaciones estén permitidas en subconsultas de todos modos, pero si fueran (tal vez con una cláusula RETURNING), entonces es posible que no puedas decir que esto no era válido hasta que hayas analizado la declaración SELECT.

Esto al menos aumentaría k (lookahead) para la gramática y, en el peor de los casos, la haría sensible al contexto, aunque esto está extendiendo los límites de mis documentos de diseño de compiladores de la universidad.     

respondido por el ConcernedOfTunbridgeWells 30.12.2011 - 19:12

Lea otras preguntas en las etiquetas