Samenvatting: in deze tutorial leert u hoe u een resultatenset kunt sorteren met behulp van de MySQL ORDER BY
-clausule.
Inleiding tot de MySQL ORDER BY-clausule
Wanneer u het SELECT
statement gebruikt om gegevens uit een tabel op te vragen, is de resultatenset niet gesorteerd. Dit betekent dat de rijen in de resultatenset in willekeurige volgorde kunnen staan.
Om de resultatenset te sorteren, voegt u de ORDER BY
-clausule toe aan het SELECT
statement. Hieronder wordt de syntaxis van de ORDER BY
-clausule geïllustreerd:
In deze syntaxis geeft u na de ORDER BY
-clausule de een of meer kolommen op die u wilt sorteren.
De ASC
staat voor oplopend en de DESC
staat voor aflopend. U gebruikt ASC
om de resultatenset in oplopende volgorde te sorteren en DESC
om de resultatenset in aflopende volgorde te sorteren.
Deze ORDER BY
clausule sorteert de resultatenset in oplopende volgorde:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
En deze ORDER BY
clausule sorteert de resultatenset in aflopende volgorde:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 DESC;
De standaardinstelling is dat de ORDER BY
-clausule ASC
gebruikt als u niet expliciet een optie opgeeft.
Daarom zijn de volgende clausules equivalent:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
en
Code language: SQL (Structured Query Language) (sql)ORDER BY column1;
Als u de resultatenset op meerdere kolommen wilt sorteren, specificeert u een door komma’s gescheiden lijst met kolommen in de ORDER BY
-clausule:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1, column2;
Het is mogelijk om het resultaat te sorteren op een kolom in oplopende volgorde, en vervolgens op een andere kolom in aflopende volgorde:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC, column2 DESC;
In dit geval de ORDER BY
-clausule:
- Sorteer eerst de resultatenset op de waarden in de
column1
in oplopende volgorde. - Sorteer vervolgens de gesorteerde resultatenset op de waarden in de
column2
in aflopende volgorde. Merk op dat de volgorde van de waarden in decolumn1
niet verandert in deze stap, alleen de volgorde van de waarden in decolumn2
verandert.
Merk op dat de ORDER BY
clausule altijd wordt geëvalueerd na de FROM
en SELECT
clausule.
MySQL ORDER BY voorbeelden
We zullen de customers
tabel uit de voorbeelddatabase gebruiken voor de demonstratie.
A) MySQL ORDER BY-clausule gebruiken om waarden in één kolom te sorteren voorbeeld
De volgende query gebruikt de ORDER BY
-clausule om de klanten te sorteren op de waarden in de contactLastName
-kolom in oplopende volgorde.
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Probeer het
Als u klanten op hun achternaam in aflopende volgorde wilt sorteren, gebruikt u de DESC
na de contactLastname
kolom in de ORDER BY
clausule zoals weergegeven in de volgende query:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Probeer het eens
B) MySQL ORDER BY-clausule gebruiken om waarden in meerdere kolommen te sorteren
Als u de klanten wilt sorteren op achternaam in aflopende volgorde en vervolgens op voornaam in oplopende volgorde, specificeert u zowel DESC
als ASC
in de overeenkomstige kolom als volgt:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Probeer het uit
In dit voorbeeld, sorteert de ORDER BY
-clausule de resultatenreeks eerst op achternaam in aflopende volgorde en vervolgens op voornaam in oplopende volgorde om de uiteindelijke resultatenreeks te produceren.
C) MySQL ORDER BY gebruiken om een resultaatverzameling te sorteren op een expressievoorbeeld
Zie de volgende orderdetails
tabel uit de voorbeelddatabase.
De volgende query selecteert de bestelregelitems uit de tabel orderdetails
. Hij berekent het subtotaal voor elk regelitem en sorteert de resultatenset op basis van het subtotaal.
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Probeer het
Om de query leesbaarder te maken, kunt u aan de expressie in de SELECT
-clausule een kolomalias toekennen en die kolomalias gebruiken in de ORDER BY
-clausule, zoals in de volgende query wordt getoond:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Probeer het eens
In dit voorbeeld, hebben we subtotal
gebruikt als de kolom alias voor de uitdrukking quantityOrdered * priceEach
en hebben we de resultatenset gesorteerd op de subtotal
alias.
De kolom alias kan worden gebruikt in de ORDER BY
-clausule omdat de SELECT
-clausule wordt geëvalueerd vóór de ORDER BY
-clausule. Tegen de tijd dat de ORDER BY
clausule is geëvalueerd, is de kolom alias toegankelijk.
MysqlX ORDER BY gebruiken om gegevens te sorteren met behulp van een aangepaste lijst
Met de ORDER BY
-clausule kunt u gegevens sorteren met behulp van een aangepaste lijst door gebruik te maken van de FIELD()
-functie.
Zie de volgende orders
tabel uit de voorbeelddatabase.
Voorstel dat u de verkooporders wilt sorteren op basis van hun statussen in de volgende volgorde:
- In behandeling
- Op wacht
- Opgeschort
- Opgelost
- Ontisputed
- Verzonden
Om dit te doen, kunt u de FIELD()
functie gebruiken om elke orderstatus in een getal om te zetten en het resultaat te sorteren op het resultaat van de FIELD()
functie:
Probeer het uit
De volgende expressie:
Code language: SQL (Structured Query Language) (sql)FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
returns the index of the status
in the list 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'
.
Bijv. als de status
In Process
is, zal de functie 1 teruggeven. Als de status
On Hold
is, zal de functie 2 teruggeven, enzovoort.
In deze tutorial hebt u geleerd hoe u de MySQL ORDER BY
-clausule kunt gebruiken om rijen in de resultatenset op een of meer kolommen in oplopende of aflopende volgorde te sorteren.
- Was deze tutorial nuttig?
- JaNee