Lekérdezési eredmények rendelése

a ORDER BY záradék szabályozza a sorok visszaadásának vagy feldolgozásának sorrendjét. Bármely selectionquery-ben használható, beleértve a INSERT vagy UPSERT operandusait, valamint a DELETE és UPDATEutasításokat.

szinopszis

ORDERBYa_exprASCDESCNULLSFIRSTLAstprimarykeytable_nameindextable_name@index_nameASCDESC,

paraméterek

a ORDER BY záradék vesszővel elválasztott listát tartalmaz a rendelési specifikációkról.Minden rendelési specifikáció egy oszlopválasztásból áll, amelyet opcionálisana ASC vagy a DESCkulcsszó követ.

minden Oszlopválasztás a következő formák egyikét öltheti:

  • egy egyszerű Oszlopválasztás, amelyet a következőképpen határozunk meg:
    1. a AS korábbi SELECT záradékban beállított oszlopcímke neve. Ez a SELECT záradék által kiszámított értéket használja rendezési kulcsként.
    2. pozitív egész szám, amely az adatforrás egyik oszlopát jelöli, vagy a FROM záradék SELECT záradék, ahol ez megtörténik, vagy a táblát DELETEvagy UPDATE írja. Ez az adatforrás megfelelő bemeneti értékét használja rendezési kulcsként.
    3. tetszőleges skaláris kifejezés. Ez a kifejezés kiértékelésének eredményét használja rendezési kulcsként.
  • a jelölés PRIMARY KEY <table_name>. Ez az adott táblázat elsődleges kulcs oszlopait használja rendezési kulcsként. Ennek a táblázatnak az adatforrás részét kell képeznie.
  • a jelölés INDEX <table_name>@<index_name>. Ez az adott index által indexelt oszlopokat használja rendezési kulcsként. Ennek a táblázatnak az adatforrás részét kell képeznie.

az Oszlopválasztás után a ASC opcionális kulcsszó azt jelzi, hogy a rendezőkulcsot úgy kell használni, ahogy van, így értelmetlen.

az opcionális kulcsszó DESC megfordítja a közvetlenül megelőző kijelölés által kiválasztott oszlop(ok)irányát.

CockroachDB támogatja NULLS FIRST/NULLS LAST a ORDER BY záradékokat kompatibilitás PostgreSQL sorrendezés szintaxis.

Megjegyzés:

a NULLS LAST támogatása jelenleg csak szintaxis. Ha NULLS LAST – ot ad meg egy ORDER BY záradékban, akkor a CockroachDB NULLS FIRST – et használ, és nem ad vissza hibát.

rendelés megőrzése

általában a lekérdezés közbenső eredményeinek sorrendje nem garantált, még akkor sem,ha ORDER BY meg van adva. Más szavakkal, a ORDER BY záradék csakhatékony a legfelső szintű utasításban. Például a queryplanner figyelmen kívül hagyja, ha egy FROM záradékban található Al-lekérdezésben szerepel az alábbiak szerint:

ikon / gombok / másolás
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective

ha azonban a lekérdezéseket al-lekérdezésekkel kombináljuk, egyes kombinációk A ORDER BY záradékot jelentik egy al-lekérdezésben:

  1. a WITH ORDINALITY záradék operandusának sorrendje(a FROM SELECT záradék operandusán belül) megmarad a sorok számozásának szabályozására.
  2. az önálló LIMIT vagy OFFSET záradék operandusának sorrendje (a FROM SELECT záradék operandusa) megmarad, annak meghatározásához, hogy mely sorok maradnak az eredményben.
  3. egy INSERT utasítás vagy egy UPSERT utasítás adatforrásának sorrendje, amely szinténLIMIT – et használ, megmarad, hogy meghatározza, mely sorok kerülnek feldolgozásra, de nem a sorrendjüket.
  4. a UPDATEvagy DELETE utasításhoz jelzett sorrend, amely szintén LIMIT – et használ, annak meghatározására szolgál, hogy mely sorok kerülnek feldolgozásra, de nem a sorrendjük.(Ez egy CockroachDB kiterjesztés.)
  5. a skalár kifejezésben használt al-lekérdezés sorrendje megmarad.

például a WITH ORDINALITYhasználatával:

ikon / gombok / másolás
> SELECT * FROM (SELECT * FROM a ORDER BY a.x) WITH ORDINALITY; -- ensures that the rows are numbered in the order of column a.x.

például egy önálló LIMIT záradék használatával FROM:

icon / buttons/copy

például egy al-lekérdezés segítségével skaláris környezetben:

icon/buttons / copy

