ORDER BY klauzule v SQL umožňuje výsledky dotazu uspořádat podle určitého pole (sloupce) nebo více sloupců. Existují 2 základní možnosti seřazení záznamů v tabulce.
- Vzestupně (ascending order = ASC) – seřadí záznamy od nejmenšího po největší v případě čísel nebo o “A” do “Z” v případě textových řetězců.
- Sestupně (descending order = DESC) seřadí záznamy od největšího po nejmenší u čísel a od “Z” do “A” u textu
Tip: Pokud neuvedeme jak chceme data v ORDER BY uspořádat, provede se defaultní nastavení, což je vzestupné řazení ASC
Pořadí v SQL skriptu
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
Syntaxe ORDER BY:
SELECT [Sloupec1], [Sloupec2], [Sloupec3]
FROM Tabulka
WHERE pole [Operator] hodnota
ORDER BY [Sloupec1] ASC/DESC, [Sloupec2] ASC/DESC
Tato klauzule patří úplně nakonec. Uspořádat data lze buď podle jednoho nebo podle více sloupců. V tomto případě filtrujeme prioritně podle [Sloupec1] vzestupně a sekundárně podle sloupce [Sloupec2] sestupně.
Příklad
Tabulka se kterou budeme pracovat má strukturu viz obrázek níže a obsahuje 18484 záznamů:
navážeme na příklad v článku SQL WHERE a kromě toho, že jsme na tabulku použili omezující podmínku, tak také výsledek přehledně uspořádáme pomocí ORDER BY.
Tentokrát budeme chtít z tabulky:
- vybrat všechny zákazníky, kteří mají [CustomerKey] mezi 10000 a 15000
- výsledek uspořádat podle příjmení [LastName] abecedně a současně podle datumu narození [BirthDate] sestupně
SELECT
[CustomerKey]
,[FirstName]
,[LastName]
,[BirthDate]
,[Gender]
FROM [AdventureWorksDW2012].[dbo].[DimCustomer]
WHERE [CustomerKey] BETWEEN 10000 AND 15000
ORDER BY
[LastName] ASC
,[BirthDate] DESC
Výsledkem je tabulka, kdy je výsledek seřazen nejprve podle Příjmení od A do Z a pokud nastane shoda v příjmení (např. Mr. Adams na obrázku) řadíme ještě podle datumu narození sestupně. Připojuji obrázek s vysvětlením jak jsou data seřazena:
Pokud bychom pořadí v ORDER BY klauzuli otočili, byl by výsledek samozřejmě úplně jiný, protože bychom nejdříve řadili podle datumu narození [BirthDate] a až poté podle Příjmení [LastName], podívejte se jak by to vypadalo: