kyselyn tulosten tilaaminen

ORDER BY lauseke määrää, missä järjestyksessä rivit palautetaan tai käsitellään. Sitä voidaan käyttää missä tahansa valitsijakokoelmassa, mukaan lukien INSERT tai UPSERT sekä DELETE ja UPDATElausekkeissa.

Synopsis

ORDERBYa_exprASCDESCNULLSFIRSTLAstprimarykeytable_nameindextable_name@index_nameASCDESC,

parametrit

ORDER BY lauseke ottaa pilkulla erotellun luettelon tilauserittelyistä.Jokainen tilauseritelmä koostuu sarakevalinnasta, jota seuraa vaihtoehtoisesti hakusana ASC tai DESC.

jokainen sarakkeen valinta voi olla jokin seuraavista muodoista:

  • yksinkertainen sarakevalinta, joka määritetään seuraavasti:
    1. sellaisen sarakeotsikon nimi, joka on määritetty AS aikaisemmin SELECT kohdassa. Tällöin lajitteluavaimena käytetään SELECT lausekkeen laskemaa arvoa.
    2. positiivinen kokonaisluku, joka ilmaisee jonkin tietolähteen sarakkeista, joko FROM lausekkeen SELECT, jossa se tapahtuu, tai taulukon kirjoittaa DELETE tai UPDATE. Tämä käyttää lajitteluavaimena tietolähteen vastaavaa syöttöarvoa.
    3. mielivaltainen skalaarilauseke. Tässä käytetään kyseisen ilmaisun arvioinnin tulosta lajitteluavaimena.
  • notaatio PRIMARY KEY <table_name>. Tässä käytetään lajitteluavaimena annetun taulukon ensisijaisia avainsarakkeita. Tämän taulukon on oltava osa tietolähdettä.
  • notaatio INDEX <table_name>@<index_name>. Tämä käyttää annetun indeksin indeksoimia sarakkeita lajitteluavaimina. Tämän taulukon on oltava osa tietolähdettä.

valinnainen hakusana ASC sarakkeen valinnan jälkeen osoittaa lajitteluavaimen käyttämisen sellaisenaan ja on siten merkityksetön.

valinnainen hakusana DESC kääntää välittömästi edeltävän valinnan valitsemien sarakkeiden suunnan.

CockroachDB tukee NULLS FIRST/NULLS LAST ORDER BY pykälissä yhteensopivuutta PostgreSQL: n rivilajittelusyntaksin kanssa.

Huom.:

tuki NULLS LAST: lle on nykyisin vain syntaksia. Jos määrität NULLS LAST ORDER BY – lausekkeessa, torakka käyttää NULLS FIRST eikä palauta virhettä.

järjestyksen säilyminen

yleensä kyselyn välitulosten järjestystä ei voida taata,vaikka ORDER BY olisi määritelty. Toisin sanoen ORDER BY – lauseke on voimassa vain ylätason lauseessa. Esimerkiksi queryplanner jättää sen huomiotta, kun se esiintyy alikyselyssä FROM lausekkeessa seuraavasti:

kuvake / painikkeet / kopio
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective

kuitenkin yhdistettäessä kyselyt yhdessä subkyselyiden kanssa, jotkin yhdistelmät tekevät ORDER BY – lausekkeen alakyselyyn:

  1. WITH ORDINALITY lausekkeen operandin järjestys (FROM SELECT lausekkeen operandin sisällä) on säilynyt,jotta rivien numerointia voidaan hallita.
  2. itsenäisen LIMIT tai OFFSET lausekkeen operandin järjestys (withina FROM SELECT lausekkeen operandi) säilyy, jotta voidaan määrittää, mitkä rivit pidetään tuloksessa.
  3. INSERT – lausekkeen tai UPSERT – lausekkeen, jossa myösLIMIT käytetään, tietolähteen järjestys säilytetään, jotta voidaan määrittää, mitä rivejä käsitellään, mutta ei niiden järjestystä.
  4. UPDATE tai DELETElauseketta, jossa käytetään myös LIMIT, käytetään määritettäessä, mitkä rivit käsitellään, mutta ei niiden järjestystä.(Tämä on Torakkadb laajennus.)
  5. skalaariekspressiossa käytetyn alikyselyn järjestys on säilynyt.

esimerkiksi käyttämällä WITH ORDINALITY:

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

esimerkiksi käyttämällä itsenäistä LIMIT lauseketta FROM:

icon / buttons/copy

esimerkiksi käyttämällä alikyselyä skalaariyhteydessä:

icon/buttons / copy

Order of rivs without ORDER BY