sorok sorrend nélküli rendezése

ORDER BY nélkül a sorok feldolgozása vagy visszaadása anon-determinisztikus sorrendben történik. A” nem determinisztikus ” azt jelenti, hogy a tényleges sorrend függhet a logikai tervtől, a lemezen lévő adatok sorrendjétől, a CockroachDB klaszter topológiájától, és általában idővel változó.

rendezés egyszerű oszlopválasztással

figyelembe véve a következő táblázatot:

ikon / gombok / másolás
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);

a következő állítások egyenértékűek:

ikon/gombok / másolás
+---------+| a |+---------+| 1 || 2 || 3 |+---------+(3 rows)

ne feledje, hogy a szabályok sorrendje számít. Kétértelműség esetén a AS aliasesprioritást élvez az adatforrás oszlopokkal szemben, például:

ikon/gombok / másolás

lehetőség van az egyes sorokhoz kiszámított tetszőleges skaláris kifejezés rendezésére is, például:

ikon / gombok / másolás
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.

rendezés több oszlop használatával

ha egynél több rendelési specifikáció van megadva, a későbbi specifikációkat a korábbi specifikációkkal megegyező sorok megrendelésére használják, például:

ikon/gombok / másolás
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;

ez rendezi az eredményeket oszlop b, majd ha vannak multiplerows, amelyek ugyanazt az értéket oszlopban b, akkor majd rendelni theserows oszlop a.

a rendezési sorrend megfordítása

a DESC kulcsszó (“descending”) hozzáadható egy rendelési specifikáció után a sorrend megváltoztatásához. Ez minden specifikációhoz külön megadható, például:

ikon/gombok / másolás
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b DESC, a; -- sorts on b descending, then a ascending.

Rendezés elsődleges kulcs sorrendben

a ORDER BY PRIMARY KEY jelölés garantálja, hogy az eredmények elsődleges kulcs sorrendben jelennek meg.

különös előnye, hogy az elsődleges indexet használó lekérdezések esetében ez garantálja a sorrendet, miközben garantálja, hogy nem lesz anaditional válogatási számítás annak eléréséhez, például:

ikon / gombok / másolás
> CREATE TABLE kv(k INT PRIMARY KEY, v INT);> SELECT k, v FROM kv ORDER BY PRIMARY KEY kv; -- guarantees ordering by column k.

ha egy elsődleges kulcs már a DESC kulcsszót használja, akkor annak jelentésefordul (törlődik), ha a ORDER BY záradék isDESC – et használ, például:

ikon/gombok/másolás

Rendezés index sorrendben

a ORDER BY INDEX jelölés garantálja, hogy az eredmények egy adott index sorrendjében jelennek meg.

a különös előnye az, hogy az indexet használó lekérdezések esetében ez garantálja a sorrendet, miközben garantálja, hogy nem lesz anaditional rendezési számítás annak eléréséhez, például:

ikon / gombok / másolás
> 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.

ha egy index már a DESC kulcsszót használja, akkor annak jelentése tükrözött lesz (törölve), ha a ORDER BY záradék isDESC – et használ, például:

ikon/gombok/másolás

sorok rendezése DML utasításokban

ha ORDER BY – t használ egy INSERT,UPSERT, UPDATE vagyDELETE (pl., DML utasítás), a ORDER BY záradékot figyelmen kívül hagyják, ha nem használják LIMIT és/vagyOFFSETkombinációban.

mind a ORDER BY, mind a LIMIT/OFFSET kombinációja meghatározza, hogy a bemenet mely sorait használják a táblázat beillesztésére, frissítésére vagy törlésére, de nem határozza meg, hogy a mutáció milyen sorrendben kerül elhelyezésre.

például a LIMIT használatával INSERT :

ikon / gombok / másolás
> 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.

az ok, amiért a ORDER BY nem szabályozza a sorok végső sorrendjét a táblában, az az, hogy a sorok sorrendjét a céltáblában az elsődleges és másodlagos indexek határozzák meg.

a RETURNING záradék eredményének megrendeléséhez lásd: a kimenetek rendezése töröl.

a törlések kimenetének rendezése

a DELETE utasítás kimenetének rendezéséhez használja:

ikon / gombok / másolás
> WITH a AS (DELETE ... RETURNING ...) SELECT ... FROM a ORDER BY ...

lásd például a törölt sorok rendezése és visszaadása című részt.

Lásd még

  • kiválasztási lekérdezések
  • skaláris kifejezések
  • INSERT
  • UPSERT
  • DELETE
  • UPDATE

hasznos volt ez az oldal?

Igen Nem

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.