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
column1in oplopende volgorde. - Sorteer vervolgens de gesorteerde resultatenset op de waarden in de
column2in aflopende volgorde. Merk op dat de volgorde van de waarden in decolumn1niet verandert in deze stap, alleen de volgorde van de waarden in decolumn2verandert.
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 statusIn Process is, zal de functie 1 teruggeven. Als de statusOn 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