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
, afgekortASC
.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
isDESCENDING
, kortwegDESC
.
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 |