TOP (Transact-SQL) (Suomi)

  • 16.03.2017
  • 11 minuuttia aikaa lukea
    • V
    • M
    • r
    • c
    • d
    • +12

Koskee: SQL Server (kaikki tuetut versiot) Azure SQL -tietokanta Azure SQL -hallittu ilmentymä Azure Synapse Analytics Rinnakkaistietovarasto

Rajoittaa kyselytulosjoukossa palautettujen rivien määrän määritettyyn rivien määrään tai riviprosenttiin SQL Serverissä. Kun käytät TOP-painiketta ORDER BY -lausekkeen kanssa, tulosjoukko rajoitetaan ensimmäiseen N järjestettyjen rivien lukumäärään. Muussa tapauksessa TOP palauttaa ensimmäisen N rivien määrän määrittelemättömässä järjestyksessä. Tämän lausekkeen avulla voit määrittää SELECT-käskystä palautettujen rivien määrän. Tai käytä TOP-painiketta määritäksesi rivit, joihin INSERT-, UPDATE-, MERGE- tai DELETE-käsky vaikuttaa.

Transact-SQL-syntaksin yleissopimukset

Syntaksi

Seuraava on SQL Serverin ja Azure SQL-tietokannan syntaksi:

Seuraava on syntaksi Azure Synapse Analyticsille ja Parallelille Tietovarasto:

Huomautus

Jos haluat tarkastella Transact-SQL-syntaksia SQL Server 2014: lle ja sitä vanhemmille, katso edellisten versioiden ohjeet .

Argumentit

lauseke
Numeerinen lauseke, joka määrittää palautettavien rivien määrän. lauseke muunnetaan implisiittisesti float-arvoksi, jos määrität PERCENT. Muussa tapauksessa lauseke muunnetaan bigintiksi.

PERCENT
Ilmaisee, että kysely palauttaa vain ensimmäisen lausekkeen prosenttiosuuden riveistä tulosjoukosta. Murtolukuarvot pyöristetään ylöspäin seuraavaan kokonaislukuarvoon.

WITH TIES
Palauttaa kaksi tai useampia rivejä, jotka sijoittuvat rajoitetun tulosjoukon viimeiselle sijalle. Sinun on käytettävä tätä argumenttia ORDER BY -lausekkeen kanssa. WITH TIES voi aiheuttaa enemmän rivejä kuin lausekkeessa määritetty arvo. Esimerkiksi, jos lausekkeeksi on asetettu 5, mutta kaksi ylimääräistä riviä vastaavat rivin 5 ORDER BY -sarakkeiden arvoja, tulosjoukko sisältää seitsemän riviä.

Voit määrittää TOP-lauseen WITH TIES -sarakkeella argumentti vain SELECT-käskyissä ja vain, jos olet määrittänyt myös ORDER BY -lausekkeen. Palautettu tietueiden sitomisjärjestys on mielivaltainen. ORDER BY ei vaikuta tähän sääntöön.

Parhaat käytännöt

Käytä SELECT-käskyssä aina ORDER BY -lausetta TOP-lauseen kanssa. Koska se on ainoa tapa ilmoittaa ennustettavasti, mihin riveihin TOP vaikuttaa.

Käytä OFFSET- ja FETCH-lauseita ORDER BY -lausekkeessa TOP-lausekkeen sijasta kyselyhakuratkaisun toteuttamiseksi. eli palojen tai ”sivujen” lähettäminen asiakkaalle) on helpompi toteuttaa käyttämällä OFFSET- ja FETCH-lausekkeita. Lisätietoja on artikkelissa ORDER BY -lauseke (Transact-SQL).

Käytä TOP (tai OFFSET ja FETCH) SET ROWCOUNT -toiminnon sijaan palautettavien rivien määrän rajoittamiseksi. Nämä menetelmät ovat parempia kuin SET ROWCOUNT -asetuksen käyttäminen seuraavista syistä:

  • SELECT-käskyn osana kyselyn optimoija voi harkita lausekkeen arvoa TOP- tai FETCH-lausekkeissa kyselyn optimoinnin aikana. Koska käytät SET ROWCOUNT -linkkiä kyselyä suorittavan käskyn ulkopuolella, sen arvoa ei voida ottaa huomioon kyselysuunnitelmassa.

Yhteensopivuustuki

Taaksepäin yhteensopivuuden vuoksi sulkeet ovat valinnaisia SELECT-käskyissä, jos lauseke on kokonaisluku const muurahainen. Suosittelemme, että valitset TOP-lauseissa aina sulkeet. Se antaa johdonmukaisuuden vaaditun käytön kanssa INSERT-, UPDATE-, MERGE- ja DELETE-käskyissä.

Yhteentoimivuus

TOP-lauseke ei vaikuta lauseisiin, jotka saattavat toimia liipaisun takia. Liipaisimien lisätyt ja poistetut taulukot palauttavat vain ne rivit, joihin INSERT-, UPDATE-, MERGE- tai DELETE-lauseet todella vaikuttavat. Esimerkiksi, jos INSERT TRIGGER käynnistyy INSERT-käskyn tuloksena, joka käytti TOP-lausetta.

SQL Server sallii rivien päivittämisen näkymissä. Koska voit sisällyttää TOP-lausekkeen näkymämääritykseen, tietyt rivit saattavat kadota näkymästä, jos rivit eivät enää täytä TOP-lausekkeen vaatimuksia päivityksen vuoksi .

Kun MERGE-käskyssä määritetään, TOP-lauseketta sovelletaan sen jälkeen, kun koko lähdetaulukko ja koko kohdetaulukko on yhdistetty. Ja yhdistetyt rivit, jotka eivät täytä lisäystä, päivitystä tai poistoa toiminto poistetaan. TOP-lause vähentää edelleen yhdistettyjen rivien määrää määritettyyn arvoon, ja lisäys-, päivitys- tai poistotoiminnot koskevat jäljellä olevia liitettyjä rivejä järjestämättömällä tavalla. Eli ei ole järjestystä, jossa rivit jaetaan WHEN-lausekkeissa määriteltyjen toimintojen kesken.Esimerkiksi jos TOP (10) -määrittely vaikuttaa 10 riviin, näistä riveistä seitsemän voidaan päivittää ja kolme lisätä. Tai yksi voidaan poistaa, viisi päivittää ja neljä lisätä jne. Koska MERGE-käsky skannaa sekä lähde- että kohdetaulukot kokonaan, I / O-suorituskykyyn voi vaikuttaa, kun käytät TOP-lauseketta suuren taulukon muokkaamiseen luomalla useita eriä. Tässä skenaariossa on tärkeää varmistaa, että kaikki peräkkäiset erät kohdistuvat uusiin riveihin.

Ole varovainen, kun määrität TOP-lauseen kyselyssä, joka sisältää UNION, UNION ALL, POISTA tai INTERSECT operaattori. On mahdollista kirjoittaa kysely, joka palauttaa odottamattomat tulokset, koska järjestys, jossa TOP- ja ORDER BY -lausekkeet käsitellään loogisesti, ei ole aina intuitiivinen, kun näitä operaattoreita käytetään valitussa toiminnossa. Oletetaan esimerkiksi seuraavan taulukon ja tietojen perusteella, että haluat palauttaa halvimman punaisen auton ja halvimman sinisen auton. Toisin sanoen punainen sedan ja sininen pakettiauto.

Näiden tulosten saavuttamiseksi voit kirjoittaa seuraavan kyselyn.

Seuraava on tulosjoukko.

Odottamattomat tulokset palautetaan, koska TOP-lause käy loogisesti ORDER BY -lausekkeen edessä, joka lajittelee käyttäjän (tässä tapauksessa UNION ALL) tulokset. Joten edellinen kysely palauttaa minkä tahansa punaisen auton ja minkä tahansa sinisen auton ja sitten järjestää kyseisen liittymän tuloksen hinnalla. Seuraava esimerkki osoittaa oikean tavan kirjoittaa tämä kysely halutun tuloksen saavuttamiseksi.

Käyttämällä TOP- ja ORDER BY -alivalintatoiminnoissa varmistat, että ORDER BY -lausekkeen tulokset lisätään TOPiin lauseke eikä UNION-operaation tuloksen lajittelua.

Tässä on tulosjoukko.

Rajoitukset ja rajoitukset

Kun käytät TOP-asetusta INSERT-, UPDATE-, MERGE- tai DELETE-toiminnon kanssa, viittauksia sisältäviä rivejä ei järjestetä missään järjestyksessä. Ja et voi määritellä ORDER BY -lauseketta näissä lauseissa. Jos sinun on käytettävä TOP-painiketta rivien lisäämiseen, poistamiseen tai muokkaamiseen merkityksellisessä aikajärjestyksessä, käytä TOP-kohtaa ORDER BY -lausekkeella, joka on määritetty alavalintalausekkeessa. Katso tämän artikkelin seuraava esimerkkiosa.

TOP-tiedostoa ei voi käyttää UPDATE- ja DELETE-käskyissä osioiduissa näkymissä.

Et voi yhdistää TOPia OFFSET- ja FETCH-tiedostoihin sama kyselylauseke (samassa kyselyalueessa). Lisätietoja on kohdassa ORDER BY -lauseke (Transact-SQL).

Esimerkkejä

Luokka Esitetyt syntaksielementit
Perussyntaksi YLIMMÄINEN • PROSENTTI
Sisältää tasapainoarvot SIDOSIDEN kanssa
Poista rivejä, joihin DELETE, INSERT tai UPDATE vaikuttaa DELETE • INSERT • UPDATE

Perussyntaksi

Tämän osan esimerkit osoittavat ORDER BY -lausekkeen perustoiminnot käyttämällä vähimmäis vaadittavaa syntaksia.

A. TOP-arvon käyttäminen vakioarvolla

Seuraavissa esimerkeissä vakioarvolla määritetään kyselyn tulosjoukossa palautettujen työntekijöiden määrä. Ensimmäisessä esimerkissä ensimmäiset 10 määrittelemätöntä riviä palautetaan, koska ORDER BY -lauseketta ei käytetä. Toisessa esimerkissä ORDER BY -lauseketta käytetään palauttamaan 10 viimeisintä palkattua työntekijää.

B. TOP-arvon käyttäminen muuttujan kanssa

Seuraava esimerkki käyttää muuttujaa määrittämään kyselyn tulosjoukossa palautettavien työntekijöiden määrän.

C. Prosentuaalisen osuuden määrittäminen

Seuraavassa esimerkissä PERCENT määritetään kyselyn tulosjoukkoon palautettavien työntekijöiden lukumäärä. työntekijää HumanResources.Employee -taulukossa. Koska viisi prosenttia 290: sta on murto-arvo, arvo pyöristetään ylöspäin seuraavaan kokonaislukuun.

Tasan arvojen sisällyttäminen

A. WITH TIES -sovelluksen käyttö rivien sisällyttämiseksi viimeisen rivin arvoihin

Seuraava esimerkki saa alkuun 10 prosenttia kaikista korkeimman palkan työntekijöistä a nd palauttaa ne laskevassa järjestyksessä palkansa mukaan. Määritämällä WITH TIES varmistetaan, että työntekijät, joiden palkat ovat pienintä palautettua palkkaa (viimeinen rivi), sisällytetään myös tulosjoukkoon, vaikka se ylittäisi 10 prosenttiosuus työntekijöistä.

RIVIEN, POISTEEN tai PÄIVITTÄMISEN vaikuttavien rivien rajoittaminen

A. Rajoittamalla poistettujen rivien määrää TOP-toiminnolla

