ORDER BY#

%LOAD ../data/employees.db

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_name hire_date
King 1987-06-17
Whalen 1987-09-17
Kochhar 1989-09-21
Hunold 1990-01-03
Ernst 1991-05-21
De Haan 1993-01-13
Higgins 1994-06-07
Gietz 1994-06-07
Rajs 1995-10-17
Hartstein 1996-02-17
Abel 1996-05-11
Davies 1997-01-29
Fay 1997-08-17
Matos 1998-03-15
Taylor 1998-03-24
Vargas 1998-07-09
Lorentz 1999-02-07
Grant 1999-05-24
Mourgos 1999-11-16
Zlotkey 2000-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_id first_name
102 Lex
104 Bruce
103 Alexander
100 Steven
101 Neena

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_name date_started
King 1987-06-17
Whalen 1987-09-17
Kochhar 1989-09-21
Hunold 1990-01-03
Ernst 1991-05-21
De Haan 1993-01-13
Higgins 1994-06-07
Gietz 1994-06-07
Rajs 1995-10-17
Hartstein 1996-02-17
Abel 1996-05-11
Davies 1997-01-29
Fay 1997-08-17
Matos 1998-03-15
Taylor 1998-03-24
Vargas 1998-07-09
Lorentz 1999-02-07
Grant 1999-05-24
Mourgos 1999-11-16
Zlotkey 2000-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_id last_name
10 Whalen
20 Fay
20 Hartstein
50 Davies
50 Matos
50 Mourgos
50 Rajs
50 Vargas

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_id last_name
50 Davies
50 Matos
50 Mourgos
50 Rajs
50 Vargas
20 Fay
20 Hartstein
10 Whalen

NULL waarden komen als eerst aan de beurt.

SELECT last_name, commission_pct
FROM employees
ORDER BY commission_pct;
last_name commission_pct
King
Kochhar
De Haan
Hunold
Ernst
Lorentz
Mourgos
Rajs
Davies
Matos
Vargas
Whalen
Hartstein
Fay
Higgins
Gietz
Grant 0.15
Zlotkey 0.2
Taylor 0.2
Abel 0.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_name last_name
Ellen Abel
Curtis Davies
Lex De Haan
Bruce Ernst
Pat Fay
William Gietz
Kimberely Grant
Michael Hartstein
Shelley Higgins
Alexander Hunold
Steven King
Neena Kochhar
Diana Lorentz
Randall Matos
Kevin Mourgos
Trenna Rajs
Jonathon Taylor
Peter Vargas
Jennifer Whalen
Eleni Zlotkey

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_name last_name
Eleni Zlotkey
Jennifer Whalen
Peter Vargas
Jonathon Taylor
Trenna Rajs
Kevin Mourgos
Randall Matos
Diana Lorentz
Neena Kochhar
Steven King
Alexander Hunold
Shelley Higgins
Michael Hartstein
Kimberely Grant
William Gietz
Pat Fay
Bruce Ernst
Lex De Haan
Curtis Davies
Ellen Abel

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_name manager_id
William 205
Pat 201
Ellen 149
Jonathon 149
Kimberely 149
Trenna 124
Curtis 124
Randall 124
Peter 124
Bruce 103
Diana 103
Alexander 102
Jennifer 101
Shelley 101
Neena 100
Lex 100
Kevin 100
Eleni 100
Michael 100
Steven

Met datums wordt de volgorde ook omgedraaid.

SELECT last_name, hire_date
FROM employees
ORDER BY hire_date DESC;
last_name hire_date
Zlotkey 2000-01-29
Mourgos 1999-11-16
Grant 1999-05-24
Lorentz 1999-02-07
Vargas 1998-07-09
Taylor 1998-03-24
Matos 1998-03-15
Fay 1997-08-17
Davies 1997-01-29
Abel 1996-05-11
Hartstein 1996-02-17
Rajs 1995-10-17
Higgins 1994-06-07
Gietz 1994-06-07
De Haan 1993-01-13
Ernst 1991-05-21
Hunold 1990-01-03
Kochhar 1989-09-21
Whalen 1987-09-17
King 1987-06-17