L'espressione della tabella comune o il CTE è il set di risultati nominato, che è stato introdotto in SQL Server 2005. L'espressione della tabella comune funge da tabella virtuale con record e colonne create durante l'esecuzione di una query con CTE e rilasciata dopo il completamento della query. Può essere referenziato all'interno di qualsiasi istruzione selezionata, inserto, aggiornamento o elimina. Questo viene utilizzato anche per creare una vista.
CTE può essere definito dalla sintassi di seguito.
[CON [… ]]
Nome di CTE [(nome delle colonne [,…])]
AS (query di CTE)
Seleziona * da CTE
Esempio:
Con cte_name (column1, column2, column3)
COME
(
Seleziona colonna1, colonna2, colonna3
Dalla tabella 1
Dove colonna1> 500
)
Secondo l'esempio, dopo aver definito CTE CTE_Name, possiamo usare il CTE immediatamente dopo averlo definito come una tabella. Di seguito è riportato un esempio:
Seleziona da cte_name
Restituirà l'output di tre colonne, column1, colonna2 e colonna3.
Può essere utilizzato anche nelle dichiarazioni di inserto, eliminare, aggiornare e unire. Mostreremo un esempio di ciascuno di seguito.
CTE multiplo
CTE multipli può essere utilizzato in una singola query.
Con cte_name1 (column1, column2, column3)
COME
(
Seleziona colonna1, colonna2, colonna3
Dalla tabella 1
Dove colonna1> 100
)
COME
(
Seleziona * da cte_name2
dove colonna2> 200
)
Seleziona * da cte_name2
La query sopra restituirà i record dalla tabella 1 dove colonna1 è maggiore di 100 e colonna2 è maggiore di 200.
Elimina usando CTE
CTE può essere molto utile per eliminare i record da una tabella.
Con cte_name (column1, column2, column3)
COME
(
Seleziona colonna1, colonna2, colonna3
Dalla tabella 1
Dove colonna1> 100
)
Elimina da cte_name
L'istruzione sopra eliminerà i record dalla tabella di base: Tabella 1 dove il valore di colonna1 è superiore a 100.
Questo è anche il modo efficiente per eliminare le voci duplicate da una tabella. Di seguito è riportato l'esempio.
Con cte_name (id, column1, column2, column3, rn)
COME
(
Seleziona ID, Column1, Column2, Column3, Row_Number () Over (partizione per ID Order per ID) come RN
Dalla tabella 1
)
Elimina da cte_name
Dove cte_name. Rn> 1
Questo eliminerà tutte le righe duplicate dalla tabella 1.
Inserire usando CTE
Possiamo inserire un set di dati specifico che è definito in un CTE in un'altra tabella. Guarda l'esempio seguente.
Con cte_insert (id, column1, column2, column3)
COME
(
Seleziona ID, Column1, Column2, Column3
Dalla tabella 1
Dove colonna1> 200
)
/* per l'inserimento in una tabella esistente Dest_table*/
Inserisci in dest_table (column1, column2, column3)
Seleziona colonna1, colonna2, colonna3 da cte_insert
/ * Per la creazione di una nuova tabella Dest_table_new e inserire i dati del CTE */
Seleziona colonna1, colonna2, colonna3
In dest_table_new
L'istruzione sopra creerà la tabella con le tre colonne-colonne1, colonna2, colonna3 e inserisci i dati in essa.
Aggiornamento utilizzando CTE
Il concetto di aggiornamento utilizzando CTE è lo stesso dell'inserimento e della cancellazione. Controlliamo qui sotto l'esempio.
Con cte_update (id, column1, column2, column3)
COME
(
Seleziona ID, Column1, Column2, Column3
Dalla tabella 1
Dove colonna1> 200
)
/* Aggiorna la tabella di base- Tabella 1, di CTE per aumentare il valore della colonna1 di 100*/
Aggiorna cte_update
Imposta colonna1 = colonna1+100
/*Aggiorna un'altra tabella - dest_table, usando il valore di cte*/
Aggiornamento a
Imposta a.colonna1 = b.colonna1
da dest_table a
Unisciti a cte_update b
su a.id = b.id
Unire usando CTE
Fare riferimento all'esempio seguente per una migliore comprensione.
Con src_cte (id, column1, column2, column3)
COME
(
Seleziona ID, Column1, Column2, Column3 da SRC_Table
)
Unire
TGT_TBL come target
Usando src_cte come sorgente
Sull'obiettivo.id = fonte.id)
Se abbinato allora
Aggiornamento imposta Target.Colonna1 = sorgente.Colonna1,
bersaglio.Colonna2 = sorgente.Colonna2,
bersaglio.Colonna3 = sorgente.Colonna3
Se non abbinato allora
INSERT (colonna1, colonne2, colonne3) valori (sorgente.Colonna1, sorgente.Colonna2, sorgente.Colonna3);
Nella query sopra, stiamo cercando di caricare i dati in modo incrementale da src_table a tgt_table.
In che modo la variabile CTE, Temp e TEMP sono differiti in SQL Server?
Dagli ultimi esempi, conosciamo gli usi di CTE e abbiamo avuto una chiara idea di ciò che è CTE. Ora, la differenza tra CTE è e la tabella temporanea e la variabile temp è:
Conclusione
CTE può essere utile quando è necessario generare un set di risultati temporanei e è possibile accedervi in selezione, inserimento, aggiornamento, elimina e unisci. Può essere molto ottimizzato in termini di CPU e usi della memoria.