Kun käytät TOP (n) -lausetta DELETE-toiminnolla, poistotoiminto tehdään määrittelemättömällä n rivien lukumäärällä. Toisin sanoen DELETE-käsky valitsee minkä tahansa määrän (n) rivejä, jotka täyttävät WHERE-lausekkeessa määritellyt ehdot.Seuraava esimerkki poistaa 20 -rivit PurchaseOrderDetail -taulukosta, joiden eräpäivät ovat aikaisempia kuin 1. heinäkuuta 2002.

Jos haluat käyttää TOP-näppäintä rivien poistamiseen merkityksellisessä aikajärjestyksessä, käytä alavalinta-lauseessa TOP-painiketta ORDER BY -toiminnon kanssa. Seuraava kysely poistaa PurchaseOrderDetail -taulukon 10 riviä, joilla on aikaisimmat eräpäivät. Varmistaaksesi, että vain 10 riviä poistetaan, subselect-käskyssä määritetty sarake (PurchaseOrderID) on taulukon ensisijainen avain. Ei-avainsarakkeen käyttäminen alavalintalausekkeessa voi johtaa yli 10 rivin poistamiseen, jos määritetty sarake sisältää päällekkäisiä arvoja.

B. Rajoita lisättyjen rivien määrää TOP-toiminnon avulla

Seuraava esimerkki luo taulukon EmployeeSales ja lisää viiden parhaan nimen ja vuotuiset myyntitiedot työntekijät taulukosta HumanResources.Employee. INSERT-käsky valitsee kaikki viisi riviä, jotka SELECT -lause palauttaa ja jotka täyttävät WHERE-lausekkeessa määritellyt ehdot. OUTPUT-lauseke näyttää rivit, jotka lisätään EmployeeSales -taulukkoon. Huomaa, että SELECT-käskyn ORDER BY -lauseketta ei käytetä viiden suurimman työntekijän määrittämiseen.

Jos haluat lisätä TOP-riviä riveihin merkityksellisessä aikajärjestyksessä, käytä TOP-painiketta ORDER BY -toiminnon kanssa subselect-lause. Seuraava esimerkki osoittaa, kuinka tämä tehdään. OUTPUT-lauseke näyttää rivit, jotka lisätään EmployeeSales -taulukkoon. Huomaa, että viisi parasta työntekijää on nyt lisätty tulosten perusteella ORDER BY -lausekkeen määrittelemättömien rivien sijaan.

C. Rajoita päivitettyjen rivien määrää TOP-toiminnolla

Seuraava esimerkki käyttää TOP-lauseketta taulukon rivien päivittämiseen. Kun käytät TOP (n) -lauseketta UPDATE-päivityksen kanssa, päivitystoiminto toimii määrittelemättömällä määrällä rivejä. UPDATE-käsky valitsee minkä tahansa määrän (n) riviä, jotka täyttävät WHERE-lausekkeessa määritellyt ehdot. Seuraava esimerkki osoittaa 10 asiakasta myyjältä toiselle.

Jos joudut käytä TOP-sovellusta päivitysten käyttämiseen merkityksellisessä kronologiassa, sinun on käytettävä TOPia yhdessä ORDER BY: n kanssa alavalintalausekkeessa. Seuraava esimerkki päivittää 10 työntekijän lomapäivät aikaisimmilla palkkaamispäivillä.

Esimerkkejä: Azure Synapse Analytics ja Parallel Data Warehouse

Seuraava esimerkki palauttaa 31 ylintä riviä, jotka vastaavat kyselykriteerejä. ORDER BY -lauseke varmistaa, että 31 palautettua riviä ovat ensimmäiset 31 riviä LastName -sarakkeen aakkosjärjestyksen perusteella.

TOP-arvon käyttäminen määrittelemättä linkkejä.

Tulos: Palautetaan 31 riviä.

Käyttämällä TOP-vaihtoehtoa, määritetään SITOJEN KANSSA.

Tulos: Palautetaan 33 riviä, koska kolme työntekijää nimesi Brownin 31. riville.

Katso myös

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *