Seřadit podle syntaxe. Řazení dat v SQL (ORDER BY). Seřadit vybraná data

Poznámka:
Všechny články v aktuální kategorii výukových programů SQL používají příklady a problémy založené na trénovací databázi.

Podle první normální formy relačních databází by na pořadí řádků v tabulkách nemělo záležet. V praxi je ale často nutné informace před zobrazením na obrazovce třídit.

Klauzule ORDER BY je zodpovědná za řazení řádků načtených v dotazu SQL. Nachází se na samém konci žádosti:

VYBRAT<Перечень столбцов>Z<Перечень таблиц>SEŘADIT PODLE<Условие сортировки>

Podmínka řazení určuje sloupce, podle kterých budou řazeny výsledné řádky tabulky:

ORDER BY col1, col2

Pořadí řazení v SQL

Existují 2 možnosti řazení: vzestupně a sestupně. Chcete-li v dotazu uvést typ řazení, za názvem sloupce uveďte klíčové slovo ASC (ascending) nebo DESC (descending), které definují vzestupné nebo sestupné pořadí. Výchozí typ je ASC:

ORDER BY col1 -- další klauzule bude ekvivalentní ORDER BY col1 ACS

Je také možné zadat různé pořadí pro různé sloupce:

ORDER BY col1 DESC, col2 ASC

Chcete-li materiál konsolidovat, vyřešte problém ve vzdělávací databázi:

Potřebujete získat seznam ID zaměstnanců, seřazený podle skupiny ve vzestupném pořadí a data přijetí, od nejnovějších po nejstarší.

SELECT id, Group, Hire_date FROM Zaměstnanci ORDER BY Group, Hire_date DESC

Doplňme syntaxi příkazu SELECT o klauzuli ORDER BY (svislá čára znamená, že je třeba vybrat jednu z možností):

SELECT [TableName.]ColumnName[, [TableName.]ColumnName2 ...] FROM [[DatabaseName.]SchemaName.]TableName ColumnName [, [TableName.]ColumnName2 ...]]

  • Vpřed >

Pokud vám pomohly materiály z office-menu.ru, podpořte prosím projekt, abych jej mohl dále rozvíjet.

Klauzule ORDER BY v Accessu třídí záznamy vrácené dotazem ve vzestupném nebo sestupném pořadí hodnot zadaných polí.

Syntax

VYBRAT pole_seznam
Z stůl
KDE podmínka_výběru
[, pole2 ][, ...]]]

příkaz SELECT obsahující klauzuli ORDER BY obsahuje následující prvky:

Poznámky

Klauzule ORDER BY je volitelná. Mělo by se používat, když potřebujete zobrazit data v setříděné podobě.

Výchozí řazení je vzestupné (A až Z, 0 až 9). Dva příklady níže ukazují řazení jmen zaměstnanců podle příjmení.

SELECT Příjmení, Jméno
OD ZAMĚSTNANCŮ
OBJEDNAT PODLE Příjmení;
SELECT Příjmení, Jméno
OD ZAMĚSTNANCŮ
OBJEDNAT PODLE Příjmení ASC;

Chcete-li seřadit v sestupném pořadí (Z až A, 9 až 0), přidejte vyhrazené slovo DESC na konec každého pole, podle kterého chcete záznamy seřadit. Níže uvedený příklad seřadí jména zaměstnanců v sestupném pořadí podle platu.

SELECT Příjmení, Plat
OD ZAMĚSTNANCŮ
OBJEDNAT PODLE Mzdu DESC, Příjmení;

Pokud zadáte pole, které obsahuje data typu Memo nebo objekty OLE v klauzuli ORDER BY, dojde k chybě. DBMS jádro Microsoft Access nepodporuje řazení podle polí tohoto typu.

Klauzule ORDER BY je obvykle posledním prvkem v příkazu SQL.

Do klauzule ORDER BY můžete zahrnout další pole. Záznamy jsou nejprve seřazeny podle pole uvedeného jako prvního v klauzuli ORDER BY. Záznamy se stejnými hodnotami prvního pole jsou pak seřazeny podle druhého zadaného pole a tak dále.

Při načítání dat může být důležité získat je v určité uspořádané podobě. Řazení lze provádět podle libovolných polí s libovolným datovým typem. Může se jednat o vzestupné nebo sestupné řazení číselných polí. U znakových (textových) polí to může být řazení abecední pořadí, i když v podstatě jde také o řazení ve vzestupném nebo sestupném pořadí. Může být také prováděn v libovolném směru - od A do Z a naopak od Z do A.

Podstatou procesu třídění je zredukovat posloupnost na určité pořadí. Více o řazení se dozvíte v článku Algoritmy řazení. Například řazení libovolné číselné řady ve vzestupném pořadí:

2, 4, 1, 5, 9

výsledkem by měla být uspořádaná sekvence:

1, 2, 4, 5, 6

Podobně při řazení ve vzestupném pořadí hodnot řetězců:

Ivanov Ivan, Petrov Petr, Ivanov Andrej

výsledek by měl být:

Ivanov Andrej, Ivanov Ivan, Petrov Petrov

Zde se řádek „Andrey Ivanov“ přesunul na začátek, protože porovnávání řetězců se provádí znak po znaku. Oba řádky začínají stejnými znaky „Ivanov“. Protože symbol „A“ ve slově „Andrey“ je v abecedě dříve než symbol „I“ ve slově „Ivan“, bude tento řádek umístěn dříve.

Řazení v SQL dotazu

Chcete-li provést řazení, musíte do řetězce dotazu přidat příkaz ORDER BY. Po tomto příkazu je uvedeno pole, kterým se řazení provádí.

Pro příklady používáme zboží tabulky zboží:

č
(Číslo položky)
titul
(Název)
cena
(cena)
1 Mandarinka50
2 Vodní meloun120
3 Ananas80
4 Banán40

Údaje jsou zde již seřazeny podle sloupce "num". Nyní vytvoříme dotaz, který zobrazí tabulku s produkty seřazenými v abecedním pořadí:

VYBRAT * OD zboží OBJEDNEJTE PODLE titulu

VYBRAT * ZE zboží – určuje výběr všech polí z tabulky zboží;

ORDER BY – příkaz řazení;

title – sloupec, podle kterého se bude řazení provádět.

Výsledek provedení takového požadavku je následující:

č titul cena
3 Ananas80
2 Vodní meloun120
4 Banán40
1 Mandarinka50

Můžete také seřadit podle kteréhokoli z polí tabulky.

Směr řazení

Ve výchozím nastavení příkaz ORDER BY seřadí vzestupně. Chcete-li ručně ovládat směr řazení, použijte klíčové slovo ASC (vzestupně) nebo DESC (sestupně) za názvem sloupce. Chcete-li tedy zobrazit naši tabulku v sestupném pořadí cen, musíte položit dotaz takto:

VYBRAT * OD zboží OBJEDNEJTE DLE CENY POPIS

Seřadit podle vzestupné ceny bude:

VYBRAT * OD zboží OBJEDNEJTE DLE ceny ASC

Řazení podle více polí

SQL umožňuje řazení podle více polí najednou. Chcete-li to provést, po příkazu ORDER BY jsou požadovaná pole označena oddělenými čárkami. Pořadí výsledku dotazu bude nakonfigurováno ve stejném pořadí, ve kterém jsou zadána třídicí pole.

sloupec1 sloupec2 sloupec3
3 1 C
1 3 C
2 2 b
2 1 b
1 2 A
1 3 A
3 4 A

Seřaďme tabulku podle následujících pravidel:

VYBRAT * Z mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

Tito. první sloupec je vzestupný, druhý sestupný, třetí opět vzestupný. Dotaz seřadí řádky podle prvního sloupce a poté, aniž by došlo k porušení prvního pravidla, podle druhého sloupce. Pak také, aniž by došlo k porušení stávajících pravidel, podle třetího. Výsledkem bude soubor dat takto:

sloupec1 sloupec2 sloupec3
1 3 A
1 3 C
1 2 A
2 2 b
2 1 b
3 1 A
3 1 C

Pořadí příkazu ORDER BY v dotazu

Řazení řádků se nejčastěji provádí společně s podmínkou pro výběr dat. Příkaz ORDER BY je umístěn za podmínku výběru WHERE. Například vybíráme produkty s cenou nižší než 100 rublů, seřazené podle názvu v abecedním pořadí:

VYBRAT * OD zboží, KDE cena 100 OBJEDNAT PODLE ceny ASC

Často je potřeba zobrazit výsledek dotazu v určitém pořadí, například abecedně. K tomuto účelu má DBMS speciální funkci v jazyce SQL - řazení. V tomto případě si programátor může vybrat, která pole a v jakém pořadí se budou vyskytovat, aby dosáhl požadovaného výsledku, bez použití vážných programátorských dovedností.

Co je třídění v databázi?

Práce s databázemi je neustále spojena s velkým množstvím informací, které je potřeba organizovat. V současné době existuje řada DBMS s širokou škálou funkcí, z nichž nejoblíbenější jsou Oracle a MS SQL. Třídění informací, jako jeden z hlavních postupů při práci s databázemi, zajišťuje speciální vestavěná funkce v každé z nich.

