comandarea rezultatelor interogării

clauza ORDER BY controlează ordinea în care rândurile sunt returnate sau procesate. Acesta poate fi utilizat în orice selectionquery, inclusivca operand de INSERT sau UPSERT, precum și cu DELETE și UPDATEdeclarații.

Sinopsis

ORDERBYa_exprASCDESCNULLSFIRSTLAstprimarykeytable_nameindextable_name@index_nameASCDESC,

parametri

clauza ORDER BY ia o listă separată prin virgulă a specificațiilor de comandă.Fiecare specificație de comandă este compusă dintr-o selecție de coloane urmată opțional de cuvântul cheie ASC sau DESC.

fiecare selecție coloană poate lua una dintre următoarele forme:

  • o selecție coloană simplă, determinată după cum urmează:
    1. numele unei etichete coloană configurat cu AS mai devreme în SELECT clauza. Aceasta utilizează valoarea calculată de clauza SELECT ca cheie de sortare.
    2. un număr întreg pozitiv, desemnând una dintre coloanele din sursa de date, fie clauza FROM a clauzei SELECT unde se întâmplă, fie tabelul fiind scris de DELETEsau UPDATE. Aceasta utilizează valoarea de intrare corespunzătoare din sursa de date pentru a fi utilizată ca cheie de sortare.
    3. o expresie scalară arbitrară. Aceasta folosește rezultatul evaluării acelei expresii ca cheie de sortare.
  • notația PRIMARY KEY <table_name>. Aceasta utilizează coloana cheie primară a tabelului dat ca cheie de sortare. Acest tabel trebuie să facă parte din sursa de date.
  • notația INDEX <table_name>@<index_name>. Aceasta utilizează coloanele indexate de indexul dat ca cheie de sortare. Acest tabel trebuie să facă parte din sursa de date.

cuvântul cheie opțional ASC după selectarea unei coloane indică utilizarea cheii de sortare așa cum este și, prin urmare, nu are sens.

cuvântul cheie opțional DESC inversează direcția coloanei(coloanelor)selectate de selecția care precede imediat.

CockroachDB acceptă NULLS FIRST/NULLS LAST în ORDER BY clauze de compatibilitate cu sintaxa de sortare a rândurilor PostgreSQL.

notă:

suport pentru NULLS LAST este în prezent numai sintaxa. Dacă specificați NULLS LAST într-o clauză ORDER BY, CockroachDB utilizează NULLS FIRST și nu returnează o eroare.

conservarea ordinii

în general, ordinea rezultatelor intermediare ale unei interogări nu este garantată,chiar dacă este specificat ORDER BY. Cu alte cuvinte, clauza ORDER BY este numaieficace la declarația de nivel superior. De exemplu, este ignorat de queryplanner atunci când este prezent într-o sub-interogare într-o clauză FROM după cum urmează:

icon / Butoane / copie
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective

cu toate acestea, atunci când combinați interogări împreună cusub-interogări, unele combinații vor face clauza ORDER BY într-un sub-interogaresemnificativ:

  1. ordonarea operandului unei clauze WITH ORDINALITY(în cadrul operandului FROM al unei clauze SELECT) este păstrată,pentru a controla numerotarea rândurilor.
  2. ordonarea operandului unei clauze de sine stătătoare LIMIT sau OFFSET (în cadrul operandului FROM al unei clauze SELECT) este păstrată, pentru a determinacare rânduri sunt păstrate în rezultat.
  3. ordonarea sursei de date pentru o declarație INSERTsau o declarațieUPSERT care utilizează și LIMIT este păstrată, pentru a determina ce rânduri sunt procesate, dar nu ordinea lor.
  4. ordonarea indicată pentru o declarație UPDATE sau DELETEcare utilizează și LIMIT este utilizată pentru a determinacare rânduri sunt procesate, dar nu ordinea lor.(Aceasta este o extensie CockroachDB.)
  5. ordonarea unei sub-interogări utilizate într-o expresie scalarăse păstrează.

de exemplu, folosind WITH ORDINALITY :

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

de exemplu, folosind o clauză autonomă LIMIT în FROM:

icon / buttons /copy

de exemplu, folosind o sub-interogare în context scalar:

icon/buttons/copy

