TOP (Transact-SQL) (Magyar)

  • 2017.03.16.
  • 11 perc olvasási idő
    • V
    • M
    • r
    • c
    • d
    • +12

A következőre vonatkozik: SQL Server (az összes támogatott verzió) Azure SQL Database Azure SQL felügyelt példány Azure Synapse Analytics Párhuzamos adattárház

Korlátozza a lekérdezési eredménykészletben visszaadott sorokat az SQL Server meghatározott sorainak vagy sorainak százalékos arányára. Amikor a TOP-ot használja az ORDER BY záradékkal, az eredménykészlet a rendezett sorok első N számára korlátozódik. Ellenkező esetben a TOP az első N sorszámot definiálatlan sorrendben adja vissza. Ezzel a záradékkal megadhatja a SELECT utasításból visszaadott sorok számát. Vagy használja a TOP elemet az INSERT, UPDATE, MERGE vagy DELETE utasítás által érintett sorok megadásához.

Transact-SQL szintaxis konvenciók

Szintaxis

A következő az SQL Server és az Azure SQL Database szintaxisa:

A következő az Azure Synapse Analytics és a Parallel szintaxisa Adattárház:

Megjegyzés

Az SQL Server 2014 és korábbi verzióinak Transact-SQL szintaxisának megtekintéséhez lásd: Korábbi verziók dokumentációja .

Érvek

kifejezés
A visszaküldendő sorok számát meghatározó numerikus kifejezés. A kifejezés implicit módon úszó értékre konvertálódik, ha megadja a PERCENT értéket. Ellenkező esetben a kifejezés bigintre konvertálódik.

PERCENT
Azt jelzi, hogy a lekérdezés csak a sorok első kifejezési százalékát adja vissza az eredményhalmazból. A törtrészeket felfelé kerekítjük a következő egész számra.

WIES TIES-sel

Két vagy több olyan sort ad vissza, amelyek a korlátozott eredménykészlet utolsó helyére állnak. Ezt az argumentumot az ORDER BY záradékkal kell használnia. A WIES TIES használatával több sor kerülhet visszaadásra, mint a kifejezésben megadott érték. Például, ha a kifejezés értéke 5, de két további sor egyezik az ORDER BY oszlop értékeivel az 5. sorban, az eredménykészlet hét sort fog tartalmazni.

A TOP záradékot megadhatja a WITH TIES argumentum csak a SELECT utasításokban, és csak akkor, ha az ORDER BY záradékot is megadta. A rekordok összekapcsolásának visszaadott sorrendje tetszőleges. A ORDER BY nem befolyásolja ezt a szabályt.

Legjobb gyakorlatok

A SELECT utasításban mindig használjon ORDER BY záradékot a TOP záradékkal. Mivel ez az egyetlen módja annak, hogy kiszámíthatóan jelezze, mely sorokat érinti a TOP.

A lekérdezéses lapozás megoldásának megvalósításához használja az OFFSET és FETCH parancsokat az ORDER BY záradékban a TOP záradék helyett. azaz darabok vagy “oldalak” küldése az ügyfélnek) könnyebben megvalósítható az OFFSET és a FETCH záradékok használatával. További információ: ORDER BY záradék (Transact-SQL).

Használja a TOP (vagy OFFSET és FETCH) a ROWCOUNT BEÁLLÍTÁSA helyett a visszaadott sorok számának korlátozásához. Ezeket a módszereket előnyben részesítik a SET ROWCOUNT használatával szemben a következő okok miatt:

  • A SELECT utasítás részeként a lekérdezés optimalizáló figyelembe veheti a kifejezés értékét a TOP vagy a FETCH záradékokban a lekérdezés optimalizálása során. Mivel a SET ROWCOUNT parancsot egy lekérdezést futtató utasításon kívül használja, annak értéke nem vehető figyelembe a lekérdezési tervben.

Kompatibilitási támogatás

A visszamenőleges kompatibilitás érdekében a zárójelek nem kötelezőek a SELECT utasításokban, ha a kifejezés egész konst hangya. Javasoljuk, hogy a SELECT utasításokban mindig zárójelet használjon a TOP számára. Ez biztosítja az összhangot az INSERT, UPDATE, MERGE és DELETE utasításokban előírt használatával.

Interoperabilitás

A TOP kifejezés nem befolyásolja azokat az utasításokat, amelyek egy trigger hatására futhatnak. Az indítókba beillesztett és törölt táblák csak azokat a sorokat adják vissza, amelyeket az INSERT, az UPDATE, az MERGE vagy a DELETE utasítások valóban érintenek. Például, ha egy INSERT TRIGGER egy INSERT utasítás eredményeként fut, amely egy TOP záradékot használt. / p>

