ORDER BYA MySQL-ben az ORDER BY utasítást arra használjuk, hogy a lekérdezés eredményét egy vagy több oszlop értéke alapján növekvő vagy csökkenő sorrendbe rendezzük.
Például az ORDER BY segítségével:
Az ORDER BY nem változtatja meg az adatbázisban tárolt rekordok sorrendjét, hanem a lekérdezés eredményét rendezi át.
ORDER BY alapvető szintaxisaAz ORDER BY általános felépítése:
SELECT oszlop1, oszlop2
FROM tabla_neve
ORDER BY oszlop_neve;
Alapértelmezés szerint a MySQL növekvő sorrendbe rendezi az adatokat.
Ha ettől eltérő sorrendet szeretnénk, megadhatjuk az ASC vagy a DESC kulcsszót.
ASCAz ASC az angol ascending szó rövidítése, jelentése: növekvő.
Növekvő rendezés esetén:
Példa: tanulók rendezése életkor szerint
Tegyük fel, hogy rendelkezésünkre áll a következő diakok tábla.
| id | nev | osztaly | eletkor |
|---|---|---|---|
| 1 | Anna | 10.A | 16 |
| 2 | Béla | 10.B | 17 |
| 3 | Csilla | 10.A | 15 |
| 4 | Dávid | 10.B | 16 |
| 5 | Erika | 10.A | 18 |
| 6 | Ferenc | 10.C | 15 |
| 7 | Gábor | 10.B | 16 |
| 8 | Hanna | 10.C | 15 |
Feladat: Jelenítsük meg a tanulókat életkor szerint növekvő sorrendben!
SELECT * FROM diakok ORDER BY eletkor ASC;
Eredmény:
| id | nev | osztaly | eletkor |
|---|---|---|---|
| 3 | Csilla | 10.A | 15 |
| 8 | Hanna | 10.C | 15 |
| 6 | Ferenc | 10.C | 15 |
| 1 | Anna | 10.A | 16 |
| 4 | Dávid | 10.B | 16 |
| 7 | Gábor | 10.B | 16 |
| 2 | Béla | 10.B | 17 |
| 5 | Erika | 10.A | 18 |
A tanulók a legfiatalabbtól a legidősebb felé haladva jelennek meg.
Fontos: az ASC kulcsszó elhagyható, mert a MySQL alapértelmezés szerint növekvő sorrendet használ.
DESCA DESC a descending szó rövidítése, jelentése: csökkenő.
Csökkenő rendezés esetén:
Példa: Jelenítsük meg a tanulókat a legidősebbtől a legfiatalabbig!
SELECT * FROM diakok ORDER BY eletkor DESC;
Eredmény:
| id | nev | osztaly | eletkor |
|---|---|---|---|
| 5 | Erika | 10.A | 18 |
| 2 | Béla | 10.B | 17 |
| 1 | Anna | 10.A | 16 |
| 4 | Dávid | 10.B | 16 |
| 7 | Gábor | 10.B | 16 |
| 3 | Csilla | 10.A | 15 |
| 8 | Hanna | 10.C | 15 |
| 6 | Ferenc | 10.C | 15 |
A lekérdezés a legidősebb tanulókkal kezdődik.
ASC és a DESC összehasonlítása| Kulcsszó | Jelentés | Példa |
|---|---|---|
ASC |
Növekvő sorrend | 10, 20, 30, 40 |
DESC |
Csökkenő sorrend | 40, 30, 20, 10 |
Megjegyzés: ha egy oszlopban több azonos érték található, azok egymáshoz viszonyított sorrendje nincs meghatározva, hacsak nem adunk meg további rendezési szempontot.
Fontos: Szöveges adatok rendezése esetén: az ékezetes karakterek rendezése a használt karakterkészlettől és az oszlophoz beállított kollációtól (collation) is függhet. Magyar szövegek rendezésekor ezért érdemes megfelelő magyar nyelvi rendezési szabályokat alkalmazni.
Az ORDER BY utasításban több oszlopot is megadhatunk.
Ilyenkor a MySQL először az első oszlop szerint rendez. Ha az első oszlop értéke több rekordnál azonos, akkor a második oszlop alapján rendezi ezeket a rekordokat.
Példa: rendezés osztály és életkor szerint
Feladat:
SELECT * FROM diakok ORDER BY osztaly ASC, eletkor ASC;
Eredmény:
| id | nev | osztaly | eletkor |
|---|---|---|---|
| 3 | Csilla | 10.A | 15 |
| 1 | Anna | 10.A | 16 |
| 5 | Erika | 10.A | 18 |
| 4 | Dávid | 10.B | 16 |
| 7 | Gábor | 10.B | 16 |
| 2 | Béla | 10.B | 17 |
| 6 | Ferenc | 10.C | 15 |
| 8 | Hanna | 10.C | 15 |
Példa: eltérő rendezési irányok
Feladat: Rendezzük a tanulókat osztály szerint növekvő, azon belül életkor szerint csökkenő sorrendbe!
SELECT * FROM diakok ORDER BY osztaly ASC, eletkor DESC;
Ebben az esetben:
Az egyes oszlopokhoz külön rendezési irányt rendelhetünk.
Az ORDER BY segítségével olyan oszlop szerint is rendezhetünk, amelyet a lekérdezés során számítunk ki.
Ehhez használhatunk például matematikai műveleteket vagy összesítő függvényeket.
Példa: Jelenítsük meg a termékek árát 27%-os áfával növelve, a legdrágább terméktől a legolcsóbbig!
SELECT
termek_nev,
netto_ar,
netto_ar * 1.27 AS brutto_ar
FROM termekek
ORDER BY brutto_ar DESC;
GROUP BY használatávalAz ORDER BY a csoportosító lekérdezésekkel együtt is használható.
Ez különösen hasznos, ha például osztálylétszámokat, termékkategóriák eladásait vagy részlegek átlagfizetéseit szeretnénk sorba rendezni.
Példa: Számoljuk meg, hogy hány tanuló jár az egyes osztályokba, majd jelenítsük meg az osztályokat létszám szerint csökkenő sorrendben!
SELECT osztaly, COUNT(*) AS letszam FROM diakok GROUP BY osztaly ORDER BY letszam DESC;
A lekérdezés működése:
FROM meghatározza a diakok táblát.GROUP BY osztaly osztályok szerint csoportosítja a rekordokat.COUNT(*) megszámolja az egyes osztályok tanulóit.ORDER BY letszam DESC a legnagyobb létszámtól a legkisebb felé rendezi az eredményt.ORDER BY és a WHERE kapcsolataA WHERE segítségével kiválaszthatjuk, mely rekordok kerüljenek be az eredménybe. Az ORDER BY ezután rendezi a megfelelő rekordokat.
Példa: csak a 16 éves vagy idősebb tanulók megjelenítése életkor szerint
SELECT * FROM diakok WHERE eletkor >= 16 ORDER BY eletkor ASC;
A lekérdezés először kiválasztja a legalább 16 éves tanulókat, majd életkor szerint növekvő sorrendbe rendezi őket.
LIMITGyakran nem az összes rekordra vagyunk kíváncsiak, hanem csak néhányra.
A LIMIT segítségével megadhatjuk, hogy a lekérdezés eredményéből legfeljebb hány sort szeretnénk megjeleníteni.
Példa: a három legidősebb tanuló
SELECT * FROM diakok ORDER BY eletkor DESC LIMIT 3;
A LIMIT 3 azt jelenti, hogy legfeljebb három sort kérünk az eredményből.
A feladatokat a korábban bemutatott diakok táblán oldjuk meg! diakok.sql
1. feladat – Rendezés név szerint
Jelenítsd meg az összes tanulót név szerint növekvő sorrendben!
2. feladat – Fordított névsorrend
Jelenítsd meg a tanulókat fordított ábécérendben!
3. feladat – Rendezés életkor szerint
Jelenítsd meg a tanulókat életkor szerint növekvő sorrendben!
4. feladat – A legidősebb tanulók
Jelenítsd meg a tanulókat a legidősebbtől a legfiatalabbig!
5. feladat – Rendezés több oszlop alapján
Jelenítsd meg a tanulókat osztály szerint növekvő, azon belül életkor szerint csökkenő sorrendben!
6. feladat – Szűrés és rendezés
Jelenítsd meg csak a legalább 16 éves tanulókat, életkor szerint növekvő sorrendben!
7. feladat – A három legfiatalabb tanuló
Jelenítsd meg a három legfiatalabb tanulót!
8. feladat – Osztálylétszámok rendezése
Számold meg, hogy hány tanuló jár az egyes osztályokba, majd rendezd az osztályokat létszám szerint csökkenő sorrendbe!