FROM záradék plusz JOIN, APPLY, PIVOT (Transact-SQL)
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-végpont a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
SQL Database-ben a Microsoft Fabric
A Transact-SQL-ben a FROM záradék a következő utasításokban érhető el:
A FROM záradék általában kötelező a SELECT utasításban. Ez alól kivételt képeznek a táblaoszlopok, és csak literálok, változók vagy aritmetikai kifejezések szerepelnek a listán.
Ez a cikk a FROM záradékban használható alábbi kulcsszavakat is ismerteti:
Transact-SQL szintaxis konvenciói
Szintaxis
Az SQL Server, az Azure SQL Database és a Fabric SQL Database szintaxisa:
[ FROM { <table_source> } [ , ...n ] ]
<table_source> ::=
{
table_or_view_name [ FOR SYSTEM_TIME <system_time> ] [ [ AS ] table_alias ]
[ <tablesample_clause> ]
[ WITH ( < table_hint > [ [ , ] ...n ] ) ]
| rowset_function [ [ AS ] table_alias ]
[ ( bulk_column_alias [ , ...n ] ) ]
| user_defined_function [ [ AS ] table_alias ]
| OPENXML <openxml_clause>
| derived_table [ [ AS ] table_alias ] [ ( column_alias [ , ...n ] ) ]
| <joined_table>
| <pivoted_table>
| <unpivoted_table>
| @variable [ [ AS ] table_alias ]
| @variable.function_call ( expression [ , ...n ] )
[ [ AS ] table_alias ] [ (column_alias [ , ...n ] ) ]
}
<tablesample_clause> ::=
TABLESAMPLE [ SYSTEM ] ( sample_number [ PERCENT | ROWS ] )
[ REPEATABLE ( repeat_seed ) ]
<joined_table> ::=
{
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| left_table_source { CROSS | OUTER } APPLY right_table_source
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
<pivoted_table> ::=
table_source PIVOT <pivot_clause> [ [ AS ] table_alias ]
<pivot_clause> ::=
( aggregate_function ( value_column [ [ , ] ...n ] )
FOR pivot_column
IN ( <column_list> )
)
<unpivoted_table> ::=
table_source UNPIVOT <unpivot_clause> [ [ AS ] table_alias ]
<unpivot_clause> ::=
( value_column FOR pivot_column IN ( <column_list> ) )
<column_list> ::=
column_name [ , ...n ]
<system_time> ::=
{
AS OF <date_time>
| FROM <start_date_time> TO <end_date_time>
| BETWEEN <start_date_time> AND <end_date_time>
| CONTAINED IN (<start_date_time> , <end_date_time>)
| ALL
}
<date_time>::=
<date_time_literal> | @date_time_variable
<start_date_time>::=
<date_time_literal> | @date_time_variable
<end_date_time>::=
<date_time_literal> | @date_time_variable
Az Azure Synapse Analytics párhuzamos adattárház szintaxisa:
FROM { <table_source> [ , ...n ] }
<table_source> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias
[ <tablesample_clause> ]
| derived_table [ AS ] table_alias [ ( column_alias [ , ...n ] ) ]
| <joined_table>
}
<tablesample_clause> ::=
TABLESAMPLE ( sample_number [ PERCENT ] ) -- Azure Synapse Analytics Dedicated SQL pool only
<joined_table> ::=
{
<table_source> <join_type> <table_source> ON search_condition
| <table_source> CROSS JOIN <table_source>
| left_table_source { CROSS | OUTER } APPLY right_table_source
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ INNER ] [ <join hint> ] JOIN
| LEFT [ OUTER ] JOIN
| RIGHT [ OUTER ] JOIN
| FULL [ OUTER ] JOIN
<join_hint> ::=
REDUCE
| REPLICATE
| REDISTRIBUTE
A Microsoft Fabric szintaxisa:
FROM { <table_source> [ , ...n ] }
<table_source> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias
| derived_table [ AS ] table_alias [ ( column_alias [ , ...n ] ) ]
| <joined_table>
}
<joined_table> ::=
{
<table_source> <join_type> <table_source> ON search_condition
| <table_source> CROSS JOIN <table_source>
| left_table_source { CROSS | OUTER } APPLY right_table_source
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ INNER ] [ <join hint> ] JOIN
| LEFT [ OUTER ] JOIN
| RIGHT [ OUTER ] JOIN
| FULL [ OUTER ] JOIN
<join_hint> ::=
REDUCE
| REPLICATE
| REDISTRIBUTE
Érvek
<table_source>
A Transact-SQL utasításban használandó táblát, nézetet, táblaváltozót vagy származtatott táblaforrást ad meg aliassal vagy anélkül. Egy utasításban legfeljebb 256 táblaforrás használható, bár a korlát a rendelkezésre álló memóriától és a lekérdezés egyéb kifejezéseinek összetettségétől függően változik. Előfordulhat, hogy az egyes lekérdezések legfeljebb 256 táblaforrást támogatnak.
Jegyzet
A lekérdezési teljesítmény sok táblára hivatkozhat egy lekérdezésben. A fordítási és optimalizálási időt további tényezők is befolyásolják. Ezek közé tartozik az indexek és indexelt nézetek jelenléte az egyes <table_source> és a <select_list> mérete a SELECT utasításban.
A FROM kulcsszó utáni táblaforrások sorrendje nem befolyásolja a visszaadott eredményhalmazt. Az SQL Server hibát ad vissza, ha ismétlődő nevek jelennek meg a FROM záradékban.
table_or_view_name
Egy tábla vagy nézet neve.
Ha a tábla vagy nézet az SQL Server ugyanazon példányán található egy másik adatbázisban, használjon teljes nevet az adatbázisűrlapon.séma.object_name.
Ha a tábla vagy nézet az SQL Serverl-példányon kívül létezik, használjon egy négyrészes nevet az linked_serverűrlapon.katalógus.séma.objektum. További információ: sp_addlinkedserver (Transact-SQL). Egy négyrészes név, amely az OPENDATASOURCE függvénnyel jön létre, mint a név kiszolgálói része, a távoli tábla forrásának megadására is használható. Az OPENDATASOURCE megadásakor előfordulhat, hogy database_name és schema_name nem minden adatforrásra vonatkoznak, és a távoli objektumot elérő OLE DB-szolgáltató képességeire is vonatkoznak.
[AS] table_alias
A table_source aliasa, amely kényelmesen használható, illetve egy tábla vagy nézet megkülönböztetésére egy öncsatlakozásban vagy alqueryben. Az alias gyakran egy rövidített táblanév, amellyel az illesztésben lévő táblák adott oszlopaira hivatkozhatnak. Ha ugyanaz az oszlopnév több táblában is szerepel az illesztésben, az SQL Server megkövetelheti, hogy az oszlop neve táblanévvel, nézetnévvel vagy aliassal legyen minősítve az oszlopok megkülönböztetéséhez. A táblanév nem használható alias definiálása esetén.
Származtatott tábla, sorkészlet vagy táblaértékű függvény vagy operátori záradék (például PIVOT vagy UNPIVOT) használatakor a záradék végén a szükséges table_alias a visszaadott összes oszlophoz tartozó táblanév, beleértve a csoportosítási oszlopokat is.
WITH (<table_hint> )
Megadja, hogy a lekérdezésoptimalizáló optimalizálási vagy zárolási stratégiát használ-e ezzel a táblával és ehhez az utasításhoz. További információ: Table Hints (Transact-SQL).
rowset_function
A következővonatkozik: SQL Server és SQL Database.
Megadja az egyik sorhalmazfüggvényt, például az OPENROWSET függvényt, amely táblahivatkozás helyett használható objektumot ad vissza. A sorhalmazfüggvények listájáról további információt a Sorhalmazfüggvények (Transact-SQL)című témakörben talál.
Az OPENROWSET és AZ OPENQUERY függvények távoli objektum megadásához való használata az objektumot elérő OLE DB-szolgáltató képességeitől függ.
bulk_column_alias
A következővonatkozik: SQL Server és SQL Database.
Nem kötelező alias az eredményhalmazban szereplő oszlopnév helyére. Az oszlop aliasok csak az OPENROWSET függvényt a BULK beállítással használó SELECT utasításokban engedélyezettek. Ha bulk_column_aliashasznál, adjon meg egy aliast minden táblaoszlophoz ugyanabban a sorrendben, mint a fájl oszlopai.
Jegyzet
Ez az alias felülbírálja a NAME attribútumot egy XML-formátumú fájl OSZLOP elemeiben, ha vannak ilyenek.
user_defined_function
Táblaértékű függvényt ad meg.
OPENXML <openxml_clause>
A következővonatkozik: SQL Server és SQL Database.
Sorhalmaznézetet biztosít egy XML-dokumentumon. További információ: OPENXML (Transact-SQL).
derived_table
Egy alquery, amely sorokat kér le az adatbázisból. derived_table a külső lekérdezés bemeneteként használják.
derived_table a Transact-SQL tábla értékkonstruktor funkciójával több sort is megadhat. Például SELECT * FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);
. További információ: Táblaérték-konstruktor (Transact-SQL).
column_alias
Választható alias a származtatott tábla eredményhalmazában szereplő oszlopnév helyére. Minden oszlophoz adjon meg egy oszlop aliast a kijelölési listában, és zárójelek közé foglalja az oszlop aliasainak teljes listáját.
table_or_view_name FOR SYSTEM_TIME <system_time>
A következővonatkozik: SQL Server 2016 (13.x) és újabb verziók, valamint AZ SQL Database.
Megadja, hogy az adatok egy adott verziója a megadott időbeli táblából és annak csatolt rendszerverziós előzménytáblájából legyen visszaadva
TABLESAMPLE záradék
A következővonatkozik: SQL Server, SQL Database és Azure Synapse Analytics dedikált SQL-készletek
Megadja, hogy a rendszer a táblából származó adatok mintáját adja vissza. A minta hozzávetőleges lehet. Ez a záradék bármely elsődleges vagy összekapcsolt táblában használható a SELECT vagy AZ UPDATE utasításban. A TABLESAMPLE nézetekkel nem adható meg.
Jegyzet
Ha az SQL Serverre frissített adatbázisokhoz használja a TABLESAMPLE-t, az adatbázis kompatibilitási szintje 110-re vagy annál magasabbra van állítva, a PIVOT nem engedélyezett rekurzív közös táblakifejezési (CTE) lekérdezésekben. További információ: ALTER DATABASE kompatibilitási szintje (Transact-SQL).
RENDSZER
Az ISO-szabványok által meghatározott implementációfüggő mintavételezési módszer. Az SQL Serverben ez az egyetlen elérhető mintavételezési módszer, amelyet alapértelmezés szerint alkalmaz. A SYSTEM egy lapalapú mintavételezési módszert alkalmaz, amelyben a rendszer véletlenszerű lapkészletet választ ki a táblázatból a mintához, és az ezen oldalak összes sorát minta-részhalmazként adja vissza.
sample_number
Pontos vagy közelítő állandó numerikus kifejezés, amely a sorok százalékát vagy számát jelöli. Ha a SZÁZALÉK értéket adja meg, a sample_number implicit módon konvertálódik egy lebegőpontos értékre; ellenkező esetben bigintlesz átalakítva. A SZÁZALÉK az alapértelmezett érték.
SZÁZALÉK
Megadja, hogy a tábla sorainak egy sample_number százalékát le kell kérni a táblából. A SZÁZALÉK megadásakor az SQL Server a megadott százalék hozzávetőleges értékét adja vissza. A PERCENT megadásakor a sample_number kifejezésnek 0 és 100 közötti értékre kell kiértékelnie.
SOROK
Azt adja meg, hogy a rendszer körülbelül sample_number sorokat kér le. A SOROK megadásakor az SQL Server a megadott sorok számának közelítését adja vissza. SOROK megadásakor a sample_number kifejezésnek nullánál nagyobb egész számértékre kell kiértékelnie.
ISMÉTELHETŐ
Azt jelzi, hogy a kijelölt minta ismét visszaadható. Ha ugyanazzal a repeat_seed értékkel van megadva, az SQL Server ugyanazt a sorrészt adja vissza, feltéve, hogy a tábla egyik sorában sem történt módosítás. Ha más repeat_seed értékkel van megadva, az SQL Server valószínűleg a tábla sorainak egy másik mintáját adja vissza. A táblázat alábbi műveletei módosulnak: beszúrás, frissítés, törlés, index újraépítése vagy töredezettségmentesítése, valamint adatbázis-visszaállítás vagy -csatolás.
repeat_seed
Egy állandó egész szám kifejezés, amelyet az SQL Server használ véletlenszerű szám létrehozásához. repeat_seed. Ha nincs megadva repeat_seed, az SQL Server véletlenszerűen rendel hozzá egy értéket. Egy adott repeat_seed érték esetében a mintavételi eredmény mindig ugyanaz, ha nem alkalmaztak módosításokat a táblában. A repeat_seed kifejezésnek nullánál nagyobb egész számra kell kiértékelnie.
Csatolt tábla
Az összekapcsolt táblák olyan eredményhalmazok, amelyek két vagy több tábla szorzatát jelentik. Több illesztés esetén zárójelekkel módosíthatja az illesztések természetes sorrendjét.
Illesztés típusa
Megadja az illesztési művelet típusát.
BELSŐ
Megadja az összes egyező sorpár visszaadását. Elveti a nem egyező sorokat mindkét táblából. Ha nincs megadva illesztéstípus, ez az alapértelmezett beállítás.
TELJES [ KÜLSŐ ]
Azt adja meg, hogy a bal vagy a jobb oldali táblából származó olyan sor, amely nem felel meg az illesztés feltételének, szerepel-e az eredményhalmazban, a másik táblának megfelelő kimeneti oszlopok pedig NULL értékre vannak állítva. Ez az INNER JOIN által általában visszaadott összes soron kívül van.
BAL [ KÜLSŐ ]
Megadja, hogy a bal oldali tábla összes olyan sora szerepeljen az eredményhalmazban, amely nem felel meg az illesztés feltételének, és a másik tábla kimeneti oszlopai a belső illesztés által visszaadott összes sor mellett NULL értékre vannak beállítva.
JOBBRA [ KÜLSŐ ]
A jobb oldali táblázat összes olyan sorát adja meg, amely nem felel meg az illesztés feltételének, szerepel az eredményhalmazban, a másik táblának megfelelő kimeneti oszlopok pedig NULL értékre vannak állítva a belső illesztés által visszaadott összes sor mellett.
Csatlakozási tipp
Az SQL Server és az SQL Database esetében az SQL Server lekérdezésoptimalizálója egy illesztési tippet vagy végrehajtási algoritmust használ a lekérdezés FROM záradékában megadott illesztésenként. További információ: Illesztés tippek (Transact-SQL).
Az Azure Synapse Analytics and Analytics Platform System (PDW) esetében ezek az illesztési tippek két nem kompatibilis oszlop belső illesztésére vonatkoznak. A lekérdezések teljesítményének növeléséhez korlátozza a lekérdezésfeldolgozás során bekövetkező adatáthelyezés mennyiségét. Az Azure Synapse Analytics and Analytics Platform System (PDW) engedélyezett illesztési tippjei a következők:
CSÖKKENT
Csökkenti az illesztés jobb oldalán lévő táblázathoz áthelyezendő sorok számát, hogy két nem kompatibilis táblázatot kompatibilissé tegyen. A REDUCE tippet félillesztésnek is nevezik.
UTÁNOZ
Az illesztés jobb oldalán lévő táblázat illesztő oszlopában lévő értékek replikálódnak az összes csomópontra. A bal oldali táblázat az oszlopok replikált verziójához csatlakozik.
RÁZZA
Két adatforrást kényszerít a JOIN záradékban megadott oszlopokra. Elosztott táblák esetében az Analytics Platform System (PDW) shuffle áthelyezést hajt végre. Replikált tábla esetén az Analytics Platform System (PDW) vágási műveletet hajt végre. Az áthelyezési típusok megismeréséhez tekintse meg a Analytics Platform System (PDW) termékdokumentációjának"A lekérdezéstervek ismertetése" című cikk "DMS-lekérdezésterv-műveletek" című szakaszát. Ez a tipp javíthatja a teljesítményt, ha a lekérdezési terv szórásos áthelyezéssel oldja meg a nem kompatibilis elosztási illesztéseket.
CSATLAKOZIK
Azt jelzi, hogy a megadott illesztési műveletnek a megadott táblaforrások vagy nézetek között kell történnie.
ON <search_condition>
Megadja az illesztés alapjául szolgáló feltételt. A feltétel bármilyen predikátumot megadhat, bár gyakran használnak oszlopokat és összehasonlító operátorokat, például:
SELECT p.ProductID,
v.BusinessEntityID
FROM Production.Product AS p
INNER JOIN Purchasing.ProductVendor AS v
ON (p.ProductID = v.ProductID);
Ha a feltétel oszlopokat ad meg, az oszlopoknak nem kell ugyanazzal a névvel vagy adattípussal rendelkezniük; ha azonban az adattípusok nem azonosak, kompatibilisnek vagy az SQL Server implicit módon konvertálható típusainak kell lenniük. Ha az adattípusok nem konvertálhatók implicit módon, a feltételnek explicit módon konvertálnia kell az adattípust a CONVERT függvény használatával.
Lehetnek olyan predikátumok, amelyek az ON záradékban csak az egyik csatlakoztatott táblát foglalják magukban. Az ilyen predikátumok a lekérdezés WHERE záradékában is szerepelhetnek. Bár az ilyen predikátumok elhelyezése nem tesz különbséget az INNER illesztések esetében, előfordulhat, hogy az KÜLSŐ illesztések használatakor más eredményt adnak. Ennek az az oka, hogy az ON záradék predikátumait a rendszer az illesztés előtt alkalmazza a táblára, míg a WHERE záradék szemantikailag az illesztés eredményére lesz alkalmazva.
A keresési feltételekről és predikátumokról további információt a Keresési feltétel (Transact-SQL)című témakörben talál.
KERESZTBE ILLESZTÉS
Két tábla kereszttermékét adja meg. Ugyanazokat a sorokat adja vissza, mintha nem lett volna megadva WHERE záradék egy régi stílusú, nem SQL-92 stílusú illesztésben.
left_table_source { CROSS | OUTER} APPLY right_table_source
Azt adja meg, hogy az APPLY operátor right_table_source a left_table_sourceminden sorára ki legyen értékelve. Ez a funkció akkor hasznos, ha a right_table_source olyan táblaértékű függvényt tartalmaz, amely az oszlopértékeket a left_table_source argumentumai közé veszi.
A KERESZT vagy a KÜLSŐ értéket az APPLY paraméterrel kell megadni. A KERESZT megadásakor a rendszer nem hoz létre sorokat, amikor a right_table_source kiértékeli a left_table_source egy adott sorával, és üres eredményhalmazt ad vissza.
Az OUTER megadásakor a left_table_source minden sorához egy sor jön létre, még akkor is, ha a right_table_source kiértékeli az adott sort, és üres eredményhalmazt ad vissza.
További információ: Megjegyzések szakasz.
left_table_source
Az előző argumentumban definiált táblaforrás. További információkért lásd a Megjegyzések szakaszt.
right_table_source
Az előző argumentumban definiált táblaforrás. További információkért lásd a Megjegyzések szakaszt.
PIVOT záradék
TABLE_SOURCE PIVOT <pivot_clause>
Megadja, hogy a table_source a pivot_columnalapján legyen forgatva. table_source egy tábla- vagy táblakifejezés. A kimenet egy tábla, amely a table_source összes oszlopát tartalmazza, kivéve a pivot_column és a value_column. A table_sourceoszlopait a pivot_column és a value_columnkivételével a kimutatás operátor csoportosítási oszlopainak nevezzük. A PIVOT-ról és a UNPIVOT-ról további információt a A PIVOT és a UNPIVOTcímű témakörben talál.
A PIVOT egy csoportosítási műveletet hajt végre a bemeneti táblán a csoportosítási oszlopok tekintetében, és minden csoporthoz egy sort ad vissza. A kimenet emellett a input_tablepivot_column megjelenő column_list megadott értékekhez egy oszlopot is tartalmaz.
További információkért tekintse meg az alábbi Megjegyzések szakaszt.
aggregate_function
Egy rendszer- vagy felhasználó által definiált összesítő függvény, amely egy vagy több bemenetet fogad el. Az aggregátumfüggvénynek null értékre kell invariánsnak lennie. A null értékekre invariáns összesítő függvények nem veszik figyelembe a csoport null értékeit az összesített érték kiértékelése során.
A DARAB(*) rendszerösszesítő függvény nem engedélyezett.
value_column
A PIVOT operátor értékoszlopa. UNPIVOT esetén a value_column nem lehet egy meglévő oszlop neve a bemeneti table_source.
FOR pivot_column
A PIVOT operátor kimutatásoszlopa. pivot_column implicit módon vagy explicit módon konvertálhatónak kell lennie nvarchar(). Ez az oszlop nem lehet kép vagy rowversion.
UNPIVOT használata esetén pivot_column a kimeneti oszlop neve, amely a table_sourceleszűkítve. Az ilyen nevű table_source nem lehet meglévő oszlop.
IN ( column_list )
A PIVOT záradékban felsorolja a pivot_column azon értékeit, amelyek a kimeneti tábla oszlopnevei lesznek. A lista nem tud olyan oszlopneveket megadni, amelyek már léteznek a kimutatás alatt álló bemeneti table_source.
A UNPIVOT záradékban a table_source egyetlen pivot_columnszűkített oszlopait sorolja fel.
table_alias
A kimeneti tábla aliasneve. pivot_table_alias kell megadni.
UNPIVOT <unpivot_clause>
Megadja, hogy a bemeneti tábla column_list több oszlopából egyetlen, pivot_columnnevű oszlopra legyen szűkítve. A PIVOT-ról és a UNPIVOT-ról további információt a A PIVOT és a UNPIVOTcímű témakörben talál.
AS OF <date_time>
A következővonatkozik: SQL Server 2016 (13.x) és újabb verziók, valamint AZ SQL Database.
Egy olyan táblát ad vissza, amely minden sorhoz egyetlen rekordot tartalmaz, amely a múltban megadott időpontban tényleges (aktuális) értékeket tartalmazott. A rendszer belsőleg egyesítést hajt végre az időbeli tábla és az előzménytáblája között, és az eredmények szűrve lesznek, hogy visszaadják a sor azon értékeit, amelyek a <date_time> paraméter által megadott időpontban érvényesek voltak. A sor értéke akkor tekinthető érvényesnek, ha a system_start_time_column_name érték kisebb vagy egyenlő a <date_time> paraméter értékénél, és a system_end_time_column_name érték nagyobb, mint a <date_time> paraméter értéke.
FROM <start_date_time> TO <end_date_time>
A következővonatkozik: SQL Server 2016 (13.x) és újabb verziók, valamint AZ SQL Database.
Egy táblát ad vissza az összes olyan rekordverzió értékével, amely a megadott időtartományon belül aktív volt, függetlenül attól, hogy a FROM argumentum <start_date_time> paraméterértéke előtt kezdtek aktívak lenni, vagy a TO argumentum <end_date_time> paraméterértéke után már nem voltak aktívak. A rendszer belsőleg egyesítést hajt végre az időbeli tábla és az előzménytáblája között, és a rendszer szűri az eredményeket, hogy visszaadja az összes olyan sorverzió értékeit, amelyek a megadott időtartomány alatt bármikor aktívak voltak. A FROM végpont által definiált alsó határon aktívvá vált sorok bele vannak foglalva, és a TO végpont által meghatározott felső határon aktívvá vált sorok nem lesznek belefoglalva.
<START_DATE_TIME> ÉS <END_DATE_TIME> KÖZÖTT
A következővonatkozik: SQL Server 2016 (13.x) és újabb verziók, valamint AZ SQL Database.
Ugyanaz, mint a fenti FROM <start_date_time> TO <end_date_time> leírásban, kivéve azokat a sorokat, amelyek aktívvá váltak a <end_date_time> végpont által meghatározott felső határon.
A (<start_date_time>, <end_date_time>)
A következővonatkozik: SQL Server 2016 (13.x) és újabb verziók, valamint AZ SQL Database.
Olyan táblát ad vissza, amely az összes megnyitott és bezárt rekordverzió értékeit tartalmazza a CONTAINED IN argumentum két dátum/idő értéke által meghatározott megadott időtartományon belül. Azokat a sorokat is belefoglaljuk, amelyek pontosan az alsó határon váltak aktívvá, vagy a felső határon már nem aktívak.
ÖSSZES
Az aktuális és az előzménytáblából származó összes sor értékeit tartalmazó táblát ad vissza.
Megjegyzések
A FROM záradék támogatja az SQL-92 szintaxist az összekapcsolt táblákhoz és a származtatott táblákhoz. Az SQL-92 szintaxis az INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER és CROSS illesztés operátorokat tartalmazza.
A FROM záradékon belüli UNION és JOIN a nézetekben, valamint származtatott táblákban és allekérdezésekben támogatott.
Az öncsatlakozás egy olyan tábla, amely önmagához csatlakozik. Az önálló illesztésen alapuló beszúrási vagy frissítési műveletek a FROM záradékban szereplő sorrendet követik.
Mivel az SQL Server az oszlopeloszlási statisztikákat biztosító csatolt kiszolgálók terjesztési és számossági statisztikáit veszi figyelembe, a TÁVOLI illesztési tipp nem szükséges az illesztés távoli kiértékeléséhez. Az SQL Server lekérdezésfeldolgozója figyelembe veszi a távoli statisztikákat, és meghatározza, hogy megfelelő-e a távoli illesztés stratégiája. A TÁVOLI illesztési tipp olyan szolgáltatók számára hasznos, amelyek nem nyújtanak oszlopeloszlási statisztikákat.
Az APPLY használata
Az APPLY operátor bal és jobb operandusai táblakifejezések. Az operandusok közötti fő különbség az, hogy a right_table_source olyan táblaértékű függvényt használhat, amely a left_table_source egy oszlopát veszi fel a függvény argumentumai közé. A left_table_source tartalmazhat táblaértékű függvényeket, de nem tartalmazhat olyan argumentumokat, amelyek a right_table_sourceoszlopai.
Az APPLY operátor a következő módon működik a FROM záradék táblaforrásának előállításához:
Kiértékeli a left_table_source minden sorára vonatkozó right_table_source, hogy sorhalmazokat állítsunk elő.
A right_table_source értékei a left_table_sourcefüggenek. right_table_source körülbelül így jeleníthetők meg:
TVF(left_table_source.row)
, ahol aTVF
táblaértékű függvény.Egy UNION ALL művelet végrehajtásával egyesíti a right_table_source kiértékelésének egyes soraihoz létrehozott eredményhalmazokat a left_table_source.
Az APPLY operátor eredménye által létrehozott oszlopok listája az left_table_source oszlopkészlete, amely a right_table_sourceoszloplistával van kombinálva.
A PIVOT és a UNPIVOT használata
A pivot_column és a value_column a PIVOT operátor által használt oszlopok csoportosítása. A PIVOT a következő folyamatot követi a kimeneti eredménykészlet beszerzéséhez:
A csoportosítási oszlopokon végrehajt egy GROUP BY műveletet a input_table, és minden csoporthoz létrehoz egy kimeneti sort.
A kimeneti sor csoportosítási oszlopai a input_tableaz adott csoport megfelelő oszlopértékét kapják meg.
Az egyes kimeneti sorok oszloplistájában szereplő oszlopok értékeit az alábbiak végrehajtásával hozza létre:
Az előző lépésben a GROUP BY-ban létrehozott sorok csoportosítása a pivot_column.
A column_listminden kimeneti oszlopához válasszon ki egy olyan alcsoportot, amely megfelel a feltételnek:
pivot_column = CONVERT(<data type of pivot_column>, 'output_column')
aggregate_function kiértékelése az alcsoport value_column alapján történik, és az eredmény a megfelelő output_columnértékeként lesz visszaadva. Ha az alcsoport üres, az SQL Server null értéket hoz létre az adott output_column. Ha az összesítő függvény DARAB, és az alcsoport üres, a függvény nulla (0) értéket ad vissza.
Jegyzet
A UNPIVOT
záradék oszlopazonosítói a katalógus rendezést követik. Az SQL Database esetében a rendezés mindig SQL_Latin1_General_CP1_CI_AS
. A részben tartalmazott SQL Server-adatbázisok esetén a rendezés mindig Latin1_General_100_CI_AS_KS_WS_SC
. Ha az oszlop más oszlopokkal van kombinálva, az ütközések elkerülése érdekében egy rendezési záradékra (COLLATE DATABASE_DEFAULT
) van szükség.
A KIMUTATÁSról és a UNPIVOT-ról – példákat is beleértve – további információt a A PIVOT és a UNPIVOTcímű témakörben talál.
Engedélyek
A DELETE, a SELECT vagy az UPDATE utasítás engedélyeit igényli.
Példák
Egy. FROM záradék használata
Az alábbi példa lekéri a TerritoryID
és Name
oszlopokat az AdventureWorks2022 mintaadatbázis SalesTerritory
táblájából.
SELECT TerritoryID,
Name
FROM Sales.SalesTerritory
ORDER BY TerritoryID;
Itt van az eredményhalmaz.
TerritoryID Name
----------- ------------------------------
1 Northwest
2 Northeast
3 Central
4 Southwest
5 Southeast
6 Canada
7 France
8 Germany
9 Australia
10 United Kingdom
(10 row(s) affected)
B. A TABLOCK és a HOLDLOCK optimalizáló tippjeinek használata
Az alábbi részleges tranzakció bemutatja, hogyan helyezhet el explicit megosztott táblazárolást Employee
, és hogyan olvashatja el az indexet. A zárolás a teljes tranzakció során meg van tartva.
BEGIN TRANSACTION
SELECT COUNT(*)
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK);
C. Az SQL-92 CROSS JOIN szintaxisának használata
Az alábbi példa az AdventureWorks2022 adatbázisában Employee
és Department
két tábla kereszttermékét adja vissza. A rendszer visszaadja a BusinessEntityID
sorok és Department
összes lehetséges kombinációjának listáját.
SELECT e.BusinessEntityID,
d.Name AS Department
FROM HumanResources.Employee AS e
CROSS JOIN HumanResources.Department AS d
ORDER BY e.BusinessEntityID,
d.Name;
D. Az SQL-92 FULL OUTER JOIN szintaxisának használata
Az alábbi példa az AdventureWorks2022 adatbázis SalesOrderDetail
táblájának terméknevét és a hozzájuk tartozó értékesítési rendeléseket adja vissza. Emellett minden olyan értékesítési rendelést is visszaad, amely nem szerepel a Product
táblában, valamint az Product
táblában felsorolttól eltérő értékesítési megrendeléssel rendelkező termékeket is.
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name,
sod.SalesOrderID
FROM Production.Product AS p
FULL JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name;
E. Az SQL-92 LEFT OUTER JOIN szintaxisának használata
Az alábbi példa két táblát illeszt be ProductID
, és megőrzi a bal oldali tábla nem egyező sorait. A Product
tábla megegyezik az egyes táblák ProductID
oszlopaiban található SalesOrderDetail
táblával. Minden megrendelt és nem megrendelt termék megjelenik az eredményhalmazban.
SELECT p.Name,
sod.SalesOrderID
FROM Production.Product AS p
LEFT OUTER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name;
F. Az SQL-92 INNER JOIN szintaxisának használata
Az alábbi példa az összes terméknevet és értékesítési rendelés azonosítót visszaadja.
-- By default, SQL Server performs an INNER JOIN if only the JOIN
-- keyword is specified.
SELECT p.Name,
sod.SalesOrderID
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name;
G. Az SQL-92 RIGHT OUTER JOIN szintaxisának használata
Az alábbi példa két táblát illeszt be TerritoryID
, és megőrzi a jobb oldali táblázat nem egyező sorait. A SalesTerritory
tábla megegyezik az egyes táblák TerritoryID
oszlopában található SalesPerson
táblával. Az összes értékesítő megjelenik az eredményhalmazban, függetlenül attól, hogy terület van-e hozzájuk rendelve.
SELECT st.Name AS Territory,
sp.BusinessEntityID
FROM Sales.SalesTerritory AS st
RIGHT OUTER JOIN Sales.SalesPerson AS sp
ON st.TerritoryID = sp.TerritoryID;
H. HASH és MERGE illesztés tippek használata
Az alábbi példa háromtáblás illesztéseket végez a Product
, ProductVendor
és Vendor
táblák között a termékek és szállítóik listájának létrehozásához. A lekérdezésoptimalizáló egyesít Product
és ProductVendor
(p
és pv
) egy MERGE illesztés használatával. Ezután a Product
és ProductVendor
MERGE illesztés (p
és pv
) eredménye a Vendor
táblához csatlakozik, hogy (p
és pv
) és v
.
Fontos
Miután megadta az illesztésre vonatkozó tippet, az INNER kulcsszó már nem választható, és explicit módon meg kell adni az INNER JOIN végrehajtásához.
SELECT p.Name AS ProductName,
v.Name AS VendorName
FROM Production.Product AS p
INNER MERGE JOIN Purchasing.ProductVendor AS pv
ON p.ProductID = pv.ProductID
INNER HASH JOIN Purchasing.Vendor AS v
ON pv.BusinessEntityID = v.BusinessEntityID
ORDER BY p.Name,
v.Name;
Én. Származtatott tábla használata
Az alábbi példa egy származtatott táblát, egy SELECT
utasítást használ a FROM
záradék után, hogy visszaadja az összes alkalmazott és város utónevét és vezetéknevét.
SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name,
d.City
FROM Person.Person AS p
INNER JOIN HumanResources.Employee e
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN (
SELECT bea.BusinessEntityID,
a.City
FROM Person.Address AS a
INNER JOIN Person.BusinessEntityAddress AS bea
ON a.AddressID = bea.AddressID
) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName,
p.FirstName;
J. Táblák sormintájának adatainak olvasása a TABLESAMPLE használatával
Az alábbi példa a FROM
záradék TABLESAMPLE
használatával adja vissza a Customer
tábla összes sorának körülbelül 10
százalékát.
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM(10 PERCENT);
K. Az APPLY használata
Az alábbi példa feltételezi, hogy a következő táblák és táblaértékfüggvények léteznek az adatbázisban:
Objektum neve | Oszlopnevek |
---|---|
Szervezeti egységek | DeptID, DivisionID, DeptName, DeptMgrID |
EmpMgr | MgrID, EmpID |
Alkalmazottak | EmpID, EmpLastName, EmpFirstName, EmpSalary |
GetReports(MgrID) | EmpID, EmpLastName, EmpSalary |
A GetReports
táblaértékű függvény a megadott MgrID
közvetlenül vagy közvetve jelentést tevő összes alkalmazott listáját adja vissza.
A példa a APPLY
használatával adja vissza az adott részleg összes részlegét és minden alkalmazottát. Ha egy adott részleg nem rendelkezik alkalmazottakkal, az adott részleghez nem lesznek visszaadott sorok.
SELECT DeptID,
DeptName,
DeptMgrID,
EmpID,
EmpLastName,
EmpSalary
FROM Departments d
CROSS APPLY dbo.GetReports(d.DeptMgrID);
Ha azt szeretné, hogy a lekérdezés az alkalmazottak nélküli részlegek sorait hozza létre, amelyek null értékeket hoznak létre a EmpID
, EmpLastName
és EmpSalary
oszlopokhoz, használja inkább a OUTER APPLY
.
SELECT DeptID,
DeptName,
DeptMgrID,
EmpID,
EmpLastName,
EmpSalary
FROM Departments d
OUTER APPLY dbo.GetReports(d.DeptMgrID);
L. A CROSS APPLY használata
Az alábbi példa a tervgyorsítótárban található összes lekérdezési terv pillanatképét kéri le a sys.dm_exec_cached_plans
dinamikus felügyeleti nézet lekérdezésével, hogy lekérje a gyorsítótárban lévő összes lekérdezési terv tervfogantyúit. Ezután a CROSS APPLY
operátor meg van adva, hogy a tervfogantyúkat átengedje sys.dm_exec_query_plan
. A tervgyorsítótárban jelenleg található összes terv XML Showplan-kimenete a visszaadott tábla query_plan
oszlopában található.
USE master;
GO
SELECT dbid,
object_id,
query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO
M. A FOR SYSTEM_TIME használata
A következővonatkozik: SQL Server 2016 (13.x) és újabb verziók, valamint AZ SQL Database.
Az alábbi példa a FOR SYSTEM_TIME AS OF date_time_literal_or_variable argumentumot használja a 2014. január 1-jének tényleges (aktuális) táblasorok visszaadásához.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME AS OF '2014-01-01'
WHERE ManagerID = 5;
Az alábbi példa a FOR SYSTEM_TIME FROM date_time_literal_or_variable TO date_time_literal_or_variable argumentummal adja vissza a 2013. január 1-jével kezdődő és 2014. január 1-jével végződő időszakban aktív összes sort, a felső határ ki nem zárva.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME FROM '2013-01-01' TO '2014-01-01'
WHERE ManagerID = 5;
Az alábbi példa a FOR SYSTEM_TIME BETWEEN date_time_literal_or_variable AND date_time_literal_or_variable argumentummal adja vissza a 2013. január 1-jével kezdődő és 2014. január 1-jével végződő időszakban aktív összes sort, beleértve a felső határt is.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME BETWEEN '2013-01-01' AND '2014-01-01'
WHERE ManagerID = 5;
Az alábbi példa a FOR SYSTEM_TIME CONTAINED IN (date_time_literal_or_variable, date_time_literal_or_variable) argumentumot használja a 2013. január 1-jével kezdődő és 2014. január 1-jével végződő időszakban megnyitott és bezárt összes sor visszaadására.
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME CONTAINED IN ('2013-01-01', '2014-01-01')
WHERE ManagerID = 5;
Az alábbi példa egy változót használ literál helyett a lekérdezés dátumhatárértékeinek megadásához.
DECLARE @AsOfFrom DATETIME2 = DATEADD(month, -12, SYSUTCDATETIME());
DECLARE @AsOfTo DATETIME2 = DATEADD(month, -6, SYSUTCDATETIME());
SELECT DepartmentNumber,
DepartmentName,
ManagerID,
ParentDepartmentNumber
FROM DEPARTMENT
FOR SYSTEM_TIME
FROM @AsOfFrom TO @AsOfTo
WHERE ManagerID = 5;
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
N. Az INNER JOIN szintaxis használata
Az alábbi példa a SalesOrderNumber
, ProductKey
és EnglishProductName
oszlopokat adja vissza a FactInternetSales
és DimProduct
táblákból, ahol az illesztéskulcs (ProductKey
) mindkét táblában megegyezik. A SalesOrderNumber
és EnglishProductName
oszlopok csak az egyik táblában találhatók, ezért nem szükséges megadni a tábla aliasát ezekkel az oszlopokkal, ahogy az látható; ezeket az aliasokat az olvashatóság érdekében tartalmazza. Az AS az aliasnév előtt nem kötelező, de olvashatóság és az ANSI szabványnak való megfelelés érdekében ajánlott.
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
INNER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey;
Mivel a belső illesztésekhez nincs szükség a INNER
kulcsszóra, ugyanez a lekérdezés a következőképpen írható:
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
INNER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey;
Ezzel a lekérdezéssel egy WHERE
záradék is használható az eredmények korlátozásához. Ez a példa az "SO5000" értéknél magasabb SalesOrderNumber
eredményeket korlátozza:
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
INNER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey
WHERE fis.SalesOrderNumber > 'SO50000'
ORDER BY fis.SalesOrderNumber;
O. A LEFT OUTER JOIN és a RIGHT OUTER JOIN szintaxis használata
Az alábbi példa a ProductKey
oszlopok FactInternetSales
és DimProduct
tábláit illeszti össze. A bal oldali külső illesztés szintaxisa megőrzi a bal oldali (FactInternetSales
) tábla nem egyező sorait. Mivel a FactInternetSales
tábla nem tartalmaz olyan ProductKey
értékeket, amelyek nem felelnek meg a DimProduct
táblának, ez a lekérdezés ugyanazokat a sorokat adja vissza, mint a jelen cikk korábbi, első belső illesztő példája.
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimProduct AS dp
ON dp.ProductKey = fis.ProductKey;
Ez a lekérdezés OUTER
kulcsszó nélkül is megírható.
A jobb oldali külső illesztésekben a jobb oldali táblázat nem egyező sorai megmaradnak. Az alábbi példa ugyanazokat a sorokat adja vissza, mint a fenti bal oldali külső illesztés.
-- Uses AdventureWorks
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
RIGHT OUTER JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
Az alábbi lekérdezés a DimSalesTerritory
táblát használja bal oldali külső illesztés bal oldali táblájaként. Lekéri a SalesOrderNumber
értékeket a FactInternetSales
táblából. Ha egy adott SalesTerritoryKey
nincsenek rendelések, a lekérdezés null értéket ad vissza az adott sorhoz tartozó SalesOrderNumber
. Ezt a lekérdezést a SalesOrderNumber
oszlop rendezi, így az oszlopban lévő NULL-ek az eredmények tetején jelennek meg.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
LEFT OUTER JOIN FactInternetSales AS fis
ON dst.SalesTerritoryKey = fis.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
Ezt a lekérdezést át lehet írni egy jobb külső illesztéssel az eredmények lekéréséhez:
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM FactInternetSales AS fis
RIGHT OUTER JOIN DimSalesTerritory AS dst
ON fis.SalesTerritoryKey = dst.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
P. A TELJES KÜLSŐ ILLESZTÉS szintaxis használata
Az alábbi példa egy teljes külső illesztést mutat be, amely mindkét illesztett tábla összes sorát visszaadja, de null értéket ad vissza a másik táblából nem egyező értékekhez.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
FULL JOIN FactInternetSales AS fis
ON dst.SalesTerritoryKey = fis.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
Ez a lekérdezés OUTER
kulcsszó nélkül is megírható.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
dst.SalesTerritoryRegion,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
FULL JOIN FactInternetSales AS fis
ON dst.SalesTerritoryKey = fis.SalesTerritoryKey
ORDER BY fis.SalesOrderNumber;
Q. A CROSS JOIN szintaxis használata
Az alábbi példa a FactInternetSales
és DimSalesTerritory
táblák kereszttermékét adja vissza. A rendszer a SalesOrderNumber
és a SalesTerritoryKey
összes lehetséges kombinációjának listáját adja vissza. Figyelje meg, hogy a keresztcsatlakozásos lekérdezésben nincs ON
záradék.
-- Uses AdventureWorks
SELECT dst.SalesTerritoryKey,
fis.SalesOrderNumber
FROM DimSalesTerritory AS dst
CROSS JOIN FactInternetSales AS fis
ORDER BY fis.SalesOrderNumber;
R. Származtatott tábla használata
Az alábbi példa egy származtatott táblát (a FROM
záradék utáni SELECT
utasítást) használ a DimCustomer
táblában szereplő összes ügyfél CustomerKey
és LastName
oszlopának visszaadásához, amely BirthDate
1970. január 1-jével későbbi értékekkel és a "Smith" vezetéknévvel rendelkezik.
-- Uses AdventureWorks
SELECT CustomerKey,
LastName
FROM (
SELECT *
FROM DimCustomer
WHERE BirthDate > '01/01/1970'
) AS DimCustomerDerivedTable
WHERE LastName = 'Smith'
ORDER BY LastName;
S. A REDUCE illesztés tippje példa
Az alábbi példa a REDUCE
illesztés tippet használja a származtatott tábla lekérdezésen belüli feldolgozásának módosításához. Ha a REDUCE
illesztő tippet használja ebben a lekérdezésben, a fis.ProductKey
kivetíti, replikálja és megkülönbözteti, majd DimProduct
csatlakozik a DimProduct
ProductKey
. Az eredményként kapott származtatott tábla fis.ProductKey
lesz elosztva.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REDUCE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
T. PÉLDA a REPLIKÁLÁS illesztés tippre
Ez a következő példa ugyanazt a lekérdezést mutatja be, mint az előző példában, azzal a kivételrel, hogy a REDUCE
illesztés tippje helyett egy REPLICATE
illesztésmutatót használ. A REPLICATE
tipp használata esetén a FactInternetSales
tábla ProductKey
(illesztés) oszlopában lévő értékek replikálódnak az összes csomópontra. A DimProduct
tábla az értékek replikált verziójához csatlakozik.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REPLICATE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
U. A REDISTRIBUTE tipp használatával garantálhatja a nem kompatibilis elosztási illesztés shuffle áthelyezését
Az alábbi lekérdezés a REDISTRIBUTE lekérdezési tippet használja egy nem kompatibilis elosztási illesztéshez. Ez garantálja, hogy a lekérdezésoptimalizáló shuffle áthelyezést használ a lekérdezési tervben. Ez azt is garantálja, hogy a lekérdezési terv nem fog szórásos áthelyezést használni, amely egy elosztott táblát replikált táblába helyez át.
Az alábbi példában a REDISTRIBUTE tipp arra kényszeríti a Shuffle mozgatását a FactInternetSales táblában, mert a ProductKey a DimProduct terjesztési oszlopa, és nem a FactInternetSales terjesztési oszlopa.
-- Uses AdventureWorks
SELECT dp.ProductKey,
fis.SalesOrderNumber,
fis.TotalProductCost
FROM DimProduct AS dp
INNER REDISTRIBUTE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
V. Táblák sormintájának adatainak olvasása a TABLESAMPLE használatával
Az alábbi példa a FROM
záradék TABLESAMPLE
használatával adja vissza a Customer
tábla összes sorának körülbelül 10
százalékát.
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM(10 PERCENT);