Az SQL Server lehetővé teszi a nézetek sorainak frissítését. Mivel felveheti a TOP záradékot a nézetdefinícióba, bizonyos sorok eltűnhetnek a nézetből, ha a sorok egy frissítés miatt már nem felelnek meg a TOP kifejezés követelményeinek .

Ha a MERGE utasításban meg van határozva, a TOP záradék az egész forrástábla és a teljes céltábla egyesülése után érvényes. És az összekapcsolt sorok, amelyek nem jogosultak beszúrásra, frissítésre vagy törlésre művelet eltávolításra kerül. A TOP záradék tovább csökkenti az összekapcsolt sorok számát a megadott értékre, és a beillesztési, frissítési vagy törlési műveletek rendezetlenül érvényesek a többi összekapcsolt sorra. Vagyis nincs sorrend, amelyben a sorok eloszlanak a WHEN záradékokban meghatározott műveletek között.Például, ha a TOP (10) megadása 10 sort érint, ezek közül a sorok közül hetet frissíthetünk és hármat beszúrhatunk. Vagy törölhető, öt frissíthető, négy beilleszthető stb. Mivel a MERGE utasítás teljes táblázatot végez mind a forrás-, mind a céltáblákon, ez befolyásolhatja az I / O teljesítményt, amikor a TOP záradékot használva nagy kötegek létrehozásával módosíthat egy nagy táblát több köteg létrehozásával. Ebben a forgatókönyvben fontos annak biztosítása, hogy az összes egymást követő köteg új sorokat célozzon meg.

Vigyázzon, amikor a TOP záradékot adja meg egy olyan lekérdezésben, amely UNION, UNION ALL, EXCEPT vagy INTERSECT elemet tartalmaz. operátor. Lehetséges olyan lekérdezést írni, amely váratlan eredményt ad, mert a TOP és az ORDER BY záradék logikai feldolgozásának sorrendje nem mindig intuitív, ha ezeket az operátorokat egy kiválasztott műveletben használják. Tegyük fel például, hogy a következő táblázat és adatok alapján a legolcsóbb piros és a legolcsóbb kék autót szeretné visszaküldeni. Vagyis a piros szedán és a kék kisteherautó.

Ezen eredmények elérése érdekében írhatja a következő lekérdezést.

A következő az eredménykészlet.

A váratlan eredmények visszatérnek, mert a TOP záradék logikusan fut az ORDER BY záradék előtt, amely rendezi az operátor (ebben az esetben az UNION ALL) eredményeit. Tehát az előző lekérdezés egy piros és egy kék autót ad vissza, majd az egyesülés eredményét az ár alapján rendeli meg. Az alábbi példa bemutatja a lekérdezés helyes írásmódját a kívánt eredmény elérése érdekében.

A TOP és az ORDER BY alszelekciós műveletekkel történő használatával biztosíthatja, hogy az ORDER BY záradék eredményei felkerüljenek a TOP-ra. záradék és nem az UNION művelet eredményének rendezése.

Itt található az eredménykészlet.

Korlátozások és korlátozások

Ha a TOP-ot INSERT, UPDATE, MERGE vagy DELETE használatával használja, akkor a hivatkozott sorok nem rendeződnek semmilyen sorrendben. És ezekben az utasításokban nem adhatja meg közvetlenül a ORDER BY záradékot. Ha a TOP-ot kell használnia a sorok beillesztéséhez, törléséhez vagy módosításához értelmes időrendben, akkor használja a TOP-ot egy subselect utasításban megadott ORDER BY záradékkal. Lásd a cikk alábbi példák szakaszát.

A TOP nem használható UPDATE és DELETE utasításokban a particionált nézeteknél.

A TOP nem kombinálható az OFFSET és a FETCH fájlokkal a ugyanaz a lekérdezési kifejezés (ugyanabban a lekérdezési körben). További információ: ORDER BY záradék (Transact-SQL).

Példák

Kategória Kiemelt szintaxis elemek
Alapszintaktika Felső • SZÁZALÉK
A döntetlen értékeket is beleértve FELTÉTELEKKEL
A DELETE, INSERT vagy UPDATE által érintett sorok korlátozása DELETE • INSERT • UPDATE

Alapszintaktika

Az ebben a szakaszban szereplő példák bemutatják az ORDER BY záradék alapvető funkcionalitását a minimálisan szükséges szintaxissal.

A. A TOP használata állandó értékkel

A következő példák konstans értékkel adják meg a lekérdezés eredményhalmazában visszaadott alkalmazottak számát. Az első példában az első 10 nem definiált sor kerül visszaadásra, mert egy ORDER BY záradékot nem használunk. A második példában egy ORDER BY záradékot használunk a 10 legutóbb felvett alkalmazott visszaadására.

B. A TOP használata egy változóval

A következő példa egy változóval határozza meg a lekérdezés eredményhalmazában visszaadott alkalmazottak számát.

