Sorteren in omgekeerde volgorde sql. SQL-sortering - ORDER BY-clausule

Bij het ophalen van gegevens kan het van belang zijn om deze in een bepaalde geordende vorm te verkrijgen. Sorteren kan op elk veld met elk gegevenstype. Dit kan een oplopende of aflopende sortering zijn voor numerieke velden. Voor teken(tekst)velden kan dit alfabetisch gesorteerd worden, maar in essentie ook oplopend of aflopend. Het kan ook in elke richting worden uitgevoerd - van A tot Z, en omgekeerd van Z tot A.

De essentie van het sorteerproces is om de volgorde tot een bepaalde volgorde terug te brengen. Meer informatie over sorteren vindt u in het artikel 'Sorteeralgoritmen'. Bijvoorbeeld het sorteren van een willekeurige getallenreeks in oplopende volgorde:

2, 4, 1, 5, 9

zou moeten resulteren in een geordende reeks:

1, 2, 4, 5, 6

Op dezelfde manier geldt het volgende bij het sorteren in oplopende volgorde van tekenreekswaarden:

Ivanov Ivan, Petrov Petr, Ivanov Andrej

het resultaat zou moeten zijn:

Ivanov Andrej, Ivanov Ivan, Petrov Petrov

Hier is de regel "Andrey Ivanov" naar het begin verplaatst, omdat de vergelijking van snaren karakter voor karakter wordt uitgevoerd. Beide regels beginnen met dezelfde karakters "Ivanov". Omdat het symbool “A” in het woord “Andrey” eerder in het alfabet voorkomt dan het symbool “I” in het woord “Ivan”, zal deze regel eerder worden geplaatst.

Sorteren in een SQL-query

Om het sorteren uit te voeren, moet u de opdracht ORDER BY aan de queryreeks toevoegen. Na deze opdracht wordt het veld aangegeven waarmee wordt gesorteerd.

We gebruiken bijvoorbeeld de goederen tafelgoederen:

num
(Item nummer)
titel
(Naam)
prijs
(prijs)
1 Mandarijn50
2 Watermeloen120
3 Een ananas80
4 Banaan40

De gegevens hier zijn al geordend op de kolom 'num'. Laten we nu een query bouwen die een tabel weergeeft met producten gesorteerd in alfabetische volgorde:

SELECTEER * UIT goederen BESTEL OP titel

SELECT * FROM goederen – geeft aan dat alle velden uit de goederentabel moeten worden geselecteerd;

ORDER BY – sorteeropdracht;

titel – de kolom waarop de sortering zal worden uitgevoerd.

Het resultaat van het uitvoeren van een dergelijk verzoek is als volgt:

num titel prijs
3 Een ananas80
2 Watermeloen120
4 Banaan40
1 Mandarijn50

U kunt ook op elk van de tabelvelden sorteren.

Sorteerrichting

Standaard sorteert de opdracht ORDER BY in oplopende volgorde. Om de sorteerrichting handmatig te bepalen, gebruikt u het trefwoord ASC (oplopend) of DESC (aflopend) achter de kolomnaam. Om onze tabel dus in aflopende volgorde van prijzen weer te geven, moet u de vraag als volgt stellen:

SELECTEER * VAN goederen BESTEL OP prijs OMSCH

Sorteren op oplopende prijs is:

SELECTEER * VAN goederen BESTEL OP prijs ASC

Sorteren op meerdere velden

Met SQL kunt u op meerdere velden tegelijk sorteren. Om dit te doen, worden na het ORDER BY-commando de vereiste velden aangegeven, gescheiden door komma's. De volgorde van het zoekresultaat wordt geconfigureerd in dezelfde volgorde waarin de sorteervelden zijn opgegeven.

kolom1 kolom2 kolom3
3 1 C
1 3 C
2 2 B
2 1 B
1 2 A
1 3 A
3 4 A

Laten we de tabel sorteren volgens de volgende regels:

SELECTEER * UIT mijn tabel ORDER BY kolom1 ASC, kolom2 DESC, kolom3 ASC

Die. de eerste kolom stijgt, de tweede daalt, de derde stijgt weer. De query rangschikt de rijen op basis van de eerste kolom en vervolgens, zonder de eerste regel te overtreden, op basis van de tweede kolom. Dan ook zonder de bestaande regels te overtreden, aldus de derde. Het resultaat is een dataset zoals deze:

kolom1 kolom2 kolom3
1 3 A
1 3 C
1 2 A
2 2 B
2 1 B
3 1 A
3 1 C

Volgorde van de opdracht ORDER BY in een query

