Pregunta

En casi cualquier conjunto formalmente estructurada de la información, de empezar a leer, ya sea desde el principio hacia el final, o en ocasiones desde el final hacia el principio (direcciones de la calle, por ejemplo.) Pero en SQL, en especial las consultas de selección, con el fin para comprender adecuadamente su significado tiene que empezar en el medio, en la cláusula FROM. Esto puede hacer consultas largas muy difícil de leer, especialmente si contiene consultas SELECT anidadas.

Por lo general, en la programación, cuando algo no se parece tener ningún sentido, hay una razón histórica detrás de él. Comenzando con el SELECT en lugar de la DE no tiene sentido. ¿Alguien sabe la razón por la que se hace de esa manera?

¿Fue útil?

Solución

La entrada SQL Wikipedia se describe brevemente un poco de historia:

  

Durante la década de 1970, un grupo en el Laboratorio de Investigación de IBM en San José desarrolló el sistema de gestión de base de datos relacional Sistema R, basado en el modelo introducido por Edgar F. Codd en su influyente artículo, "un modelo relacional de datos para grandes bancos de datos compartidos ". Donald D. Chamberlin y Raymond F. Boyce de IBM posteriormente crearon el Inglés Estructurado (lenguaje de consulta SEQUEL) para manipular y gestionar los datos almacenados en el sistema R. La secuela acrónimo fue cambiado posteriormente a SQL porque "SEQUEL" era una marca comercial de la compañía de aviones Hawker Siddeley en el Reino Unido.

El nombre original menciona explícitamente Inglés , que explica la sintaxis.

Excavar un poco más, nos encontramos con el FLOW-MATIC lenguaje de programación.

  

FLOW-MATIC, originalmente conocido como B-0 (0 negocio Idioma), es, posiblemente, la primera Inglés-como el lenguaje de procesamiento de datos . Fue inventado y especifica por Grace Hopper, y el desarrollo de la variante comercial se inició a Remington Rand en 1955 para el UNIVAC I. En 1958, el compilador y su documentación fueron generalmente disponibles y se utilizan comercialmente.

FLOW-MATIC fue la inspiración detrás de la Lengua Common Business Oriented , uno de las lenguas más antiguas de programación todavía en uso activo. Siguiendo con ese espíritu, SEQUEL fue diseñado con Inglés-como la sintaxis (1970 es moderna, en comparación con los años 1950 y 1960).

En perspectiva, los sistemas de programación "modernos" sigue siendo el acceso bases de datos utilizando la edad viejas ideas detrás

MULTIPLY PRICE BY QUANTITY GIVING COST.

Otros consejos

Creo que la forma en que se estructura una instrucción SQL tiene un sentido lógico en cuanto a las oraciones en inglés están estructurados. Básicamente

I WANT THIS
FROM HERE
WHERE WHAT I WANT MEETS THESE CRITERIA

No creo que tenga mucho sentido, al menos en Inglés, para decir

FROM HERE
I WANT THIS
WHERE WHAT I WANT MEETS THESE CRITERIA  

Tengo que discrepar. gramática SQL no es de adentro hacia afuera.

En la lista primera mirada Puede averiguar si la consulta SELECT, INSERT, UPDATE o DELETE de datos (todo el resto de SQL, por ejemplo, DDL, se omite a propósito).


Volver a la confusión instrucción SELECT: El objetivo de SQL es ser declarativa . Lo que significa que expresar lo que quiere y no cómo lo quieres. Así que tiene sentido para todos los primero Estado lo que quiere (lista de atributos que eres Seleccionar ing) y después proporcionar el DBMS con alguna adicional información sobre dónde que se debe levantó la vista de.

La colocación de la cláusula WHERE al final tiene mucho sentido demasiado: Imagínese un embudo, ancho en la parte superior, estrecho en la parte inferior. Mediante la adición de una cláusula WHERE hacia el final de la declaración, se le asfixia por la cantidad de los datos resultantes. La aplicación de restricciones a su consulta en cualquier otro lugar que en el fondo requeriría que el desarrollador para girar la cabeza alrededor.


cláusula ORDER BY al final: una vez que los datos han pasado por el embudo, solucionaría

.

UNE (criterios de unión) pertenecen realmente en la cláusula FROM.

AGRUPACIÓN:. Básicamente corriendo datos a través de un embudo antes de que llegue a otro embudo

