DA - SELEZIONA (Transact-SQL)

Si applica a:Endpoint di analisi SQL in Microsoft Fabric e Warehouse in Microsoft Fabric

In Transact-SQL, una query può partire dalla FROM clausola e posizionarla SELECT dopo le sorgenti della tabella. Questa FROMsintassi -first stabilisce le tabelle e le colonne disponibili prima di definire la proiezione.

La clausola di SELECT fine è opzionale. Se ometti SELECT, la query si comporta come se avessi specificato SELECT *.

Le seguenti affermazioni sono equivalenti:

FROM dbo.Employee;
FROM dbo.Employee
SELECT *;

FROM-First la sintassi non cambia i risultati delle query o il comportamento dell'esecuzione. Fornisce un altro modo per creare una query preservando la semantica di una sentenza -first equivalente SELECT.

FROMla sintassi -first utilizza la grammatica sorgente di tabelle supportata da Fabric Data Warehouse e dall'endpoint SQL analytics.

Convenzioni relative alla sintassi Transact-SQL

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>
}

Arguments

<table_source>

Specifica una tabella, una vista, una funzione integrata a valori di tabella, una funzione a valori di tabella definita dall'utente, una tabella derivata, una tabella giunta, una tabella pivotata o una tabella non pivotata, con o senza alias. Più sorgenti di tabella possono essere unite o separate da virgole.

L'ordine delle sorgenti della tabella dopo la FROM parola chiave non influisce sul set dei risultati. I nomi duplicati nella FROM clausola producono un errore. I nomi di colonne duplicati non qualificati possono richiedere la qualificazione di tabella o alias.

Le query che fanno riferimento a molte fonti di tabella possono richiedere più tempo di compilazione e ottimizzazione. Il numero pratico di sorgenti di tabella dipende dalle risorse disponibili e dalla complessità delle query.

table_or_view_name

Nome di una tabella o di una vista. Usa un nome completamente qualificato nel database dei moduli. schema. object_name quando fai riferimento a un oggetto in un altro database sullo stesso endpoint SQL.

[AS] table_alias

Un alias per una sorgente di tabella. Usa un alias per comodità o per distinguere le fonti tra join, auto-join e sottoquery. Dopo aver definito un alias, usa l'alias invece del nome originale della tabella per qualificare le colonne. Tabelle derivate, funzioni a valori di tabella, PIVOT, e UNPIVOT possono richiedere un alias.

built_in_table_valued_function

Specifica una funzione integrata che restituisce un set di righe. Le funzioni supportate a valori di tabella includono, ma non sono limitate a:

  • OPENJSON, che converte il testo JSON in righe e colonne.
  • OPENROWSET(BULK...), che legge file esterni e restituisce il loro contenuto come righe.
  • STRING_SPLIT, che divide una stringa delimitata in righe.
  • GENERATE_SERIES, che genera una serie numerica.
  • sys.fn_helpcollations, che restituisce le collazioni supportate dal motore SQL.

Le funzioni integrate con valori di tabella possono definire il proprio argomento e la sintassi della colonna di output. Ad esempio, OPENJSON può includere una WITH clausola che definisce le colonne restituite.

user_defined_table_valued_function

Specifica una funzione a valori di tabella definita dall'utente. Per sintassi e comportamento, vedi CREATE FUNCTION (Microsoft Fabric, Azure Synapse Analytics).

derived_table

Una sottoquery che restituisce righe e agisce come input per la query esterna. Una tabella derivata richiede un alias di tabella. Un costruttore di valore di tabella può anche definire una tabella derivata.

column_alias

Un alias opzionale che sostituisce il nome di una colonna nel risultato di una tabella derivata o di una funzione a valori di tabella. Se specifichi una lista di alias di colonna, fornisci un alias per ogni colonna di output.

<joined_table>

Specifica una sorgente di tabella prodotta unendo due o più sorgenti di tabella. Per la sintassi e il comportamento completi dei join, vedi la clausola FROM più JOIN, APPLY, PIVOT (Transact-SQL) e Joins.

Per opzioni supportate per ottimizzatori e movimenti dati, vedi Join hints (Transact-SQL).

<Applica>

Specifica una CROSS APPLY sorgente di tabella o OUTER APPLY opzione. Per la sua sintassi completa e il suo comportamento, vedi Use APPLY.

