VON - AUSWÄHLEN (Transact-SQL)

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- und FROM-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 gesetzt SELECT , einschließlich beliebiger Joins, APPLY, PIVOT, oder UNPIVOT Operatoren.
  • Ein Abfrageblock kann nur eine Klausel FROM und eine optionale Nachfolgeklausel SELECT enthalten.
  • Das Weglassen SELECT umgeht nicht bestehende Einschränkungen auf SELECT *, 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ützten INSERT Abfrageformularen verwendet werden.
  • FROM-Zuerst führt die Syntax keine neue SELECT INTO Form ein.
  • FROM-First und äquivalente SELECT-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';