sytax SQL es dulce. No hay nada adentro hacia afuera de ella. Tal vez por eso es tan popular SQL incluso después de tantas décadas. Es bastante fácil de entender y dar sentido a. (A pesar de que una vez que me he enfrentado a una instrucción SQL de 7 páginas (tamaño A4) que me llevó bastante tiempo para sacarlo de mi cabeza.)

Está diseñado para ser Inglés similares. Creo que esa es la razón principal.

Como una nota, recuerdo las previsualizaciones iniciales de LINQ se modelaron directamente después de que (select ... from ...). Esto fue cambiado en las vistas previas posteriores a ser más como el lenguaje de programación (por lo que el alcance va hacia abajo). Anders Hejlsberg menciona específicamente este hecho extraño en SQL (lo que hace más difícil IntelliSense y no coincide con C # reglas de alcance) como la razón por la que tomaron esta decisión.

De todos modos, bueno o malo, es lo que es y de que sea demasiado tarde para cambiar nada.

El orden de las cláusulas SQL es absolutamente lógico. Recuerde que SQL es un lenguaje declarativo, donde se declara lo que quiere y el sistema busca una manera mejor de conseguir por ti. La primera cláusula es la cláusula select donde usted enumera las columnas que desee en la tabla de resultados. Este es el propósito principal de la consulta. Después de haber declarado lo que desea el resultado para que parezca, el próximo estado en el que los datos deben provenir de. La cláusula WHERE limita siendo devuelto la cantidad de datos. No hay ningún punto en el pensamiento sobre cómo limitar sus datos a menos que sepa de dónde viene, por lo que va después de la cláusula from. La cláusula group by trabaja con los operadores de agregación en la cláusula select y podría ir en cualquier lugar después de la cláusula sin embargo, es mejor pensar en la agregación de los datos filtrados, por lo que se produce después de la cláusula where. La cláusula HAVING tiene que venir después de la cláusula GROUP BY. La cláusula ORDER BY es acerca de cómo se presentan los datos y podría ir a ninguna parte después de la selección.

Es coherente con el resto de la sintaxis de tener cada inicio comunicado con un verbo (CREATE, DROP, UPDATE, etc.) De SQL.

La principal desventaja de tener la lista de columnas primera es que es un inconveniente para auto-completar (como se ha mencionado Hejlsberg), pero esto no era una preocupación cuando la sintaxis fue diseñado en la década de 1970.

Podríamos haber tenido lo mejor de ambos mundos con una sintaxis como SELECT FROM SomeTable: ColumnA, ColumnB, pero ya es demasiado tarde para cambiar ahora.

En cualquier caso, el orden de declaración SELECT SQL no es única. Coincide exactamente con la de la lista de Python por comprensión:

[(rec.a, rec.b) for rec in data where rec.a > 0]

Historia de la lengua a un lado (aunque es fascinante) Creo que lo que se echa en falta es que SQL no se trata de decirle al sistema qué hacer, sino lo que resultado final que desea (y que da cuenta de cómo hacerlo)

decir 'ir allí a ese estante, recoger los sombreros con cintas del sombrero, sombreros azules en primer lugar, luego verde, luego rojo, y traédmelos' está diciendo mucho el sistema ¿Cómo a Haz lo que quieras. es programador pensar donde pensamos que el trabajador es muy estúpida y necesita instrucciones detalladas minuciosamente.

SQL está empezando con el resultado final en primer lugar, los datos que desea, el orden de las columnas, etc .. es en gran medida la perspectiva de alguien que está construyendo un informe. "Quiero nombre, apellido, a continuación, edad, entonces ....." Eso es después de todo el fin de realizar la consulta. Por lo que comienza con eso, el formato de los resultados que desea. Luego se dirige a donde se espera que para encontrar los datos, cuáles son los criterios que debe buscar, el fin de presentarlo, etc.

Así como una alternativa a especificar en detalle lo que desea el trabajador debe hacer, SQL presume el sistema sabe cómo hacerlo, y los centros de más de lo que desea.

Así que en lugar de decirle a su trabajador pedante que ir aquí, conseguir esto, llevarlo allí .. que es más como diciendo "Quiero sombreros, de cremallera 12, que tienen cintas del sombrero, y por favor, ordenarlas por color."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top