zoekresultaten bestellen

de ORDER BY – clausule bepaalt de volgorde waarin rijen worden geretourneerd of verwerkt. Het kan worden gebruikt in elke selectiequery, met inbegrip van als operand van INSERT of UPSERT, alsmede met DELETE en UPDATEstatements.

Synopsis

ORDERBYa_exprASCDESCNULLSFIRSTLAstprimarykeytable_nameindextable_name@index_nameASCDESC,

Parameters

de ORDER BY – clausule bestaat uit een door komma ‘ s gescheiden lijst van orderspecificaties.Elke orderspecificatie bestaat uit een kolomselectie, optioneel gevolgd door het trefwoord ASC of DESC.

elke kolom kan een van de volgende vormen aannemen:

  • een eenvoudige kolomselectie, als volgt bepaald:
    1. de naam van een kolomlabel dat is geconfigureerd met AS eerder in de SELECT – clausule. Dit gebruikt de waarde berekend door de SELECT clausule als de sorteersleutel.
    2. een positief geheel getal, dat een van de kolommen in de gegevensbron aanwijst, hetzij de FROM clausule van de SELECT clausule waar dit gebeurt, hetzij de tabel wordt geschreven met DELETE of UPDATE. Dit gebruikt de overeenkomstige invoerwaarde uit de gegevensbron om te gebruiken als sorteersleutel.
    3. een willekeurige scalaire uitdrukking. Dit gebruikt het resultaat van het evalueren van die expressie als de sorteersleutel.
  • de notatie PRIMARY KEY <table_name>. Dit gebruikt de primaire sleutel kolom (s) van de gegeven tabel als sorteersleutel. Deze tabel moet deel uitmaken van de gegevensbron.
  • de notatie INDEX <table_name>@<index_name>. Dit gebruikt de kolommen geïndexeerd door de gegeven index als sorteersleutel. Deze tabel moet deel uitmaken van de gegevensbron.

het optionele sleutelwoord ASC na een kolomselectie geeft aan dat de sorteersleutel als-is gebruikt wordt en is dus zinloos.

het facultatieve sleutelwoord DESC keert de richting van de geselecteerde kolom(s)om door de selectie die onmiddellijk voorafgaat.

CockroachDB ondersteunt NULLS FIRST / NULLS LAST in ORDER BY clausules voor compatibiliteit met PostgreSQL rijsorteersyntaxis.

Noot:

ondersteuning voor NULLS LAST is momenteel alleen syntaxis. Als u NULLS LAST opgeeft in een ORDER BY – clausule, gebruikt CockroachDB NULLS FIRST en geeft geen fout terug.

behoud van de volgorde

in het algemeen is de volgorde van de tussentijdse resultaten van een query niet gegarandeerd,zelfs als ORDER BY is opgegeven. Met andere woorden, de ORDER BY-clausule is alleen effectief op het hoogste niveau. Bijvoorbeeld, het wordt genegeerd door de queryplanner wanneer aanwezig in een sub-query in een FROM clausule als volgt:

pictogram / knoppen / kopiëren
> SELECT * FROM a, b ORDER BY a.x; -- valid, effective> SELECT * FROM (SELECT * FROM a ORDER BY a.x), b; -- ignored, ineffective

bij het combineren van queries met sub-queries zullen sommige combinaties de ORDER BY-clausule in een sub-querysignificant maken:

  1. de volgorde van de operand van een WITH ORDINALITY clausule(binnen de FROM operand van een SELECT clausule) wordt behouden,om de nummering van de rijen te controleren.
  2. de volgorde van de operand van een op zichzelf staande LIMIT of OFFSET clausule (met een FROM operand van een SELECT clausule) wordt behouden om te bepalen welke rijen in het resultaat worden bewaard.
  3. de volgorde van de gegevensbron voor een statement INSERTof een statement UPSERT dat ookLIMIT gebruikt, wordt bewaard om te bepalen welke rijen worden verwerkt, maar niet de volgorde.
  4. de volgorde die is aangegeven voor een statement UPDATE of DELETEdat ook LIMIT gebruikt, wordt gebruikt om te bepalen welke rijen worden verwerkt, maar niet de volgorde.(Dit is een CockroachDB extensie.)
  5. de volgorde van een subquery die in een scalaire expression wordt gebruikt, wordt behouden.

bijvoorbeeld met WITH ORDINALITY:

pictogram / knoppen / kopiëren
> SELECT * FROM (SELECT * FROM a ORDER BY a.x) WITH ORDINALITY; -- ensures that the rows are numbered in the order of column a.x.

bijvoorbeeld, met behulp van een stand-alone LIMIT clausule in FROM:

icon/buttons / copy

bijvoorbeeld, met behulp van een subquery in scalaire context:

icon/buttons/copy

volgorde van rijen zonder volgorde door

