Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL-Analyseendpunkt in Microsoft Fabric und Warehouse in Microsoft Fabric
In Transact-SQL kann eine Abfrage mit der Klausel FROM beginnen und die SELECT Klausel nach den Tabellenquellen platzieren. Diese FROM-erste Syntax legt die verfügbaren Tabellen und Spalten fest, bevor die Projektion definiert wird.
Die Nachlaufklausel SELECT ist optional. Wenn Sie weglassen SELECT, verhält sich die Abfrage so, als hätten Sie angegeben SELECT *.
Die folgenden Aussagen sind äquivalent:
FROM dbo.Employee;
FROM dbo.Employee
SELECT *;
FROM-Erstens ändert die Syntax keine Abfrageergebnisse oder das Ausführungsverhalten. Es bietet eine weitere Möglichkeit, eine Abfrage zu erstellen, während die Semantik einer äquivalenten SELECT-erst-Aussage erhalten bleibt.
FROM-first-Syntax verwendet die von Fabric Data Warehouse unterstützte Tabellen-Quellgrammatik und den SQL-Analytics-Endpunkt.
Transact-SQL-Syntaxkonventionen
Syntax
FROM { <table_source> [ ,...n ] }
[ SELECT <select_list> ]
[ WHERE <search_condition> ]
[ GROUP BY <group_by_expression> [ ,...n ] ]
[ HAVING <search_condition> ]
[ WINDOW <window_definition> [ ,...n ] ]
[ QUALIFY <search_condition> ]
[ ORDER BY <order_by_expression> [ ASC | DESC ] [ ,...n ] ]
[ FOR <JSON> ]
<table_source> ::=
{
[ database_name . [ schema_name ] . | schema_name . ]
table_or_view_name [ [ AS ] table_alias ]
| built_in_table_valued_function [ [ AS ] table_alias ]
[ ( column_alias [ ,...n ] ) ]
| user_defined_table_valued_function [ [ AS ] table_alias ]
[ ( column_alias [ ,...n ] ) ]
| derived_table [ [ AS ] table_alias ] [ ( column_alias [ ,...n ] ) ]
| <joined_table>
| <apply>
| <pivoted_table>
| <unpivoted_table>
}
Argumente
<table_source>
Spezifiziert eine Tabelle, Ansicht, integrierte tabellenwertige Funktion, benutzerdefinierte tabellenwertige Funktion, abgeleitete Tabelle, verbundene Tabelle, pivotierte Tabelle oder unpivotierte Tabelle, mit oder ohne Alias. Mehrere Tabellenquellen können durch Kommas verbunden oder getrennt werden.
Die Reihenfolge der Tabellenquellen nach dem FROM Schlüsselwort beeinflusst die Ergebnismenge nicht. Doppelte Namen in der FROM Klausel erzeugen einen Fehler. Doppelte unqualifizierte Spaltennamen können eine Tabellen- oder Aliasqualifikation erfordern.
Abfragen, die auf viele Tabellenquellen verweisen, benötigen möglicherweise mehr Kompilierungs- und Optimierungszeit. Die praktische Anzahl der Tabellenquellen hängt von den verfügbaren Ressourcen und der Abfragekomplexität ab.
table_or_view_name
Der Name einer Tabelle oder Sicht. Verwenden Sie einen vollständig qualifizierten Namen in der Formulardatenbank. Schema. object_name , wenn Sie auf ein Objekt in einer anderen Datenbank auf demselben SQL-Endpunkt referenzieren.
[ AS ] table_alias
Ein Alias für eine Tabellenquelle. Verwenden Sie einen Alias aus Bequemlichkeit oder zur Unterscheidung von Quellen in Joins, Self-Joins und Subqueries. Nachdem du ein Alias definiert hast, verwende den Alias anstelle des ursprünglichen Tabellennamens, um die Spalten zu qualifizieren. Abgeleitete Tabellen, tabellenwertige Funktionen, PIVOT, und UNPIVOT können ein Alias erfordern.
built_in_table_valued_function
Spezifiziert eine eingebaute Funktion, die eine Zeilenmenge zurückgibt. Unterstützte tabellenwertige Funktionen umfassen, sind aber nicht beschränkt auf:
-
OPENJSON, der JSON-Text in Zeilen und Spalten umwandelt. -
OPENROWSET(BULK...), der externe Dateien liest und deren Inhalt als Zeilen zurückgibt. -
STRING_SPLIT, was eine getrennte Zeichenkette in Reihen aufteilt. -
GENERATE_SERIES, die eine numerische Reihe erzeugt. -
sys.fn_helpcollations, die die von der SQL-Engine unterstützten Kollationen zurückgibt.
Eingebaute tabellenwertige Funktionen können ihre eigene Argument- und Ausgabespaltensyntax definieren. Zum Beispiel kann eine WITH Klausel enthalten, OPENJSON die die zurückgegebenen Spalten definiert.
user_defined_table_valued_function
Spezifiziert eine benutzerdefinierte tabellenwertige Funktion. Für Syntax und Verhalten siehe CREATE FUNCTION (Microsoft Fabric, Azure Synapse Analytics).
derived_table
Eine Unterabfrage, die Zeilen zurückgibt und als Eingabe für die äußere Abfrage fungiert. Eine abgeleitete Tabelle erfordert ein Tabellenalias. Ein Tabellenwert-Konstruktor kann ebenfalls eine abgeleitete Tabelle definieren.
column_alias
Ein optionaler Alias, der einen Spaltennamen im Ergebnis einer abgeleiteten Tabelle oder tabellenwertigen Funktion ersetzt. Wenn Sie eine Spaltenaliasliste angeben, geben Sie für jede Ausgabespalte einen Alias an.
<joined_table>
Spezifiziert eine Tabellenquelle, die durch das Zusammenfügen zweier oder mehrerer Tabellenquellen erzeugt wird. Für vollständige Join-Syntax und -Verhalten siehe FROM-Klausel plus JOIN, APPLY, PIVOT (Transact-SQL) und Joins.
Für unterstützte Optimierer- und Datenübertragungsoptionen siehe Join-Hinweise (Transact-SQL).
<Bewerbung>
Spezifiziert eine CROSS APPLY oder OUTER APPLY tabellenbezogene Quelle. Für die vollständige Syntax und das Verhalten siehe Use APPLY.
<pivoted_table>
Spezifiziert eine Tabellenquelle, die vom Operator PIVOT transformiert wird. Für die vollständige Syntax und das Verhalten siehe Using PIVOT and UNPIVOT.
<unpivoted_table>
Spezifiziert eine Tabellenquelle, die vom Operator UNPIVOT transformiert wird. Für die vollständige Syntax und das Verhalten siehe Using PIVOT and UNPIVOT.
WÄHLEN SIE <select_list>
Bei der -zuerst-Syntax FROMist die Klausel SELECT optional.
SELECT spezifiziert die von der Abfrage zurückgegebenen Spalten und Ausdrücke. Für die vollständige Projektionssyntax siehe SELECT-Klausel (Transact-SQL).
Wenn vorhanden, muss die Klausel SELECT unmittelbar nach allen Tabellenquellen, Joins und APPLY Operatoren erscheinen. Wenn du die Klausel SELECT weglässt, <select_list> setzt sie standardmäßig auf *.
FÜR <JSON>
Spezifiziert die JSON-Formatierung für das Abfrageergebnis. Für die vollständige Syntax und das Verhalten siehe FOR-Klausel (Transact-SQL).
Hinweise
-
SELECTDie -first- undFROM-first-Syntax werden beide unterstützt, aber man kann sie nicht im selben Abfrageblock kombinieren. - In
FROMder -first-Syntax wird unmittelbar nach dem vollständigen Tabellenquellenausdruck gesetztSELECT, einschließlich beliebiger Joins,APPLY,PIVOT, oderUNPIVOTOperatoren. - Ein Abfrageblock kann nur eine Klausel
FROMund eine optionale NachfolgeklauselSELECTenthalten. - Das Weglassen
SELECTumgeht nicht bestehende Einschränkungen aufSELECT *, einschließlich Einschränkungen in schemagebundenen Objekten. -
FROM-first-Syntax kann in Top-Level-Abfragen, Common Table Expressions (CTEs), Unterabfragen, Ansichten, Inline-Tabellenfunktionen und unterstütztenINSERTAbfrageformularen verwendet werden. -
FROM-Zuerst führt die Syntax keine neueSELECT INTOForm ein. -
FROM-First und äquivalenteSELECT-First-Abfragen liefern dasselbe Ergebnis und haben das gleiche Laufzeitverhalten.
Plattformunterstützung
Sowohl FROM-first- als auch SELECT-first-Abfragesyntaxen werden in Fabric Data Warehouse und am SQL-Analyse-Endpunkt unterstützt.
FROM-first Query-Syntax wird in SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric nicht unterstützt.
Examples
A. Spezifiziere SELECT nach FROM
Das folgende Beispiel deklariert die Tabellenquelle vor den projizierten Spalten:
FROM dbo.Employee AS e
SELECT e.empId, e.name, e.dept;
Diese Abfrage entspricht:
SELECT e.empId, e.name, e.dept
FROM dbo.Employee AS e;
B. AUSWÄHLEN weglassen
Die folgende Abfrage lässt die nachfolgende SELECT Klausel weg:
FROM dbo.Employee;
Die Abfrage ist äquivalent zu:
SELECT *
FROM dbo.Employee;
C. Filtere und gruppiere eine FROM-erste Abfrage
Das folgende Beispiel deklariert die Quelle, spezifiziert die Projektion und filtert und gruppiert dann die Zeilen:
FROM dbo.Employee AS e
SELECT e.dept, COUNT(*) AS EmployeeCount
WHERE e.managerId IS NOT NULL
GROUP BY e.dept;
D. Verwende Joins vor SELECT
Die Nachlaufklausel SELECT erscheint nach allen Tabellenquellen und Join-Bedingungen:
FROM Sales.SalesOrderHeader AS soh
INNER JOIN Sales.SalesOrderDetail AS sod
ON soh.SalesOrderID = sod.SalesOrderID
SELECT
soh.SalesOrderID,
soh.OrderDate,
sod.ProductID,
sod.LineTotal;
E. Verwenden Sie FROMdie -erste Syntax in einem CTE
Das folgende Beispiel definiert und verbraucht ein CTE mit FROM-zuerst Abfrageblöcken:
WITH managers AS (
FROM dbo.Employee
SELECT empId, name, dept
WHERE managerId IS NOT NULL
)
FROM managers
SELECT empId, name, dept;
F. Verwenden Sie FROMdie -first-Syntax in einer EXISTS-Unterabfrage
Das folgende Beispiel verwendet FROMdie -first-Syntax sowohl in der äußeren Abfrage als auch in der korrelierten Unterabfrage:
FROM dbo.Employee AS e
SELECT e.empId, e.name, e.dept
WHERE EXISTS (
FROM dbo.Employee AS e2
WHERE e2.dept = e.dept
AND e2.empId <> e.empId
);
Die in der EXISTS Unteranfrage ausgelassene SELECT lautet standardmäßig .SELECT * Das EXISTS Prädikat prüft lediglich, ob die Unterabfrage eine Zeile zurückgibt.
G. Verwenden Sie FROMdie -erste Syntax mit INSERT
Das folgende Beispiel fügt Zeilen ein, die durch eine FROM-erste Abfrage zurückgegeben werden:
INSERT INTO dbo.EmployeeArchive
FROM dbo.Employee
SELECT empId, name, dept
WHERE dept = 'Accounting';