C. Százalék megadása

A következő példa a SZÁZALÉK segítségével határozza meg a lekérdezés eredményhalmazában visszaadott alkalmazottak számát. 290 alkalmazottak az HumanResources.Employee táblázatban. Mivel a 290 öt százaléka tört érték, az értéket felfelé kerekítjük a következő egész számra.

Döntetlen értékek hozzáadása

A. A WITH TIES használatával olyan sorokat vehet fel, amelyek megegyeznek az utolsó sor értékeivel

A következő példa a felső 10 a legmagasabb fizetéssel rendelkező összes alkalmazott százaléka a a fizetésük szerint csökkenő sorrendben adja vissza őket. A WITH TIES megadásával biztosítható, hogy a legalacsonyabb visszatérített fizetéssel (utolsó sorban) egyenlő fizetéssel rendelkező munkavállalók is szerepeljenek az eredménykészletben, még akkor is, ha az meghaladja a 10 az alkalmazottak százaléka.

A DELETE, INSERT vagy UPDATE által érintett sorok korlátozása

A. A TOP használatával korlátozhatja a törölt sorok számát

Ha a TOP (n) záradékot a DELETE paranccsal használja, akkor a törlési művelet n sor sor meghatározatlan kiválasztása esetén történik. Vagyis a DELETE utasítás tetszőleges számú (n) sort választ, amelyek megfelelnek a WHERE záradékban meghatározott feltételeknek.A következő példa törli azokat a 20 sorokat a PurchaseOrderDetail táblából, amelyek esedékessége 2002. július 1-jénél korábbi.

Ha a TOP-t akarja használni a sorok értelmes időrendben történő törléséhez, használja a TOP with ORDER BY elemet egy subselect utasításban. A következő lekérdezés törli a PurchaseOrderDetail tábla 10 sorát, amelyeknek a legkorábbi esedékessége van. Annak biztosítása érdekében, hogy csak 10 sor kerüljön törlésre, a subselect utasításban megadott oszlop (PurchaseOrderID) a táblázat elsődleges kulcsa. Ha nem kulcsos oszlopot használ az subselect utasításban, akkor több mint 10 sort törölhet, ha a megadott oszlop duplikált értékeket tartalmaz.

B. A TOP használata a beillesztett sorok számának korlátozásához

Az alábbi példa létrehozza a EmployeeSales táblázatot, és beszúrja a nevet és az évről napra vonatkozó értékesítési adatokat az első ötre alkalmazottak az HumanResources.Employee táblázatból. Az INSERT utasítás kiválasztja a SELECT utasítás által visszaadott öt sort, amelyek megfelelnek a WHERE záradékban meghatározott feltételeknek. Az OUTPUT záradék megjeleníti a EmployeeSales táblába beillesztett sorokat. Figyelje meg, hogy a SELECT utasítás ORDER BY záradéka nem használható az első öt alkalmazott meghatározására.

Ha a TOP használatával szeretné sorokat beilleszteni értelmes időrendben, használja a TOP with ORDER BY elemet egy subselect utasítás. A következő példa bemutatja, hogyan kell ezt megtenni. Az OUTPUT záradék megjeleníti azokat a sorokat, amelyek be vannak illesztve a EmployeeSales táblázatba. Figyelje meg, hogy az első öt alkalmazott be van illesztve az eredmények alapján az ORDER BY záradék meghatározatlan sorok helyett.

C. A TOP használatával korlátozhatja a frissített sorok számát

A következő példa A TOP záradékot használja a táblázatok sorainak frissítésére. Amikor egy UP (n) záradékot használ az UPDATE alkalmazással, a frissítési művelet meghatározatlan számú soron fut. Ez azt jelenti, hogy az UPDATE utasítás tetszőleges számú (n) sort választ ki a WHERE záradékban meghatározott kritériumok. Az alábbi példa 10 ügyfelet rendel egy értékesítőtől a másikhoz.

Ha meg kell használja a TOP-ot a frissítések értelmes időrendben történő alkalmazásához, a TOP-ot az ORDER BY-vel együtt egy subselect utasításban kell használnia. A következő példa frissíti a 10 alkalmazott szabadságának legkorábbi felvételi dátumát.

Példák: Azure Synapse Analytics és Párhuzamos adattárház

A következő példa a lekérdezési feltételeknek megfelelő 31 legfelső sort adja vissza. Az ORDER BY záradék biztosítja, hogy a 31 visszaküldött sor az első 31 sor, az LastName oszlop ábécé sorrendje alapján.

A TOP használata kapcsolatok megadása nélkül.

Eredmény: 31 sor kerül visszaadásra.

A TOP használata, a WIES TIES megadása.

Eredmény: 33 sor kerül visszaadásra, mert három alkalmazott Brown nevű döntetlen volt a 31. sorban.

Lásd még

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük