Frage

In fast jedem formal strukturierte Satz von Informationen, starten Sie entweder von Anfang zum Ende zu lesen, oder gelegentlich vom Ende zum Anfang (Straßenadressen, zum Beispiel.) Aber in SQL, insbesondere SELECT-Abfragen, um richtig seine Bedeutung zu verstehen, muss man in der Mitte beginnen, in der FROM-Klausel. Dies kann lange Abfragen sehr schwer zu lesen, vor allem, wenn es verschachtelte SELECT-Abfragen enthält.

In der Regel in der Programmierung, wenn etwas scheint keinen Sinn zu machen, gibt es einen historischen Grund dahinter. Beginnend mit dem SELECT anstelle der FROM keinen Sinn macht. Kennt jemand den Grund, dass es so gemacht wird?

War es hilfreich?

Lösung

Die SQL Wikipedia-Eintrag kurz einige Geschichte beschreibt:

  

In den 1970er Jahren entwickelte ich eine Gruppe von IBM San Jose Research Laboratory des System R relationalen Datenbank-Management-System, basierend auf dem Modell von Edgar F. Codd in seinem einflussreichen Papier eingeführt, „A Relationale Modell von Daten für große Shared Data Banks “. Donald D. Chamberlin und Raymond F. Boyce von IBM erstellt anschließend die Structured English Query Language (FOLGE) zu manipulieren und zu verwalten im System gespeicherten Daten R. Das Akronym SEQUEL wurde später geändert SQL, weil "SEQUEL" eine Marke der britischen Hawker Siddeley Aircraft Company war.

Der ursprüngliche Name explizit erwähnt Englisch , erklärt die Syntax.

Graben ein wenig tiefer, finden wir die Flow-Matic Programmiersprache.

  

Flow-Matic, ursprünglich bekannt als B-0 (Business Language Version 0), ist möglicherweise die erste englische artige Datenverarbeitungssprache . Es wurde erfunden und spezifiziert von Grace Hopper, und die Entwicklung der kommerziellen Variante begann bei Remington Rand 1955 für die UNIVAC I. 1958, der Compiler und seine Dokumentation waren allgemein verfügbar und kommerziell verwendet werden.

Flow-Matic war die Inspiration hinter dem Common Business Oriented Language , ein die ältesten Programmiersprachen noch im aktiven Gebrauch. Schritt hält mit diesem Geist SEQUEL wurde entwickelt, um mit Englisch-ähnlicher Syntax (1970 modern, verglichen mit 1950er und 1960er Jahren).

Perspektivisch „modern“ Programmiersysteme immer noch Zugriff auf Datenbanken die uralten Ideen hinter

mit
MULTIPLY PRICE BY QUANTITY GIVING COST.

Andere Tipps

Ich denke, die Art und Weise, in der eine SQL-Anweisung ist wie weit logischen Sinn macht als englische Sätze strukturiert sind. Grundsätzlich

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

Ich glaube nicht, es viel Sinn macht, Englisch zumindest zu sagen,

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

Ich muss nicht zustimmen. SQL-Grammatik ist nicht von innen nach außen.

Von dem erster Blick können Sie feststellen, ob die Abfrage SELECT, INSERT, UPDATE oder DELETE-Daten (die ganzen Rest von SQL, zum Beispiel DDL, absichtlich weggelassen).


Zurück zur SELECT-Anweisung Verwirrung: Das Ziel SQL ist auf deklarative . Das bedeutet, Sie sagen, was Sie wollen, und nicht, wie Sie es wollen. So ist es jeden Sinn macht erste Zustand, was Sie wollen (Liste der Attribute, die Sie sind wählen ing) und und bieten die DBMS mit einigen zusätzlichen Informationen darüber, wo das sieht von werden sollte.

die WHERE-Klausel Platzierung am Ende zu viel Sinn macht: einen Trichter Stellen Sie sich vor, oben breit, unten schmal. eine WHERE-Klausel zum Ende der Anweisung durch das Hinzufügen, ersticken Sie die Menge der resultierenden Daten nach unten. Einschränkungen auf Ihre Anfrage Anwendung sonst an jeden Ort als am unteren Ende würde die Entwickler benötigt, um ihren Kopf zu drehen.


ORDER BY-Klausel am Ende: sobald die Daten durch den Trichter gegangen sind, sortiert es

.

JOINS (Kriterien JOIN) wirklich gehören in der FROM-Klausel.

VEREINIGUNG:. Im Grunde Daten durch einen Trichter laufen, bevor es in einer anderen Trichter erhält

SQL sytax ist süß. Es gibt nichts, von innen nach außen über sie. Vielleicht ist das, warum SQL so beliebt ist auch nach so vielen Jahrzehnten. Es ist ziemlich leicht zu verstehen und das Gefühl von zu machen. (Obwohl ich einmal stand vor einer 7-Seite (A4-Format) SQL-Anweisung, die mir dauerte eine ganze Weile meinen Kopf herum.)