Het sorteren van rijen wordt meestal uitgevoerd samen met een voorwaarde voor het selecteren van gegevens. Het ORDER BY-commando wordt na de WHERE-selectievoorwaarde geplaatst. We selecteren bijvoorbeeld producten met een prijs van minder dan 100 roebel, gesorteerd op naam in alfabetische volgorde:

SELECTEER * VAN goederen WAAR prijs 100 BESTEL OP prijs ASC

Opmerking:
Alle artikelen in de huidige SQL-tutorialcategorie gebruiken voorbeelden en problemen op basis van een trainingsdatabase.

Volgens de eerste normale vorm van relationele databases zou de volgorde van rijen in tabellen er niet toe doen. Maar in de praktijk is het vaak nodig om informatie te sorteren voordat deze op het scherm wordt weergegeven.

De ORDER BY-clausule is verantwoordelijk voor de volgorde van de rijen die in de SQL-query worden geladen. Het bevindt zich helemaal aan het einde van het verzoek:

SELECTEER<Перечень столбцов>VAN<Перечень таблиц>BESTEL DOOR<Условие сортировки>

De sorteervoorwaarde specificeert de kolommen waarop de resulterende tabelrijen worden gesorteerd:

BESTEL PER col1, col2

Sorteervolgorde in SQL

Er zijn 2 sorteermogelijkheden: oplopend en aflopend. Om het sorteertype in de query aan te geven, geeft u na de kolomnaam het trefwoord ASC (oplopend) of DESC (aflopend) op, die respectievelijk de oplopende of aflopende volgorde bepalen. Het standaardtype is ASC:

ORDER BY col1 -- de volgende clausule is gelijk aan ORDER BY col1 ACS

Het is ook mogelijk om voor verschillende kolommen een andere volgorde op te geven:

BESTEL VIA col1 DESC, col2 ASC

Om het materiaal te consolideren, lost u het probleem op in de educatieve database:

U heeft een lijst met werknemers-ID's nodig, gesorteerd op groep in oplopende volgorde en datum van indiensttreding, van nieuw naar oud.

SELECT id, Groep, Aanstellingsdatum VAN Medewerkers BESTEL OP Groep, Aanstellingsdatum DESC

Laten we de syntaxis van de SELECT-instructie aanvullen met de ORDER BY-clausule (de verticale balk betekent dat een van de opties moet worden geselecteerd):

SELECTEER [Tabelnaam.]Kolomnaam[, [Tabelnaam.]Kolomnaam2 ...] VAN [[Databasenaam.]Schemanaam.]Tabelnaam Kolomnaam [, [Tabelnaam.]Kolomnaam2 ...]]

  • Vooruit >

Als de materialen van office-menu.ru u hebben geholpen, steun dan alstublieft het project zodat ik het verder kan ontwikkelen.

Vaak is het nodig om het resultaat van een zoekopdracht in een bepaalde volgorde weer te geven, bijvoorbeeld alfabetisch. Voor dit doel heeft het DBMS een speciale functie in de SQL-taal: sorteren. In dit geval kan de programmeur kiezen welke velden en in welke volgorde deze zullen voorkomen om het gewenste resultaat te bereiken, zonder serieuze programmeervaardigheden te gebruiken.

Wat is sorteren in een database?

Het werken met databases gaat voortdurend gepaard met een grote hoeveelheid informatie die moet worden georganiseerd. Momenteel zijn er een aantal DBMS'en met een breed scala aan functies, waarvan Oracle en MS SQL de meest populaire zijn. Het sorteren van informatie, als een van de belangrijkste procedures bij het werken met databases, wordt verzorgd door een speciale ingebouwde functie in elk ervan.

Door gegevens te rangschikken, kunt u het zoekproces vereenvoudigen en in sommige gevallen helpen bij het oplossen van bepaalde problemen of het optimaliseren van de werking van het programma. SQL-sortering wordt uitgevoerd door een afzonderlijk geselecteerd veld en indien nodig, als er identieke waarden zijn in de elementen van dit veld, kunt u aanvullende parameters opgeven die de locatie van de rijen bepalen.

Sorteeropdracht

SQL-sortering in de database wordt mogelijk gemaakt met behulp van de ORDER BY-functie. Dus bij het uitvoeren van informatie uit een database, na het specificeren van de kolommen en tabellen waaruit het lezen zal worden gedaan, moet de query een sorteeropdracht specificeren en vervolgens het veld of de velden bepalen waarmee de sortering zal worden uitgevoerd.

Als u bijvoorbeeld gegevens wilt ophalen uit de velden Naam en Leeftijd uit de tabel Mensen, terwijl u het resultaat in alfabetische volgorde wilt weergeven in de kolom Naam, dan zal de volgende query helpen: SELECTEER Naam, Leeftijd VAN Mensen BESTEL OP Naam.

