Das hat mich in der Schule sehr gestört.
Als ich vor fünf Jahren SQL lernte, fragte ich mich immer, warum wir zuerst die gewünschten Felder angeben und dann, woher wir sie wollen.
Nach meiner Vorstellung sollten wir schreiben:
From Employee e
Select e.Name
Warum sagt die Norm dann Folgendes?
Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is
Ich habe Wochen gebraucht, um SQL zu verstehen, und ich weiß, dass ein Großteil dieser Zeit durch die falsche Reihenfolge der Elemente verbraucht wurde.
Es ist wie in C # zu schreiben:
string name = employee.Name;
var employee = this.GetEmployee();
Ich gehe also davon aus, dass dies einen historischen Grund hat. Warum?
Linq
, die standardisierteSQL
Syntax nicht verwenden zu können .Antworten:
Ursprünglich SQL - Sprache wurde SEQUEL genannt stehend für
mit Schwerpunkt auf Englisch , vorausgesetzt, die Schreibweise entspricht weitgehend der natürlichen Sprache.
Nun buchstabieren Sie diese beiden Aussagen so, wie Sie englische Sätze buchstabieren würden:
Zweitens klingt näher an der natürlichen englischen Sprache, weshalb es als Norm festgelegt ist.
Übrigens
Where
: SQL-Anweisungen wurden absichtlich so entworfen, dass sie der natürlichen Sprache nahe kommen.quelle
Weil SELECT in einer select-Anweisung erforderlich ist und FROM nicht.
Natürlich kann Ihre SQL-Anweisung analysiert werden, um nach SELECT, DELETE, UPDATE nach FROM zu suchen, aber ist das wirklich eine große Sache?
Denken Sie daran, dass dies alles vor der Intellisense getan wurde. Es ist nicht so kompliziert.
Bearbeiten: Es gibt wahrscheinlich keinen Grund, warum SQL-Interpreter nicht für beides gebaut werden könnten.
quelle
FROM myTable;
stattFROM myTable SELECT *
; Dies scheint nur eine Voraussetzung zu sein, weil es das ist, was Sie gewohnt sind.FROM
erforderlich. Aus diesem Grund haben viele RDBMS eine Tabelle namensDUAL
oder eine andereSELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber
.Ich kenne keine Antwort, die ich durch Referenzen sichern könnte, aber wenn ich spekulieren müsste : SQL ist eine deklarative Sprache , beschreibt eine Aussage einer solchen Sprache, was Sie tun möchten und nicht, wie Sie es tun möchten.
"X AUS Y AUSWÄHLEN" ist daher die geeignetere Antwort auf "Was möchte ich aus der Datenbank auswählen" als "X AUS Y AUSWÄHLEN".
Außerdem gibt in SQL SELECT / UPDATE / INSERT die Art der Operation an, die Sie ausführen möchten, und FROM ist nur eine Klausel, mit deren Hilfe Sie aus der richtigen Tabelle in der Datenbank auswählen können. Auch hier hat Ihre Arbeit mit Daten Vorrang vor der Frage , wie genau Sie dies erreichen möchten.
quelle
SQL ist eine strukturierte Abfragesprache für englischsprachige Benutzer. SELECT, INSERT, UPDATE und DELETE sind zwingende Befehle. In Englisch beginnen Imperativbefehle den Satz oder die Anweisung. Vergleichen Sie:
zu
SQL folgt dem zweiten (zwingenden) Format. Auch die vier Imperativbefehle haben drei deutlich unterschiedliche Formate. Erwägen:
oder
Wenn Sie die von Ihnen ausgeführte Aktion kennen, ist es einfacher, das richtige Format auszuwählen.
Im Fall von select bestimmen Sie, welche Attribute Sie möchten, und fügen dann die Tabellen hinzu, in denen sie enthalten sind. Während Sie die Auswahlkriterien erstellen, können Sie zusätzliche Tabellen hinzufügen. Wenn Sie Kriterien dynamisch hinzufügen, kann dies normalerweise am Ende eines statischen Teils der Abfrage erfolgen.
quelle
UPDATE ... FROM
ist keine englisch-artige Struktur, IMO. Nicht, dass ich bessere Vorschläge hätte ...SQL-Anweisungen beginnen mit Verben. Das war die Wahl der Sprachdesigner, und viele Programmiersprachen arbeiten auf diese Weise. Semantisch ist es nicht ungewöhnlich, Programmiersprachen zu sehen, die wie folgt funktionieren:
Im Fall einer SELECT-Anweisung, die Sie als Beispiel angeben, würde Ihre vorgeschlagene Syntax das Objekt an die erste Stelle der Anweisung setzen. Anstelle einer VSO-Satzreihenfolge (Verb, Subjekt, Objekt) würden Sie OVS haben, was im Vergleich zu natürlichen Sprachen sehr seltsam wäre. SVO (z. B. Englisch), VSO (z. B. Arabisch) und SOV (z. B. Latein) sind vernünftigere Annäherungen an die menschliche Sprache.
quelle
Ich denke, es würde das Parsen erheblich erschweren, insbesondere bei Unterabfragen, z
Das Parsen wäre komplizierter. Sie konnten nicht erkennen, dass UPDATE ein Syntaxfehler war, bis Sie die FROM-Klausel analysiert hatten und der Parser sich genügend Kontext merken musste, um zu wissen, dass eine Unterabfrage analysiert wurde. Ich glaube nicht, dass Aktualisierungen in Unterabfragen zulässig sind, aber wenn dies der Fall wäre (möglicherweise mit einer RETURNING-Klausel), können Sie möglicherweise nicht feststellen, dass dies ungültig ist, bis Sie die SELECT-Anweisung analysiert haben.
Dies würde zumindest k (lookahead) für die Grammatik erhöhen und sie im schlimmsten Fall kontextsensitiv machen, obwohl dies die Grenzen meiner eher schlecht erinnerten Compiler-Designpapiere von der Universität sprengt.
quelle
QUEL
, der ungefähr zur gleichen Zeit entwickelt wurde, so schlägt das OP die Reihenfolge der Syntaxklauseln vor.