Bestilling Av Spørringsresultater

ORDER BY – setningen styrer rekkefølgen rader returneres orprocessed. Den kan brukes i alle valgquery, inkludertsom operand av INSERT eller UPSERT, så vel som med DELETE og UPDATEuttalelser.

Sammendrag

ORDERBYa_exprASCDESCNULLSFIRSTLAstprimarykeytable_nameindextable_name@index_nameASCDESC,

Parametere

ORDER BY -klausulen tar en kommaseparert liste over bestillingsspesifikasjoner.Hver bestillingsspesifikasjon består av et kolonnevalg som følges valgfritt med søkeordet ASC eller DESC.

hvert kolonnevalg kan ta ett av følgende skjemaer:

  • et enkelt kolonnevalg, bestemt som følger:
    1. navnet på en kolonneetikett konfigurert med AS tidligere i SELECT – setningen. Dette bruker verdien beregnet av SELECT – setningsdelen som sorteringsnøkkel.
    2. et positivt heltall som angir en av kolonnene i datakilden, enten FROM – klausulen i SELECT – klausulen der det skjer, eller tabellen som skrives til av DELETE eller UPDATE. Dette bruker den tilsvarende inndataverdien fra datakilden til å bruke som sorteringsnøkkel.
    3. et vilkårlig skalaruttrykk. Dette bruker resultatet av å evaluere uttrykket som sorteringsnøkkel.
  • notasjonen PRIMARY KEY <table_name>. Dette bruker primærnøkkelkolonnen (e) i den oppgitte tabellen som sorteringsnøkkel. Denne tabellen må være en del av datakilden.
  • notasjonen INDEX <table_name>@<index_name>. Dette bruker kolonnene indeksert av den gitte indeksen som sorteringsnøkkel. Denne tabellen må være en del av datakilden.

det valgfrie søkeordet ASC etter et kolonnevalg indikerer å brukesorteringsnøkkelen som den er, og er dermed meningsløs.

det valgfrie nøkkelordet DESC inverterer retningen til kolonnen(e)som er valgt av valget som umiddelbart går foran.

CockroachDB støtter NULLS FIRST/NULLS LAST i ORDER BY klausuler for kompatibilitet Med PostgreSQL rad-sortering syntaks.

Notat:

Støtte for NULLS LAST er for øyeblikket kun syntaks. Hvis du angir NULLS LAST i en ORDER BY – klausul, Bruker CockroachDB NULLS FIRST og returnerer ikke en feil.

ordrebevaring

generelt er rekkefølgen på mellomresultatene av en spørring ikke garantert, selv om ORDER BY er spesifisert. Med andre ord er ORDER BY – klausulen bareeffektiv på toppnivå-setningen. Den ignoreres for eksempel av queryplanner når den finnes i en underspørring i en FROM – setning som følger:

ikon / knapper / kopi
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective

men når du kombinerer spørringer sammen withsub-spørringer, vil noen kombinasjoner gjøre ORDER BY – klausulen i en sub-querysignificant:

  1. rekkefølgen av operand av en WITH ORDINALITY klausul (innenfor FROM operand av en SELECT klausul) er bevart, for å kontrollere nummereringen av radene.
  2. rekkefølgen av operand av en frittstående LIMIT eller OFFSET klausul (withina FROM operand av en SELECT klausul) er bevart, for å bestemmehvilke rader holdes i resultatet.
  3. rekkefølgen av datakilden for en INSERT – setning eller en UPSERT – setning som også brukerLIMIT beholdes, for å bestemme hvilke rader som behandles, men ikke rekkefølgen.
  4. bestillingen angitt for en UPDATE eller DELETE – setning som også bruker LIMIT, brukes til å bestemme hvilke rader som behandles, men ikke deres ordre.(Dette er En CockroachDB forlengelse.)
  5. bestilling av en underspørring som brukes i en skalaruttrykk bevares.

for eksempel ved å bruke WITH ORDINALITY:

ikon / knapper / kopi
> SELECT * FROM (SELECT * FROM a ORDER BY a.x) WITH ORDINALITY; -- ensures that the rows are numbered in the order of column a.x.

hvis du for eksempel bruker en frittstående LIMIT – setning i FROM:

ikon / knapper / kopier

hvis du for eksempel bruker en underspørring i skalarkontekst:

ikon/knapper/kopier

Bestilling av rader UTEN ORDRE MED

Uten ORDER BY, behandles eller returneres rader i anon-deterministisk rekkefølge. «Ikke-deterministisk» betyr at den faktiske bestillingenkan avhenge av den logiske planen, rekkefølgen på data på disken, topologien av Kakerlakkdb-klyngen, og er generelt variabel over tid.

Sortering ved hjelp av enkle kolonnevalg

Vurderer følgende tabell:

ikon/knapper/kopier
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);

følgende utsagn er ekvivalente:

ikon / knapper / kopier
+---------+| a |+---------+| 1 || 2 || 3 |+---------+(3 rows)

Merk at rekkefølgen av reglene saken. Hvis det er tvetydighet, er AS aliasetta prioritet over datakildekolonnene, for eksempel:

ikon / knapper / kopier

det er også mulig å sortere ved hjelp av et vilkårlig skalaruttrykk beregnet for hver rad, for eksempel:

ikon / knapper / kopi
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.

Sortering ved hjelp av flere kolonner

når mer enn en bestillingsspesifikasjon er gitt, brukes de senere spesifikasjonene til å bestille rader som er like over de tidligere spesifikasjonene, for eksempel:

ikon / knapper / kopier
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;

dette sorterer resultatene etter kolonne b, og hvis det er multiplerows som har samme verdi i kolonne b, vil det da bestille theserows etter kolonne a.

Invertere sorteringsrekkefølgen

søkeordet DESC («synkende») kan legges til etter at en bestillingsspesifikasjon har endret rekkefølgen. Dette kan spesifiseres separat for hver spesifikasjon, for eksempel:

ikon / knapper/kopi
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b DESC, a; -- sorts on b descending, then a ascending.

Sortering i primærnøkkelrekkefølge

ORDER BY PRIMARY KEY – notasjonen garanterer at resultatene er presentert i primærnøkkelrekkefølge.

den spesielle fordelen er at for spørringer som bruker primærindeksen, garanterer dette ordren samtidig som det ikke garanteres at det ikke vil være ytterligere sorteringsberegning for å oppnå det, for eksempel:

ikon / knapper/kopi
> CREATE TABLE kv(k INT PRIMARY KEY, v INT);> SELECT k, v FROM kv ORDER BY PRIMARY KEY kv; -- guarantees ordering by column k.

hvis en primærnøkkel bruker nøkkelordet DESC allerede, vil dens betydning bli vendt (kansellert) hvis ORDER BY – klausulen også bruker DESC, for eksempel:

ikon/knapper/kopier

Sortering i indeksrekkefølge

ORDER BY INDEX – notasjonen garanterer at resultatene presenteres i rekkefølge av en gitt indeks.

den spesielle fordelen er at for spørringer som bruker denne indeksen, dettegaranterer ordren samtidig som det ikke garanteres at det ikke vil være anadditional sorteringsberegning for å oppnå det, for eksempel:

ikon / knapper / kopi
> CREATE TABLE kv(k INT PRIMARY KEY, v INT, INDEX v_idx(v));> SELECT k, v FROM kv ORDER BY INDEX kv@v_idx; -- guarantees ordering by column v.

hvis en indeks bruker søkeordet DESC allerede, vil dens betydning bli vendt (kansellert) hvis ORDER BY – klausulen også bruker DESC, for eksempel:

ikon / knapper / kopier

Bestillingsrader I DML-setninger

når du bruker ORDER BY med en INSERT,UPSERT, UPDATE ellerDELETE(dvs., EN dml-setning), er ORDER BY – klausulen signert hvis den ikke brukes i kombinasjon med LIMIT og / ellerOFFSET.

kombinasjonen av både ORDER BY og LIMIT / OFFSET bestemmer hvilke rader av inngangen som brukes til å sette inn, oppdatere eller slette tabelldata, men det bestemmer ikke i hvilken rekkefølge mutasjonen tarsted.

for eksempel bruker du LIMIT i INSERT:

ikon / knapper / kopi
> INSERT INTO a SELECT * FROM b ORDER BY b.x LIMIT 1; -- ensures that only the first row of b in the order of column b.x -- is inserted into a.

grunnen til at ORDER BY ikke kontrollerer den endelige rekkefølgen av radene i tabellen er at rekkefølgen av rader i måltabellen er bestemt av primære og sekundære indekser.

hvis du vil bestille resultatet av RETURNING – klausulen, Kan Du Se Sortere outputof sletter.

Sortere utdataene for sletter

hvis du vil sortere utdataene for en DELETE – setning, bruker du:

ikon / knapper / kopier
> WITH a AS (DELETE ... RETURNING ...) SELECT ... FROM a ORDER BY ...

Se For Eksempel Sortere og returnere slettede rader.

Se også

  • Utvalgsspørringer
  • Skalære Uttrykk
  • INSERT
  • UPSERT
  • DELETE
  • UPDATE

Var denne siden nyttig?

Ja Nei

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.