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 UPDATE
uttalelser.
- Sammendrag
- Parametere
- ordrebevaring
- Bestilling av rader UTEN ORDRE MED
- Sortering ved hjelp av enkle kolonnevalg
- Sortering ved hjelp av flere kolonner
- Invertere sorteringsrekkefølgen
- Sortering i primærnøkkelrekkefølge
- Sortering i indeksrekkefølge
- Bestillingsrader I DML-setninger
- Sortere utdataene for sletter
- Se også
Sammendrag
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:
- navnet på en kolonneetikett konfigurert med
AS
tidligere iSELECT
– setningen. Dette bruker verdien beregnet avSELECT
– setningsdelen som sorteringsnøkkel. - et positivt heltall som angir en av kolonnene i datakilden, enten
FROM
– klausulen iSELECT
– klausulen der det skjer, eller tabellen som skrives til avDELETE
ellerUPDATE
. Dette bruker den tilsvarende inndataverdien fra datakilden til å bruke som sorteringsnøkkel. - et vilkårlig skalaruttrykk. Dette bruker resultatet av å evaluere uttrykket som sorteringsnøkkel.
- navnet på en kolonneetikett konfigurert med
- 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.
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:
> 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:
- rekkefølgen av operand av en
WITH ORDINALITY
klausul (innenforFROM
operand av enSELECT
klausul) er bevart, for å kontrollere nummereringen av radene. - rekkefølgen av operand av en frittstående
LIMIT
ellerOFFSET
klausul (withinaFROM
operand av enSELECT
klausul) er bevart, for å bestemmehvilke rader holdes i resultatet. - rekkefølgen av datakilden for en
INSERT
– setning eller enUPSERT
– setning som også brukerLIMIT
beholdes, for å bestemme hvilke rader som behandles, men ikke rekkefølgen. - bestillingen angitt for en
UPDATE
ellerDELETE
– setning som også brukerLIMIT
, brukes til å bestemme hvilke rader som behandles, men ikke deres ordre.(Dette er En CockroachDB forlengelse.) - bestilling av en underspørring som brukes i en skalaruttrykk bevares.
for eksempel ved å bruke WITH ORDINALITY
:
> 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
:
hvis du for eksempel bruker en underspørring i skalarkontekst:
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:
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);
følgende utsagn er ekvivalente:
+---------+| 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:
det er også mulig å sortere ved hjelp av et vilkårlig skalaruttrykk beregnet for hver rad, for eksempel:
> 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:
> 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:
> 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:
> 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:
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:
> 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:
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
:
> 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:
> 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