2016-05-22 5 views
2

Ich führte die folgende Abfrage aus und es funktionierte. Ich möchte verstehen, wie es funktioniert.Wie SQL-Select-Anweisungen funktionieren

select 50+2 from employees 

Dies funktioniert nur, wenn die 'Mitarbeiter' Tabelle existiert. Wenn ich eine nicht existierende Tabelle erwähne, wird ein Fehler ausgegeben.

Wie können solche Ausdrücke für benutzerdefinierte Tabellen ausgewertet werden?

+0

Dies funktioniert auch: '1 wählen,‚a‘von employees' –

+0

Wenn die dualen nicht für Sie arbeiten, dann brauchen wir mehr wissen über dein Problem und was versuchst du zu erreichen, warum musst du manchmal vorhandene Tabellen verwenden und andere nicht. (Was ist die Situation)? – Mocas

+0

Hat meine Antwort Ihre Frage korrekt beantwortet? – Webeng

Antwort

3

Was MySQL zuerst tut, benutzt es seinen Parser, um die SQL-Anweisung zu lesen und sie in ihre logischen Teile zu trennen. Ein Parser (der nicht nur von MySQL, sondern sehr oft in der Programmierung verwendet wird) ist nur ein Codeblock, der unformatierte Informationen abruft und sie in etwas verwandelt, das das Programm verwenden kann.

Im Fall von MySQL, wird es

SELECT 50+2 FROM employees 

In SELECT 50+2 und FROM employees

So können getrennt analysieren, was jeder dieser beiden tun. Das reservierte Wort SELECT wird verwendet, um zu identifizieren, was ein Benutzer von der Operation erhalten möchte. Es enthält normalerweise einen Spaltennamen. Wenn Sie jedoch eine Zeichenfolge mit dem Namen "Hallo" einfügen, interpretiert MySQL, dass Sie "Hallo" auswählen möchten. In diesem Fall möchten Sie eine Zahl auswählen, die das Ergebnis 50+2 ist.

Nun, was FROM employees tut ist, dass es MySQL informiert, aus welcher Tabelle Sie diese Informationen auswählen möchten. Es spielt keine Rolle, dass 50+2 keine Spalte oder gar etwas in der Tabelle ist. MySQL ist kein KI-System und stellt Ihnen keine Fragen darüber, warum Sie sich dafür entschieden haben. Es führt nur Befehle aus, die den festgelegten Regeln entsprechen.

Nun durchsucht MySQL die gesamte Tabelle und gibt die ausgewählten Spalten jeder Zeile zurück, die mit der Bedingung übereinstimmen, die im Abschnitt WHERE ... einer Abfrage vorhanden ist. Wenn eine Abfrage den Abschnitt WHERE ... nicht enthält, wird davon ausgegangen, dass Sie alle Zeilen zurückgeben möchten.

Das Ergebnis Ihrer Abfrage wird dann eine Spalte mit dem Wert 52 mit der gleichen Anzahl von Zeilen wie Ihre Tabelle hat. Wenn Ihre Tabelle 5 Zeilen hat, wird das Ergebnis sein:

52 
52 
52 
52 
52 
1

Wenn Sie Ausdruck geben wollen, dann benutzen Sie einfach SELECT .. Dual

select 50+2 from dual 

Dies wird auch 52

führen Warum select 50+2 from employees weil es ein nur ein konstanter Wert, der von in allen Zeilen angezeigt werden Ihre Tabelle, Beispiel Die folgende Abfrage ergibt auch den konstanten Wert 'A' für alle Zeilen

0

Wenn Sie nicht Möchten Sie auf eine vorhandene Tabelle verweisen, und Sie möchten immer noch einen Ausdruck berechnen (beachten Sie einen einzelnen Ausdruck), können Sie die Tabelle DUAL in Oracle verwenden.

select 50+2 from dual; 

select 1*2*3 from dual; 

aus dem Oracle-doc ist

Die Tabelle mit dem Namen DUAL ein kleiner Tisch im Data Dictionary, die Oracle-Datenbank und Benutzer geschriebenen Programme verweisen können ein bekanntes Ergebnis zu gewährleisten. Diese Tabelle hat eine Spalte mit dem Namen DUMMY und eine Zeile mit dem Wert X.

+0

Ja das weiß ich. Aber wie funktioniert es auch für den "Mitarbeitertisch"? Was nutzt dual, wenn es mit einer vorhandenen Tabelle funktioniert? Selbst 'select 50 + 2' funktioniert. –

+0

Wenn Ihre employee Tabelle 10 Zeilen enthält, wird Ihre Ausgabe von 52 für 10 Zeilen wiederholt. Wenn Sie jedoch die Doppeltabelle verwenden, erhalten Sie nur eine. – cableload

+0

'Select 50 + 2' funktioniert nicht in Oracle Db, aber in SQLite –