C'est quelque chose qui m'a beaucoup dérangé à l'école.
Il y a cinq ans, lorsque j'ai appris le langage SQL, je me suis toujours demandé pourquoi nous spécifions d'abord les champs que nous souhaitons et ensuite d'où nous les voulions.
Selon mon idée, nous devrions écrire:
From Employee e
Select e.Name
Alors pourquoi la norme dit ce qui suit?
Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is
Il m'a fallu des semaines pour comprendre SQL et je sais qu'une bonne partie de ce temps a été consommée par le mauvais ordre des éléments.
C'est comme écrire en C #:
string name = employee.Name;
var employee = this.GetEmployee();
Donc, je suppose que cela a une raison historique. Pourquoi?
Linq
ne pas avoir utilisé laSQL
syntaxe standardisée .Réponses:
A l'origine, le langage SQL s'appelait SEQUEL pour
mettant l'accent sur l' anglais , en supposant qu'il soit proche de l'orthographe du langage naturel .
Maintenant, épelez ces deux déclarations comme vous épeleriez des phrases en anglais:
La seconde sonne plus proche de la langue anglaise naturelle, c’est la raison pour laquelle elle est définie comme norme.
En outre, le même raisonnement s'applique à BTW
Where
- les instructions SQL ont été intentionnellement conçues pour donner un son proche du langage naturel.la source
Parce que SELECT est requis dans une instruction select et que FROM ne l’est pas.
Bien sûr, votre déclaration sql peut être analysée pour rechercher SELECT, DELETE, UPDATE après le FROM, mais l’affaire est-elle vraiment si grosse?
Rappelez-vous, tout cela était fait avant intellisense. Ce n'est pas si compliqué.
Edit: Il n'y a probablement aucune raison pour que les interprètes SQL ne puissent pas être construits pour faire les deux.
la source
FROM myTable;
place deFROM myTable SELECT *
; Cela semble être une exigence, car c'est ce à quoi vous étiez habitué.FROM
est requis. C'est pourquoi de nombreux SGBDR ont une table appeléeDUAL
ou une autre table fictive à une seule ligneSELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber
.Je ne connais pas une réponse que je pourrais sauvegarder par des références, mais si je devais spéculer: SQL est un langage déclaratif , une déclaration de ce langage décrit ce que vous souhaitez faire et non la façon dont vous souhaitez le faire.
En tant que tel, "SELECT X FROM Y" semble être un moyen plus approprié de répondre à "Que voudrais-je sélectionner dans la base de données", par opposition à l'écriture "FROM Y SELECT X".
De plus, en SQL, SELECT / UPDATE / INSERT spécifie le type d'opération que vous êtes sur le point d'effectuer et FROM n'est qu'une clause qui vous aide à faire une sélection dans la bonne table de la base de données. Encore une fois, que faites-vous avec les données a préséance sur la manière dont vous allez y parvenir?
la source
SQL est un langage de requête structuré destiné aux anglophones. SELECT, INSERT, UPDATE et DELETE sont des commandes impératives. En anglais, les commandes impératives commencent la phrase ou la déclaration. Comparer:
à
SQL suit le deuxième format (impératif). De plus, les quatre commandes impératives ont trois formats très différents. Considérer:
ou
Si vous connaissez l'action que vous entreprenez, il est plus facile de sélectionner le format correct.
Dans le cas de select, vous déterminez les attributs de votre choix, puis ajoutez les tables qui les contiennent. Lorsque vous établissez les critères de sélection, vous pouvez ajouter des tables supplémentaires. Lorsque vous ajoutez des critères de manière dynamique, vous pouvez généralement le faire à la fin d'une partie statique de la requête.
la source
UPDATE ... FROM
n'est pas une structure de type anglais, IMO. Pas que j'ai de meilleures suggestions ...Les instructions SQL commencent par des verbes. C’était le choix des concepteurs de langage, et de nombreux langages de programmation fonctionnent de cette façon. Sémantiquement, il n'est pas rare de voir des langages de programmation qui fonctionnent comme ceci:
De plus, dans le cas de l'instruction SELECT que vous donnez à titre d'exemple, la syntaxe proposée placerait l'objet en premier dans l'instruction. Au lieu d'un ordre de phrases VSO (verbe, sujet, objet), vous auriez OVS, ce qui serait très étrange par rapport aux langues naturelles. SVO (par exemple l'anglais), VSO (par exemple l'arabe) et SOV (par exemple le latin) sont des approximations plus raisonnables du langage humain.
la source
Je pense que cela compliquerait considérablement l'analyse, en particulier avec les sous-requêtes, par exemple
L'analyse serait plus compliquée. Vous ne pouviez pas dire que UPDATE était une erreur de syntaxe jusqu'à ce que vous ayez analysé la clause FROM, et l'analyseur devrait se rappeler suffisamment de contexte pour savoir qu'il analysait une sous-requête. De toute façon, je ne pense pas que les mises à jour soient autorisées dans les sous-requêtes, mais si elles l'étaient (peut-être avec une clause RETURNING), vous pourriez ne pas être en mesure de dire que cela n'était pas valide avant d'avoir analysé l'instruction SELECT.
Cela augmenterait au moins le k (lookahead) de la grammaire et, au pire, le rendrait sensible au contexte, même si cela repoussait les limites de mes travaux de conception de compilateur de l'université, dont je me souviens très peu.
la source
QUEL
qui a été développé à peu près au même moment, l'ordre des clauses de syntaxe est ce que suggère le PO.