Hoe stel ik de sorteervolgorde in?

Moderne omstandigheden stellen programmeurs voor verschillende taken, en soms is het nodig om vooraf te bepalen in welke volgorde het resultaat zal worden weergegeven: in aflopende of oplopende volgorde, in alfabetische volgorde of in omgekeerde volgorde? En om dit in SQL te doen, wordt de sorteervolgorde bepaald door een trefwoord aan de query toe te voegen. Nadat u de velden en tabellen heeft geselecteerd waaruit de gewenste informatie zal worden verkregen, moet u ORDER BY toevoegen en vervolgens de naam opgeven van de kolom waarop u wilt sorteren.

Om de omgekeerde volgorde te krijgen, moet u de DESC-parameter achter de naam opgeven. Als het nodig is om elementen te ordenen op basis van twee of meer criteria, worden de kolommen aangegeven, gescheiden door komma's, en wordt prioriteit bij de rangschikking gegeven aan het veld dat als eerste in de lijst staat. Het is vermeldenswaard dat de DESC-parameter het mogelijk maakt om elementen in omgekeerde volgorde in slechts één veld te rangschikken, waarna de naam waarvan dit trefwoord wordt aangegeven, dus indien nodig moet dit in alle geselecteerde kolommen worden opgegeven.

Alternatieve sorteermethoden

Als het niet mogelijk is om de ingebouwde SQL-sorteerfunctie te gebruiken, kunt u een van de bekende algoritmen schrijven. Als u de snelste volgorde van elementen wilt bereiken, moet u een methode gebruiken die gebaseerd is op het in tweeën splitsen van de reeks elementen. Ook erg populair zijn de "bubble"-rangschikkingsmethoden, waarbij twee aangrenzende elementen worden verwisseld als ze niet correct zijn gepositioneerd, de "piramidesoort", die het grootste element naar het einde van de lijst stuurt, en de "insertion sort", die bepaalt op zijn beurt de locatie van elk element.

Het zelf schrijven van een algoritme zal de sorteersnelheid niet significant verhogen, maar het zal wel bijdragen aan de ontwikkeling van programmeervaardigheden en u ook in staat stellen het proces aan te passen door het rangschikkingsschema aan te passen aan een specifieke database om de efficiëntie van het programma te verbeteren.

In de toekomst moeten we onze selectie mogelijk sorteren: alfabetisch voor tekst of oplopend/aflopend voor numerieke waarden. Voor dergelijke doeleinden in SQL er is een speciale operator BESTEL DOOR .

1. Sorteren van de geselecteerde gegevens.

Laten we onze hele tabel sorteren op het aantal productverkopen, namelijk op kolom Hoeveelheid.

SELECTEER * VANAF Sumproduct BESTEL PER Bedrag

We zien dat de query de records in oplopende volgorde in het veld heeft gesorteerd Hoeveelheid. Het is absoluut noodzakelijk om de volgorde van de operatoren te volgen, d.w.z. exploitant BESTEL DOOR moet helemaal aan het einde van het verzoek staan. Anders krijgt u een foutmelding.

Ook een kenmerk van de operator BESTEL DOOR is dat het gegevens kan sorteren op een veld dat we niet in de query hebben geselecteerd, dat wil zeggen dat het voldoende is dat het überhaupt in de database staat.

2. Sorteren op verschillende velden.

Laten we ons voorbeeld nu nog eens op nog een veld sorteren. Laat het een veld zijn Stad, dat de plaats van verkoop van producten weergeeft.

SELECTEER * VANAF Sumproduct BESTEL PER bedrag, plaats

De sorteervolgorde is afhankelijk van de volgorde van de velden in het verzoek. Dat wil zeggen dat in ons geval de gegevens eerst per kolom worden gesorteerd Hoeveelheid, en dan door Stad.

3. Sorteerrichting.

Hoewel de standaardoperator BESTEL DOOR sorteert in oplopende volgorde, we kunnen sorteerwaarden ook in aflopende volgorde opgeven. Om dit te doen, plaatsen we aan het einde van elk veld de operator OMSCHRIJVING (wat een afkorting is van het woord AFLOPEND).

SELECTEER * VANAF Sumproduct BESTEL PER Bedrag OMSCHRIJVING, Plaats

In dit voorbeeld de waarde in het veld Hoeveelheid werden gesorteerd in aflopende volgorde en in het veld Stad- Oplopend. Exploitant OMSCHRIJVING is slechts van toepassing op één kolom, dus indien nodig moet dit worden geschreven na elk veld dat aan de sortering deelneemt.