Es ist so konzipiert Englisch sein wie. Ich denke, das ist der Hauptgrund dafür.

Als Randbemerkung, ich erinnere mich die ersten Previews von LINQ direkt nach dem Vorbild wurden (select ... from ...). Dies wurde in späteren Vorschauen geändert mehr Programmiersprache sein wie (so dass der Anwendungsbereich geht nach unten). Anders Hejlsberg ausdrücklich erwähnt, diese seltsame Tatsache über SQL (die IntelliSense härter macht und nicht C # Bereichsregeln entspricht) als Grund, warum sie diese Entscheidung getroffen.

Wie auch immer, gut oder schlecht, es ist, was es ist, und es ist zu spät, etwas zu ändern.

Die Reihenfolge der Klauseln in SQL ist absolut logisch. Denken Sie daran, dass SQL eine deklarative Sprache, in dem Sie erklären, was Sie wollen, und das System findet heraus, wie man am besten für Sie zu erhalten. Die erste Klausel ist die select-Klausel in dem Sie die Spalten aufgelistet, die Sie in der Ergebnistabelle werden sollen. Dies ist der primäre Zweck der Abfrage. Hat ihre Absicht bekundet, was Sie das Ergebnis aussehen wollen wie, die nächsten Zustand, in dem die Daten sollten herkommen. Die where-Klausel schränkt die Menge der Daten zurückgegeben werden. Es gibt keinen Punkt in darüber nachzudenken, wie Sie Ihre Daten zu begrenzen, wenn Sie wissen, woher es kommt, so geht es nach dem von Klausel. Die Gruppe von Klausel arbeitet mit den Aggregationsoperator in der select-Klausel und konnte gehen, wohin nach dem von Klausel jedoch ist es besser, über die Aggregation auf den gefilterten Daten zu denken, so kommt es nach der Where-Klausel. Die Klausel having hat nach der Gruppe von Klausel zu kommen. Die ORDER BY-Klausel ist darüber, wie die Daten dargestellt werden und überall nach dem wählen gehen könnten.

Es ist mit dem Rest der SQL Syntax konsistent jede Aussage Anfang an mit einem Verb (CREATE, DROP, UPDATE usw.) Zu haben.

Der große Nachteil zuerst die Spaltenliste ist, dass es für die automatische Vervollständigung unbequem ist (wie Hejlsberg erwähnt), aber das war kein Problem, wenn die Syntax in den 1970er Jahren entwickelt wurde.

Wir konnten das Beste aus beiden Welten mit einer Syntax wie SELECT FROM SomeTable: ColumnA, ColumnB haben, aber es ist zu spät, um es jetzt zu ändern.

Wie auch immer, ist SQL die SELECT Anweisung, um nicht eindeutig. Es stimmt genau überein, dass die Python-Liste Comprehensions:

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

Die Geschichte der Sprache zur Seite (obwohl es ist faszinierend) Ich denke, dass das, was Sie fehlt, ist, dass SQL geht es nicht um das System zu sagen, was so viel wie zu tun, was Ende gewünschtes Ergebnis (und es herausfindet, wie man do it)

sagt ‚geht dort zu diesem Rack, die Hüte mit Hutbänder, blaue Hüten ersten abholen, dann grün, dann rot, und bringt sie zu mir‘ ist sehr viel das System anzeigt, wie Tun Sie, was Sie wollen. es ist Programmierer denken , wo wir die Arbeiter davon ausgehen, sehr dumm und muss minutiös detaillierte Anweisungen.

SQL wird mit dem Endergebnis beginnt zunächst die Daten, die Sie, die Reihenfolge der Spalten wollen, etc .. es ist sehr viel die Perspektive von jemandem, der einen Bericht baut. „Ich Vorname wollen, Nachname, dann Alter, dann .....“ Das ist schließlich der Zweck die Anfrage zu machen. So beginnt er mit, dass das Format der gewünschten Ergebnisse. Dann geht es in, wo Sie es erwarten, dass die Daten zu finden, welche Kriterien zu suchen, die um sie zu präsentieren, etc.

So als Alternative minutiös zu spezifizieren, was Sie der Arbeiter tun wollen, SQL setzt das System weiß, wie das zu tun, und Zentren mehr auf das, was Sie wollen.

Also anstatt Ihre Arbeiter pedantisch zu sagen, hier zu gehen, dies zu umgehen, bringt es dort über .. es ist mehr wie wenn man sagt: „Ich will Hüte, von Zahnstange 12, die Hutbänder haben, und bitten sie nach Farbe sortieren.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top