zonder ORDER BY worden rijen verwerkt of geretourneerd in een niet-deterministische volgorde. “Niet-deterministisch” betekent dat de daadwerkelijke orde van het logische plan, de Orde van gegevens op schijf, de topologie van de Kakkerlakkenb-cluster kan afhangen, en over het algemeen in de tijd variabel is.

Sorteren met behulp van eenvoudige kolomselecties

rekening houdend met de volgende tabel:

icon / buttons / copy
> CREATE TABLE a(a INT);> INSERT INTO a VALUES (1), (3), (2);

de volgende statements zijn equivalent:

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

merk op dat de volgorde van de regels ertoe doet. Als er dubbelzinnigheid is, krijgt de AS aliasvoorkeur boven de kolommen van de gegevensbron, bijvoorbeeld:

icon/buttons / copy

het is ook mogelijk om te sorteren met een willekeurige scalaire expressie berekend voor elke rij, bijvoorbeeld:

pictogram/knoppen/kopiëren
> SELECT a, b FROM ab ORDER BY a + b; -- orders by the result of computing a+b.

Sorteren met meerdere kolommen

Als er meer dan één bestellen specificatie is gegeven, de latere specificaties zijn usedto om de rijen die zijn gelijk over de eerdere specificaties, bijvoorbeeld:

pictogram/knoppen/kopiëren
> CREATE TABLE ab(a INT, b INT);> SELECT a, b FROM ab ORDER BY b, a;

Dit sorteert de resultaten per kolom b, en dan als er multiplerows die dezelfde waarde in de kolom b, het zal dan om theserows door de kolom a.

het inverteren van de sorteervolgorde

het trefwoord DESC (“aflopend”) kan na een orderspecificatie worden toegevoegd om de volgorde om te zetten. Dit kan afzonderlijk worden gespecificeerd voor elke specificatie, bijvoorbeeld:

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.

sorteren in primaire sleutelvolgorde

de notatie ORDER BY PRIMARY KEY garandeert dat de resultaten worden gepresenteerd in primaire sleutelvolgorde.

Het bijzondere voordeel is dat voor query ‘ s met de primaire index,dit garandeert de orde, terwijl ook het garanderen zal er niet anadditional sorteren berekening te bereiken, bijvoorbeeld:

pictogram/knoppen/kopiëren
> CREATE TABLE kv(k INT PRIMARY KEY, v INT);> SELECT k, v FROM kv ORDER BY PRIMARY KEY kv; -- guarantees ordering by column k.

Als u een primaire sleutel gebruikt het zoekwoord DESC al is, dan is de meaningwill worden omgedraaid (geannuleerd) indien de ORDER BY clausule is ook van toepassingenDESC, bijvoorbeeld:

pictogram/knoppen/kopiëren

Sorteren in de index order

De ORDER BY INDEX notatie garandeert dat de resultaten presentedin de volgorde van een bepaalde index.

Het bijzondere voordeel is dat voor query ‘ s met behulp van die index, thisguarantees de orde, terwijl ook het garanderen zal er niet anadditional sorteren berekening te bereiken, bijvoorbeeld:

pictogram/knoppen/kopiëren
> 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.

Als een index maakt gebruik van het sleutelwoord DESC al is, dan is de meaningwill worden omgedraaid (geannuleerd) indien de ORDER BY clausule is ook van toepassingenDESC, bijvoorbeeld:

pictogram/knoppen/kopiëren

Bestellen rijen in DML-instructies

Bij gebruik van ORDER BY met een INSERT,UPSERT, UPDATE ofDELETE (i.e.,a DML statement), is de ORDER BY clausule ondertekend als het niet wordt gebruikt in combinatie metLIMIT en/of OFFSET.

de combinatie van zowel ORDER BY als LIMIT/OFFSET bepaalt welke rijen van de invoer worden gebruikt om de tabelgegevens in te voegen, bij te werken of te verwijderen, maar bepaalt niet in welke volgorde de mutatie plaatsvindt.

bijvoorbeeld met LIMIT in INSERT:

pictogram / knoppen / kopiëren
> 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.

de reden waarom ORDER BY de uiteindelijke volgorde van de rijen in de tabel niet bepaalt, is dat de volgorde van de rijen in de doeltabel wordt bepaald door de primaire en secundaire indexen.

om het resultaat van de RETURNING – clausule te ordenen, zie het sorteren van de output van verwijderingen.

sorteren van de uitvoer van verwijderingen

om de uitvoer van een DELETE statement te sorteren, gebruik:

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

zie voor een voorbeeld verwijderde rijen sorteren en retourneren.

zie ook

  • Selectiequeries
  • scalaire expressies
  • INSERT
  • UPSERT
  • DELETE
  • UPDATE

Was deze pagina nuttig?

Ja Nee

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.