<pivoted_table>

Specifica una sorgente di tabella trasformata dall'operatore PIVOT . Per la sua sintassi completa e il suo comportamento, vedi Uso di PIVOT e UNPIVOT.

<unpivoted_table>

Specifica una sorgente di tabella trasformata dall'operatore UNPIVOT . Per la sua sintassi completa e il suo comportamento, vedi Uso di PIVOT e UNPIVOT.

SELEZIONA <select_list>

Con FROMla sintassi -first, la SELECT clausola è opzionale.

SELECT specifica le colonne e le espressioni restituite dalla query. Per la sintassi completa della proiezione, vedi clausola SELECT (Transact-SQL).

Quando presente, la SELECT clausola deve apparire immediatamente dopo tutte le sorgenti della tabella, le join e APPLY gli operatori. Se ometti la SELECT clausola, <select_list> di default si chiama *.

PER <JSON>

Specifica la formattazione JSON per il risultato della query. Per la sua sintassi e comportamento completi, vedi clausola FOR (Transact-SQL).

Osservazioni:

  • SELECT-first e FROM-first sono entrambe supportate, ma non puoi combinarle nello stesso blocco di query.
  • Nella FROMsintassi -first, posizionare SELECT immediatamente dopo l'espressione completa della sorgente della tabella, includendo eventuali joins, APPLY, PIVOT, o UNPIVOT operatori.
  • Un blocco di query può contenere solo una FROM clausola e una clausola SELECT di fine opzione opzionale.
  • Omettere SELECT non bypassa le restrizioni esistenti su SELECT *, incluse le restrizioni negli oggetti legati allo schema.
  • FROMLa sintassi -first può essere utilizzata in query di alto livello, espressioni di tabella comune (CTE), sottoquery, viste, funzioni a valori di tabella inline e moduli di query supportati INSERT .
  • FROM-prima sintassi non introduce una nuova SELECT INTO forma.
  • FROM-first e equivalente SELECT-first query restituiscono lo stesso risultato e hanno lo stesso comportamento in runtime.

Supporto della piattaforma

Sia FROMla sintassi delle query -first che SELECTquella -first sono supportate in Fabric Data Warehouse e nell'endpoint SQL analytics.

FROMLa sintassi della prima query non è supportata in SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure o database SQL in Fabric.

Examples

A. Specifica SELECT dopo FROM

Il seguente esempio dichiara la sorgente della tabella prima delle colonne proiettate:

FROM dbo.Employee AS e
SELECT e.empId, e.name, e.dept;

Questa query equivale a:

SELECT e.empId, e.name, e.dept
FROM dbo.Employee AS e;

B. Ometti SELECT

La seguente query omette la clausola di termine SELECT :

FROM dbo.Employee;

La query è equivalente a:

SELECT *
FROM dbo.Employee;

C. Filtra e raggruppa una FROMquery -first

Il seguente esempio dichiara la sorgente, specifica la proiezione e poi filtra e raggruppa le righe:

FROM dbo.Employee AS e
SELECT e.dept, COUNT(*) AS EmployeeCount
WHERE e.managerId IS NOT NULL
GROUP BY e.dept;

D. Usa i join prima di SELECT

La clausola di SELECT fine appare dopo tutte le sorgenti della tabella e le condizioni di join:

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. Usa FROMla sintassi -first in un CTE

Il seguente esempio definisce e consuma una CTE con FROMblocchi di query -first:

WITH managers AS (
    FROM dbo.Employee
    SELECT empId, name, dept
    WHERE managerId IS NOT NULL
)
FROM managers
SELECT empId, name, dept;

F. Usa FROMla sintassi -first in una sottoquery EXISTS

Il seguente esempio utilizza FROMla sintassi -first sia nella query esterna che nella sottoquery correlata:

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
);

L'omesso SELECT nella EXISTS sottoquery è predefinito .SELECT * Il EXISTS predicato verifica solo se la sottoquery restituisce una riga.

G. Usa FROMla sintassi -first con INSERT

Il seguente esempio inserisce righe restituite da una FROMquery -first:

INSERT INTO dbo.EmployeeArchive
FROM dbo.Employee
SELECT empId, name, dept
WHERE dept = 'Accounting';