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 UPDATE
utasításokat.
- szinopszis
- paraméterek
- rendelés megőrzése
- sorok sorrend nélküli rendezése
- rendezés egyszerű oszlopválasztással
- rendezés több oszlop használatával
- a rendezési sorrend megfordítása
- Rendezés elsődleges kulcs sorrendben
- Rendezés index sorrendben
- sorok rendezése DML utasításokban
- a törlések kimenetének rendezése
- Lásd még
szinopszis
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 DESC
kulcsszó 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:
- a
AS
korábbiSELECT
záradékban beállított oszlopcímke neve. Ez aSELECT
záradék által kiszámított értéket használja rendezési kulcsként. - pozitív egész szám, amely az adatforrás egyik oszlopát jelöli, vagy a
FROM
záradékSELECT
záradék, ahol ez megtörténik, vagy a táblátDELETE
vagyUPDATE
írja. Ez az adatforrás megfelelő bemeneti értékét használja rendezési kulcsként. - 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
- 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.
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:
> 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:
- a
WITH ORDINALITY
záradék operandusának sorrendje(aFROM
SELECT
záradék operandusán belül) megmarad a sorok számozásának szabályozására. - az önálló
LIMIT
vagyOFFSET
záradék operandusának sorrendje (aFROM
SELECT
záradék operandusa) megmarad, annak meghatározásához, hogy mely sorok maradnak az eredményben. - egy
INSERT
utasítás vagy egyUPSERT
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. - a
UPDATE
vagyDELETE
utasításhoz jelzett sorrend, amely szinténLIMIT
– 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.) - a skalár kifejezésben használt al-lekérdezés sorrendje megmarad.
például a WITH ORDINALITY
használatával:
> 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
:
például egy al-lekérdezés segítségével skaláris környezetben:
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:
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);
a következő állítások egyenértékűek:
+---------+| 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:
lehetőség van az egyes sorokhoz kiszámított tetszőleges skaláris kifejezés rendezésére is, például:
> 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:
> 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:
> 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:
> 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:
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:
> 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:
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/vagyOFFSET
kombiná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
:
> 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:
> 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