ordonarea rândurilor fără ordine de

fără ORDER BY, rândurile sunt procesate sau returnate în ordine anon-deterministă. „Nedeterminist” înseamnă că ordinea realăpoate depinde de planul logic, ordinea datelor de pe disc, topologiade Cluster CockroachDB, și este, în general, variabilă în timp.

Sortare folosind selecții simple de coloane

luând în considerare următorul tabel:

pictogramă / butoane/copiere
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);

următoarele afirmații sunt echivalente:

icon / buttons/copy
+---------+| a |+---------+| 1 || 2 || 3 |+---------+(3 rows)

rețineți că ordinea regulilor contează. Dacă există ambiguitate, aliasurile AS au prioritate față de coloanele sursei de date, de exemplu:

icon / buttons/copy

de asemenea, este posibil să sortați folosind o expresie scalară arbitrară calculată pentru fiecare rând, de exemplu:

icon / Butoane / copie
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.

Sortare folosind mai multe coloane

când sunt date mai multe specificații de comandă, sunt utilizate specificațiile ulterioarepentru a ordona rânduri care sunt egale față de specificațiile anterioare, de exemplu:

icon / buttons/copy
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;

aceasta sortează rezultatele după coloana b și apoi dacă există multiplerows care au aceeași valoare în coloana b, atunci va ordona theserows după coloana a.

inversarea ordinii de sortare

cuvântul cheie DESC („descendent”) poate fi adăugat după o specificație de comandă pentru a inversa ordinea sa. Acest lucru poate fi specificat separat pentru fiecare specificație, de exemplu:

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

sortarea în ordinea cheii primare

notația ORDER BY PRIMARY KEY garantează că rezultatele sunt prezentate în ordinea cheii primare.

avantajul particular este că pentru interogările care utilizează indexul primar, acest lucru garantează ordinea, garantând, de asemenea, că nu va exista un calcul suplimentar de sortare pentru ao realiza, de exemplu:

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

dacă o cheie primară folosește deja cuvântul cheie DESC, atunci sensul său va fi răsturnat (anulat) dacă clauza ORDER BY folosește șiDESC, de exemplu:

icon/buttons/copy

sortare în ordinea indexului

notația ORDER BY INDEX garantează că rezultatele sunt prezentateîn ordinea unui index dat.

avantajul particular este că pentru interogările care utilizează acel index, acestgarantează ordinea, garantând în același timp că nu va exista un calcul suplimentar de sortare pentru ao realiza, de exemplu:

icon / buttons/copy
> 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.

dacă un index folosește deja cuvântul cheie DESC, atunci sensul său va fi inversat (anulat) dacă clauza ORDER BY folosește șiDESC, de exemplu:

icon/buttons/copy

ordonarea rândurilor în instrucțiunile DML

atunci când se utilizează ORDER BY cu o INSERT,UPSERT, UPDATE sau DELETE (i. e., o declarație LMD), clauza ORDER BY este semnalizată dacă nu este utilizată în combinație cuLIMITși/sau OFFSET.

combinația ambelor ORDER BYșiLIMIT/ OFFSET determinăcare rânduri de intrare sunt utilizate pentru a insera, actualiza sau șterge tabeluldate, dar nu determină în ce ordine ia mutația.

de exemplu, folosind LIMITîn INSERT :

icon / Butoane / copie
> 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.

motivul pentru care ORDER BY nu controlează ordinea finală a rândurilor din tabel este că ordonarea rândurilor din tabelul țintă este determinată de indicii săi primari și secundari.

pentru a ordona rezultatul clauzei RETURNING, consultați sortarea ieșiriide ștergeri.

sortarea ieșirii ștergerilor

pentru a sorta ieșirea unei instrucțiuni DELETE, utilizați:

icon / buttons/copy
> WITH a AS (DELETE ... RETURNING ...) SELECT ... FROM a ORDER BY ...

pentru un exemplu, consultați sortarea și returnarea rândurilor șterse.

a se vedea, de asemenea,

  • interogări de selecție
  • expresii scalare
  • INSERT
  • UPSERT
  • DELETE
  • UPDATE

a fost utilă această pagină?

Da Nu

Lasă un răspuns

Adresa ta de email nu va fi publicată.