Without ORDER BY, rivit käsitellään tai palautetaan anon-deterministisessä järjestyksessä. ”Ei-deterministinen” tarkoittaa, että todellinen järjestys voi riippua loogisesta suunnitelmasta, levyn tietojen järjestyksestä, Torakkadb-klusterin topologiasta ja on yleensä muuttuva ajan myötä.

Lajittelu yksinkertaisilla palstavalinnoilla

ottaen huomioon seuraavan taulukon:

kuvake / painikkeet / kopio
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);

seuraavat lauseet vastaavat:

kuvake / painikkeet / kopio
+---------+| a |+---------+| 1 || 2 || 3 |+---------+(3 rows)

huomaa, että sääntöjen järjestyksellä on väliä. Jos on epäselvyyttä, AS aliasestake prioriteetti tietolähdesarakkeisiin nähden, esimerkiksi:

kuvake / painikkeet / kopio

on myös mahdollista lajitella käyttäen mielivaltaista skalaarilauseketta, joka on laskettu jokaiselle riville, esimerkiksi:

kuvake / painikkeet / kopio
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.

Lajittelu käyttäen useita sarakkeita

kun on annettu useampi kuin yksi tilausmääritelmä, käytetään myöhempiä määrityksiä tilausriveille, jotka ovat yhtä suuret kuin aikaisemmat määritykset, esimerkiksi:

kuvake / painikkeet / kopio
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;

tämä lajittelee tulokset sarakkeittain b, ja jos sitten on olemassa kertoimia, joilla on sama arvo sarakkeessa b, se järjestää nämä tulokset sarakkeittain a.

kääntäen järjestysjärjestyksen

hakusana DESC (”laskeva”) voidaan lisätä järjestysmäärittelyn jälkeen sen järjestyksen muuttamiseksi. Tämä voidaan määritellä erikseen jokaiselle spesifikaatiolle, esimerkiksi:

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

Lajittelu ensisijaisen avaimen järjestykseen

ORDER BY PRIMARY KEY merkintä takaa, että tulokset esitetään ensisijaisen avaimen järjestyksessä.

erityinen etu on se,että ensisijaista indeksiä käyttävien kyselyiden osalta tämä takaa järjestyksen, mutta takaa myös sen, että ei ole ylimääräistä lajittelulaskentaa sen saavuttamiseksi, esimerkiksi:

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

jos ensisijainen avain käyttää jo hakusanaa DESC, sen merkitys käännetään (peruutetaan), jos ORDER BY lausekkeessa käytetään myösDESC, esimerkiksi:

kuvake/painikkeet/kopio

Lajittelu indeksijärjestyksessä

ORDER BY INDEX merkintä takaa, että tulokset esitetään tietyn indeksin järjestyksessä.

erityinen etu on se, että tätä indeksiä käyttävien kyselyiden osalta tämä takaa järjestyksen, mutta takaa myös, että sen saavuttamiseksi ei ole ylimääräistä lajittelulaskentaa, esimerkiksi:

kuvake / painikkeet / kopio
> 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.

jos indeksi käyttää jo avainsanaa DESC, sen merkitys käännetään (peruutetaan), jos ORDER BY lausekkeessa käytetään myösDESC, esimerkiksi:

kuvake / painikkeet / kopio

tilausrivit DML-lausekkeissa

käytettäessä ORDER BY INSERT,UPSERT, UPDATE taiDELETE (ts., DML-lauseke), ORDER BY lauseke merkitään, jos sitä ei käytetä yhdessä LIMIT: n ja/taiOFFSET: n kanssa.

sekä ORDER BYettä LIMIT/OFFSET yhdistelmä määrittää, mitä syötteen rivejä käytetään tabledatan lisäämiseen, päivittämiseen tai poistamiseen, mutta se ei määritä, missä järjestyksessä mutaatio tulee tilalle.

esimerkiksi käyttäen LIMIT in INSERT:

kuvake / painikkeet / kopio
> 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.

syy siihen, miksi ORDER BY ei hallitse taulukon rivien lopullista järjestystä, on se, että rivien järjestys kohdetaulukossa määräytyy sen ensisijaisen ja toissijaisen indeksin mukaan.

RETURNING lausekkeen tuloksen järjestämiseksi katso poistojen Lajittelu.

Lajittele poistojen ulostulo

Lajittele DELETE lausekkeen tuloste, käytä:

kuvake / painikkeet / kopio
> WITH a AS (DELETE ... RETURNING ...) SELECT ... FROM a ORDER BY ...

esimerkki: katso poistettujen rivien lajittelu ja palautus.

Katso myös

  • Valintakyselyt
  • Skalaarilausekkeet
  • INSERT
  • UPSERT
  • DELETE
  • UPDATE

oliko tästä sivusta apua?

Kyllä Ei

Vastaa

Sähköpostiosoitettasi ei julkaista.