A TOP és az OFFSET egyaránt használhatók korlátozza a visszaküldött sorok számát. Az OFFSET és a FETCH hasonló eredményeket hozhat a tetejére, de vannak olyan különbségek, amelyek befolyásolhatják, hogy az adott helyzetben melyik módszert alkalmazza a legjobban.
A lecke összes példája a Microsoft SQL Server Managementre épül. Studio és az AdventureWorks2012 adatbázis. Ezeknek az ingyenes eszközöknek a használatát az Első lépések az SQL Server használatával című útmutatóm használatával kezdheti el.
Mi a különbség a TOP és az OFFSET között & Fetch?
A következő szakaszokban a TOP és az OFFSET & FETCH témákat tárgyaljuk. Azt hiszem, miután elolvasta mindkét részt, meg fogja érteni a különbségeket. Ezeket a cikk végén található táblázat is összefoglalja.
Felső
A TOP a lekérdezés eredményéből adott számú sor visszatérésére szolgál.
A TOP záradék egy ideje rendelkezésre áll az SQL Server régebbi verzióiban, például az SQL 2005-ben. A TOP nem ANSI-kompatibilis, és használata férfiasan csak a Microsoft termékeire korlátozódik, mint például az SQL Server és az MS-Access.
A TOP záradék a SELECT utasítás oszloplistájában szerepel, és ORDER BY-vel vagy anélkül is használható.
Például a tíz legköltségesebb termék kiválasztásához használja
SELECT TOP 10 Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost
Bár nem szükséges a RENDELÉS, a legjobb gyakorlat, mivel nélküle nincs garancia arra, hogy mely sorok kerülnek visszaadásra.
Egyedülálló elem a TOP számára a sorok százalékának visszaadásának képessége. Az állítás
SELECT TOP 10 PERCENT Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost
az első 51 terméket adja vissza a legalacsonyabb StandardCost árral (azaz 504 sor x 10% = 50,4, kerekítve 51-ig).
Megadhatja a megadott számú rekordot is a lekérdezés eredményének alján. Ehhez egy trükköt használhat a rekordok csökkenő sorrendbe rendezéséhez:
SELECT TOP 10 Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost DESC
Ne feledje, ha az eredményeket csökkenő sorrendbe rendezi, akkor a először a legnagyobb összegeket adják vissza. Emiatt a TOP azokat a termékeket adja vissza, amelyek a legmagasabb standard költségekkel járnak.
A TOP nagyon hasznos lehet nagy eredmények esetén, mivel a sorok ezreinek visszaküldése befolyásolhatja a teljesítményt. Sok esetben a felhasználások csak az eredmények kezdeti részét böngészik.
A TOP megjelenítheti a kapcsolatok értékét – A WITH TIES segítségével további rekordokat is megjeleníthet, amelyek értéke megegyezik az alaperedmény utolsó sorával.
OFFSET és FETCH
Az OFFSET és FETCH segítségével rekordablakot adhatunk vissza egy eredményhalmazból. Az OFFSET határozza meg, hogy hány sort kell kihagyni az eredményen belül, a FETCH pedig megadja, hogy hány sort kell ettől a ponttól az eredményig visszatérni.
Az OFFSET és a FETCH nemrég került bevezetésre az SQL Server 2012-ben, és ANSI-kompatibilis. / p>
Használhatja az OFFSET-et FETCH nélkül, de a FETCH önmagában nem használható. Ettől függetlenül az OFFSET-et ORDER BY záradékkal kell használni. Az ok egyszerű, mivel az OFFSET és a FETCH az ORDER BY záradék része.
Ebben a példában az eredmény első tíz sora kihagyásra kerül, majd a következő 10 megjelenik az eredményben.
SELECT Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
A TOP-ból visszaadott sorokat lemásolhatja az OFFSET és a FETCH használatával, ha az eredmények rendezve vannak. A következő utasítás megegyezik a TOP 10 visszaküldésével:
SELECT Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
Ha az OFFSET értéke 0, egyetlen sor sem kerül átugrásra.
Ellentétben TOP, az OFFSET funkcióval nincsenek beépített eszközök a sorok százalékos visszaadásához. A százalékot kiszámítva azonban így görgetheti a sajátját:
SELECT Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost OFFSET 0 ROWS FETCH NEXT (SELECT CAST(CEILING(COUNT(*) * .1) as INT) FROM Production.Product) ROWS ONLY
A trükk az allekérdezésben található. Az eredmény sorainak számításával százalékot tudunk szerezni. Itt van az allekérdezés. Ha szeretné, futtathatja ezt az SQL Server Management Studio alkalmazásban.
SELECT CAST(CEILING(COUNT(*) * .1) as INT)FROM Production.Product
Több elem van megjegyzendő:
- A CEILING felfelé kerekíti a számokat. Példánkban a CEILING (50.4) 51.0-val tér vissza. Ez utánozza a TOP viselkedését.
- A FETCH egész számot igényel, így a konverzió végrehajtásához CAST-t kell használni. Így az 51.0, 51
Az eredmény 10 legalsó rekordjának visszaadásához két módszer létezik. Megfordíthatjuk a rendezési sorrendet, mint a TOP esetében:
SELECT Name, ProductNumber, StandardCostFROM Production.ProductORDER BY StandardCost DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
Vagy megőrizhetjük a rendezési sorrendet, és kiszámíthatjuk az eltolást úgy, hogy minden sor az utolsóig haladjon. tízet kihagyják. Ezt a technikát részletesebben megvizsgáljuk az SQL-leckében, amely az OFFSET-ről és a FETCH-ról szól.
A különbségek összefoglalása
Íme egy összefoglalás a TOP és az OFFSET közötti fő különbségekről & FETCH.
Általában, ha az a célod, hogy csak az első sorokat adja vissza, akkor a TOP szerintem egyszerű megoldás; ha lapozási megoldást keres, vagy ha a lekérdezés eredményeinek közepén vagy alján sorokat kell választania anélkül, hogy ez befolyásolná az eredeti rendezési sorrendet, akkor szerintem OFFSET & FETCH a legjobbak.