Die FROM-Klausel ist für jede SELECT-Anweisung erforderlich, die Daten aus Tabellen, Ansichten oder gespeicherten Prozeduren abruft.
Die FROM-Klausel kann JOIN-Bedingungen enthalten, die Tabellen verbindet sowie Joins zu anderen Abfragen (abgeleiteten Tabellen) herstellen. Hinweise zu diesen Funktionen finden Sie unter Joins: Daten aus mehreren Tabellen abrufen.
In der FROM-Klausel ist die volle Namensgebungssyntax für Tabellen und Ansichten immer zulässig, d.h.:
SELECT Auswahlliste FROM Eigentümer.Tabellenname; |
Das Qualifizieren von Tabellen-, Ansichten- und Prozedurnamen ist nur erforderlich, wenn das Objekt einer Benutzer-ID gehört, die sich von der Benutzer-ID der aktuellen Verbindung unterscheidet oder wenn die Benutzer-ID des Eigentümers nicht der Name einer Gruppe ist, zu der die Benutzer-ID der aktuellen Verbindung gehört.
Sie können einem Tabellennamen einen Korrelationsnamen geben, um die Lesbarkeit zu verbessern und sich das Eingeben des vollständigen Tabellennamens an jeder Stelle, wo die Tabelle referenziert wird, in Zukunft zu ersparen. Sie weisen den Korrelationsnamen in der FROM-Klausel zu, indem Sie ihn nach dem Tabellennamen wie folgt eingeben:
SELECT d.DepartmentID, d.DepartmentName FROM Departments d; |
Wenn ein Korrelationsname verwendet wird, müssen alle anderen Verweise auf die Tabelle, wie etwa in einer WHERE-Klausel, den Korrelationsnamen statt des Tabellennamens benutzen. Korrelationsnamen müssen den Regeln für gültige Bezeichner entsprechen.
Weitere Hinweise finden Sie unter FROM-Klausel.
Eine abgeleitete Tabelle ist eine Tabelle, die direkt oder indirekt von einer oder mehreren Tabellen durch die Berechnung eines Abfrageausdrucks abgeleitet wird. Abgeleitete Tabellen werden in der FROM-Klausel einer SELECT-Anweisung festgelegt.
Das Abfragen einer abgeleiteten Tabelle funktioniert auf dieselbe Weise wie das Abfragen einer Ansicht. Das heißt, dass die Werte einer abgeleiteten Tabelle zu dem Zeitpunkt bestimmt werden, an dem die Definition der abgeleiteten Tabelle evaluiert wird. Abgeleitete Tabellen unterscheiden sich dadurch von Ansichten, dass die Definition einer abgeleiteten Tabelle nicht in der Datenbank gespeichert wird. Abgeleitete Tabellen unterscheiden sich von Basis- und temporären Tabellen, indem sie nicht materialisiert sind und nicht von außerhalb der Abfrage, in der sie definiert sind, referenziert werden können.
Die folgende Abfrage verwendet eine abgeleitete Tabelle (my_drv_tbl), in der der Höchstlohn der einzelnen Abteilungen eingefügt wird. Die Daten in der abgeleiteten Tabelle werden dann mit der Tabelle "Employees" verknüpft, um die Nachnamen der Mitarbeiter zu erhalten, die diese Löhne ausgezahlt bekommen.
SELECT Surname, my_drv_tbl.max_sal AS Salary, my_drv_tbl.DepartmentID FROM Employees e, ( SELECT MAX( Salary ) AS max_sal, DepartmentID FROM Employees GROUP BY DepartmentID ) my_drv_tbl WHERE e.Salary = my_drv_tbl.max_sal AND e.DepartmentID = my_drv_tbl.DepartmentID ORDER BY Salary DESC; |
Surname | Salary | DepartmentID |
---|---|---|
Shea | 138948.00 | 300 |
Scott | 96300.00 | 100 |
Kelly | 87500.00 | 200 |
Evans | 68940.00 | 400 |
Martinez | 55500.80 | 500 |
Das folgende Beispiel erstellt eine abgeleitete Tabelle (MyDerivedTable), die eine Rangfolge der Artikel in der Tabelle "Products" erstellt, und fragt dann die abgeleitete Tabelle ab, um die drei am wenigsten teuren Artikel zurückzugeben.
SELECT TOP 3 * FROM ( SELECT Description, Quantity, UnitPrice, RANK() OVER ( ORDER BY UnitPrice ASC ) AS Rank FROM Products ) AS MyDerivedTable ORDER BY Rank; |
Siehe auch: FROM-Klausel.
Die häufigsten Elemente in einer FROM-Klausel sind Tabellennamen. Es ist allerdings auch möglich, Zeilen aus anderen Datenbankobjekten abzufragen, wenn diese eine tabellenähnliche Struktur haben - also eine definierte Menge von Zeilen und Spalten. Sie können beispielsweise Ansichten oder auch gespeicherte Prozeduren abfragen, die Ergebnismengen zurückgeben.
Beispiel: Die folgende Anweisung fragt die Ergebnismenge einer gespeicherten Prozedur namens "ShowCustomerProducts" ab.
SELECT * FROM ShowCustomerProducts( 149 ); |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |