Ga naar hoofdinhoud

ORDER BY

Als je de rijen gegarandeerd in een bepaalde volgorde wil zien, dan gebruik je daarvoor een ORDER BY.

  • De standaard volgorde is oplopend. De term daarvoor is ASCENDING, afgekort ASC.
  • Numerieke waarden worden getoond van klein naar groot.
  • Datums worden getoond van oud naar nieuw.
  • Tekens worden getoond op alfabetische volgorde.
  • NULL waarden komen eerst als er standaard op ASCENDING wordt gesorteerd.
  • Het tegenovergestelde van ASCENDING is DESCENDING, kortweg DESC.

De ORDER BY is de laatste regel van de query. Tenzij er nog een LIMIT gebruikt wordt, want dan komt LIMIT op de allerlaatste regel.

SELECT last_name, hire_date
FROM employees
ORDER BY hire_date;
last_namehire_date
King1987-06-17
Whalen1987-09-17
Kochhar1989-09-21
Hunold1990-01-03
Ernst1991-05-21
De Haan1993-01-13
Higgins1994-06-07
Gietz1994-06-07
Rajs1995-10-17
Hartstein1996-02-17
Abel1996-05-11
Davies1997-01-29
Fay1997-08-17
Matos1998-03-15
Taylor1998-03-24
Vargas1998-07-09
Lorentz1999-02-07
Grant1999-05-24
Mourgos1999-11-16
Zlotkey2000-01-29

De kolom waarop je sorteert hoeft niet opgenomen te zijn in de SELECT op de bovenste regel. Je kunt sorteren op elke kolom van de tabel.

SELECT employee_id, first_name
FROM employees
WHERE employee_id < 105
ORDER BY last_name;
employee_idfirst_name
102Lex
104Bruce
103Alexander
100Steven
101Neena

Het is mogelijk een alias te gebruiken voor de ORDER BY.

SELECT last_name, hire_date AS date_started
FROM employees
ORDER BY date_started;
last_namedate_started
King1987-06-17
Whalen1987-09-17
Kochhar1989-09-21
Hunold1990-01-03
Ernst1991-05-21
De Haan1993-01-13
Higgins1994-06-07
Gietz1994-06-07
Rajs1995-10-17
Hartstein1996-02-17
Abel1996-05-11
Davies1997-01-29
Fay1997-08-17
Matos1998-03-15
Taylor1998-03-24
Vargas1998-07-09
Lorentz1999-02-07
Grant1999-05-24
Mourgos1999-11-16
Zlotkey2000-01-29

Het is mogelijk op meerdere kolommen te sorteren.

SELECT department_id, last_name
FROM employees
WHERE department_id <= 50
ORDER BY department_id, last_name;
department_idlast_name
10Whalen
20Fay
20Hartstein
50Davies
50Matos
50Mourgos
50Rajs
50Vargas

Als je op meerdere kolommen sorteert, kun je ook DESC gebruiken voor elke kolom waar dat is gewenst.

SELECT department_id, last_name
FROM employees
WHERE department_id <= 50
ORDER BY department_id DESC, last_name;
department_idlast_name
50Davies
50Matos
50Mourgos
50Rajs
50Vargas
20Fay
20Hartstein
10Whalen

NULL waarden komen als eerst aan de beurt.

SELECT last_name, commission_pct
FROM employees
ORDER BY commission_pct;
last_namecommission_pct
King
Kochhar
De Haan
Hunold
Ernst
Lorentz
Mourgos
Rajs
Davies
Matos
Vargas
Whalen
Hartstein
Fay
Higgins
Gietz
Grant0.15
Zlotkey0.2
Taylor0.2
Abel0.3

Het is ook mogelijk te sorteren op het nummer van de kolom op de SELECT regel.

SELECT first_name, last_name
FROM employees
ORDER BY 2;
first_namelast_name
EllenAbel
CurtisDavies
LexDe Haan
BruceErnst
PatFay
WilliamGietz
KimberelyGrant
MichaelHartstein
ShelleyHiggins
AlexanderHunold
StevenKing
NeenaKochhar
DianaLorentz
RandallMatos
KevinMourgos
TrennaRajs
JonathonTaylor
PeterVargas
JenniferWhalen
EleniZlotkey

Descending

Standaard wordt er oplopend gesorteerd. Die volgorde is dan ASCENDING maar dat hoef je dus nooit te gebruiken want standaard wordt er in die volgorde gesorteerd. Je kunt de oplopende volgorde aanpassen naar een aflopende volgorde met gebruik van DESC. DESC is de afkorting van DESCENDING. Er wordt dan dus gesorteerd van hoog naar laag. Vergelijk onderstaande query's met elkaar en let ook op de pijltjes achter last_name in de kop van de tweede kolom van de uitvoer. Bij de linker query staat dat pijltje omhoog (ASCENDING) en bi jde rechter query staat dat pijltje omlaag (DESCENDING).

SELECT first_name, last_name
FROM employees
ORDER BY last_name DESC;
first_namelast_name
EleniZlotkey
JenniferWhalen
PeterVargas
JonathonTaylor
TrennaRajs
KevinMourgos
RandallMatos
DianaLorentz
NeenaKochhar
StevenKing
AlexanderHunold
ShelleyHiggins
MichaelHartstein
KimberelyGrant
WilliamGietz
PatFay
BruceErnst
LexDe Haan
CurtisDavies
EllenAbel

NULL waarden komen eerst als er oplopend (van laag naar hoog) wordt gesorteerd en laatst als er aflopend (van hoog naar laag) wordt gesorteerd. Vergelijk deze twee query's met elkaar.

SELECT first_name, manager_id
FROM employees
ORDER BY manager_id DESC;
first_namemanager_id
William205
Pat201
Ellen149
Jonathon149
Kimberely149
Trenna124
Curtis124
Randall124
Peter124
Bruce103
Diana103
Alexander102
Jennifer101
Shelley101
Neena100
Lex100
Kevin100
Eleni100
Michael100
Steven

Met datums wordt de volgorde ook omgedraaid.

SELECT last_name, hire_date
FROM employees
ORDER BY hire_date DESC;
last_namehire_date
Zlotkey2000-01-29
Mourgos1999-11-16
Grant1999-05-24
Lorentz1999-02-07
Vargas1998-07-09
Taylor1998-03-24
Matos1998-03-15
Fay1997-08-17
Davies1997-01-29
Abel1996-05-11
Hartstein1996-02-17
Rajs1995-10-17
Higgins1994-06-07
Gietz1994-06-07
De Haan1993-01-13
Ernst1991-05-21
Hunold1990-01-03
Kochhar1989-09-21
Whalen1987-09-17
King1987-06-17