Údaje o hodnocení umožňují zjednodušit proces vyhledávání a v některých případech pomáhají vyřešit určité problémy nebo optimalizovat provoz programu. Třídění SQL se provádí samostatně vybraným polem a v případě potřeby, pokud jsou v prvcích tohoto pole identické hodnoty, můžete zadat další parametry, které určují umístění řádků.

Příkaz řazení

SQL řazení v databázi zajišťuje funkce ORDER BY. Takže při výstupu informací z databáze musí dotaz po zadání sloupců a tabulek, ze kterých se bude provádět čtení, zadat příkaz pro řazení a poté určit pole nebo pole, podle kterých se bude řazení provádět.

Pokud například potřebujete získat data z polí Jméno a Věk z tabulky Lidé a přitom zobrazit výsledek v abecedním pořadí podle sloupce Název, pomůže vám následující dotaz: VYBERTE Jméno, Věk FROM Lidé ORDER BY Name.

Jak nastavit pořadí řazení?

Moderní podmínky kladou programátorům různé úkoly a někdy je nutné předem určit, v jakém pořadí se bude výsledek zobrazovat – sestupně nebo vzestupně, v abecedním pořadí nebo v obráceném pořadí? A k tomu v SQL je pořadí řazení určeno přidáním klíčového slova do dotazu. Po výběru polí a tabulek, ze kterých budou získány požadované informace, musíte přidat ORDER BY a poté zadat název sloupce, podle kterého chcete seřadit.

Chcete-li získat opačné pořadí, musíte za názvem zadat parametr DESC. Pokud je nutné seřadit prvky podle dvou nebo více kritérií, pak jsou sloupce označeny oddělenými čárkami a prioritu v pořadí bude mít pole, které je v seznamu na prvním místě. Za zmínku stojí, že parametr DESC umožňuje uspořádání prvků v opačném pořadí pouze v jednom poli, za jehož názvem je toto klíčové slovo uvedeno, takže v případě potřeby musí být uvedeno ve všech vybraných sloupcích.

Alternativní metody třídění

Pokud není možné použít vestavěnou funkci třídění SQL, můžete napsat některý ze známých algoritmů. Pokud potřebujete dosáhnout nejrychlejšího řazení prvků, měli byste použít metodu založenou na rozdělení pole prvků na polovinu. Velmi oblíbené jsou také metody hodnocení „bublina“, ve kterých jsou dvě sousední prvky prohodit místa v případě nesprávného umístění, "pyramid sort", který pošle největší prvek na konec seznamu, a "insertion sort", který předurčí umístění každého prvku v pořadí.

Vlastní psaní algoritmu výrazně nezvýší rychlost řazení, přispěje to však k rozvoji programátorských dovedností a také vám umožní upravit proces přizpůsobením schématu hodnocení konkrétní databázi, abyste zlepšili efektivitu programu.

V budoucnu možná budeme muset náš výběr seřadit – abecedně pro text nebo vzestupně/sestupně pro číselné hodnoty. Pro takové účely v SQL Tady je speciální operátor SEŘADIT PODLE .

1. Třídění vybraných dat.

Seřaďme celou naši tabulku podle množství prodeje produktů, konkrétně podle sloupce Množství.

VYBRAT * OD Souhrnný produkt OBJEDNAT PODLE Částky

Vidíme, že dotaz seřadil záznamy v poli vzestupně Množství. Je bezpodmínečně nutné dodržet posloupnost operátorů, tzn. operátor SEŘADIT PODLE by měl být uveden na samém konci žádosti. V opačném případě se zobrazí chybová zpráva.

Také vlastnost operátora SEŘADIT PODLE je, že umí třídit data podle pole, které jsme v dotazu nevybrali, tedy stačí, že v databázi vůbec je.

2. Třídění podle několika polí.

Nyní náš příklad seřaďme dodatečně podle jednoho dalšího pole. Ať je to pole Město, která zobrazuje místo prodeje produktů.

VYBRAT * OD Sumproduct OBJEDNAT PODLE Částky, Město

Pořadí řazení bude záviset na pořadí polí v požadavku. To znamená, že v našem případě budou nejprve data seřazena podle sloupců Množství a poté podle Město.

3. Směr řazení.

I když výchozí operátor SEŘADIT PODLE seřadí vzestupně, můžeme také zadat hodnoty řazení sestupně. Za tímto účelem na konec každého pole vložíme operátor DESC (což je zkratka pro slovo KLESAJÍCÍ).

VYBRAT * OD Souhrnný produkt OBJEDNAT PODLE Částky DESC , Město

V v tomto příkladu, hodnota v poli Množství byly seřazeny v sestupném pořadí a v terénu Město- Vzestupně. Operátor DESC platí pouze pro jeden sloupec, takže v případě potřeby musí být zapsán za každým polem, které se účastní řazení.