sammanfattning: i den här handledningen kommer du att lära dig om det gemensamma tabelluttrycket eller CTE i SQL Server genom att använda WITH
– klausulen.
introduktion till CTE i SQL Server
CTE står för common table expression. Med en CTE kan du definiera en tillfällig namngiven resultatuppsättning som är tillgänglig tillfälligt i exekveringsområdet för ett uttalande som SELECT
, INSERT
, UPDATE
, DELETE
eller MERGE
.,
följande visar den gemensamma syntaxen för en CTE i SQL Server:
Code language: SQL (Structured Query Language) (sql)
i den här syntaxen:
- ange först uttrycksnamnet (
expression_name
) som du senare kan referera till i en fråga. - ange sedan en lista med kommaseparerade kolumner efter expression_name. Antalet kolumner måste vara samma som antalet kolumner som definieras i
CTE_definition
. - använd sedan som nyckelord efter uttryckets namn eller kolumnlista om kolumnlistan anges.,
- efter, definiera ett
SELECT
uttalande vars resultatuppsättning fyller det gemensamma tabelluttrycket. - se slutligen det vanliga tabelluttrycket i en fråga (
SQL_statement
) somSELECT
,INSERT
,UPDATE
,DELETE
, ellerMERGE
.
vi föredrar att använda vanliga tabelluttryck i stället för att använda underqueries eftersom vanliga tabelluttryck är mer läsbara., Vi använder också CTE i de frågor som innehåller analytiska funktioner (eller fönsterfunktioner)
SQL Server CTE exempel
låt oss ta några exempel på att använda vanliga tabelluttryck.
A) exempel på enkel SQL Server CTE
den här frågan använder en CTE för att returnera försäljningsbeloppen av säljare 2018:
följande bild visar resultatuppsättningen:
i det här exemplet:
- först definierade vi
cte_sales_amounts
som namnet på det gemensamma TABELLUTTRYCKET., CTE returnerar ett resultat som består av tre kolumnerstaff
,year
ochsales
som härrör från definitionsfrågan. - för det andra konstruerade vi en fråga som returnerar det totala försäljningsbeloppet av säljare och år genom att fråga data från tabellerna
orders
,order_items
ochstaffs
. - tredje hänvisade vi till CTE i den yttre frågan och väljer endast de rader vars år är 2018.,
noterade att detta exempel endast är för demonstrationssyftet för att hjälpa dig att gradvis förstå hur vanliga tabelluttryck fungerar. Det finns ett mer optimalt sätt att uppnå resultatet utan att använda CTE.
B) använda ett vanligt tabelluttryck för att göra rapportgenomsnitt baserat på antal
det här exemplet använder CTE för att returnera det genomsnittliga antalet försäljningsorder 2018 för alla säljare.
här är utgången:
Code language: SQL (Structured Query Language) (sql)
i det här exemplet:
först använde vi cte_sales
som namnet på det gemensamma tabelluttrycket., Vi hoppade över kolumnlistan för CTE så det härleds från CTE-definitionsdeklarationen. I det här exemplet innehåller staff_id
och order_count
kolumner.
För det andra använder vi följande Fråga för att definiera resultatuppsättningen som fyller det gemensamma tabelluttrycket cte_sales
. Frågan returnerar antalet beställningar i 2018 av säljare.
För det tredje hänvisar vi till funktionencte_sales
I det yttre uttalandet och använder funktionenAVG()
för att få den genomsnittliga försäljningsordern av alla staber.,
Code language: SQL (Structured Query Language) (sql)
C) använda flera SQL Server CTE i en enda fråga exempel
följande exempel använder två CTEcte_category_counts
ochcte_category_sales
för att returnera antalet produkter och försäljning för varje produktkategori. Den yttre frågan förenar två CTEs med kolumnencategory_id
.,
här är resultatuppsättningen:
i den här handledningen har du lärt dig hur du använder vanliga tabelluttryck eller CTE i SQL Server för att konstruera komplexa frågor på ett lättförståeligt sätt.