Usporiadať podľa syntaxe. Triedenie údajov v SQL (ORDER BY). Zoradiť vybrané údaje

Poznámka:
Všetky články v aktuálnej kategórii SQL tutoriálov používajú príklady a problémy založené na tréningovej databáze.

Podľa prvej normálnej formy relačných databáz by na poradí riadkov v tabuľkách nemalo záležať. Ale v praxi je často potrebné triediť informácie pred ich zobrazením na obrazovke.

Klauzula ORDER BY je zodpovedná za usporiadanie riadkov načítaných v dotaze SQL. Nachádza sa na samom konci žiadosti:

VYBRAŤ<Перечень столбцов>OD<Перечень таблиц>ZORADIŤ PODĽA<Условие сортировки>

Podmienka zoradenia určuje stĺpce, podľa ktorých budú zoradené výsledné riadky tabuľky:

ORDER BY col1, col2

Poradie zoradenia v SQL

K dispozícii sú 2 možnosti triedenia: vzostupné a zostupné. Ak chcete v dotaze uviesť typ zoradenia, za názvom stĺpca uveďte kľúčové slovo ASC (ascending) alebo DESC (descending), ktoré definujú vzostupné alebo zostupné poradie. Predvolený typ je ASC:

ORDER BY col1 -- nasledujúca klauzula bude ekvivalentná s ORDER BY col1 ACS

Je tiež možné zadať odlišné poradie pre rôzne stĺpce:

ORDER BY col1 DESC, col2 ASC

Na konsolidáciu materiálu vyriešte problém vo vzdelávacej databáze:

Potrebujete získať zoznam ID zamestnancov zoradených podľa skupín vo vzostupnom poradí a dátumu prijatia, od najnovších po najstaršie.

SELECT id, Group, Hire_date FROM Zamestnanci ORDER BY Group, Hire_date DESC

Doplňte syntax príkazu SELECT o klauzulu ORDER BY (zvislá čiara znamená, že je potrebné vybrať jednu z možností):

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

  • Dopredu >

Ak vám pomohli materiály z office-menu.ru, podporte projekt, aby som ho mohol ďalej rozvíjať.

Klauzula ORDER BY v Accesse triedi záznamy vrátené dotazom vo vzostupnom alebo zostupnom poradí podľa hodnôt zadaného poľa (polí).

Syntax

VYBRAŤ pole_zoznam
OD tabuľky
KDE podmienka_výberu
[, pole2 ][, ...]]]

príkaz SELECT obsahujúci klauzulu ORDER BY obsahuje nasledujúce prvky:

Poznámky

Klauzula ORDER BY je voliteľná. Mal by sa použiť, keď potrebujete zobraziť údaje v triedenej forme.

Predvolené poradie triedenia je vzostupné (A až Z, 0 až 9). Dva príklady nižšie zobrazujú triedenie mien zamestnancov podľa priezviska.

SELECT Priezvisko, Meno
OD zamestnancov
OBJEDNAŤ PODĽA Priezviska;
SELECT Priezvisko, Meno
OD zamestnancov
OBJEDNAŤ PODĽA Priezviska ASC;

Ak chcete triediť v zostupnom poradí (Z po A, 9 po 0), pridajte rezervované slovo DESC na koniec každého poľa, podľa ktorého chcete záznamy zoradiť. Nižšie uvedený príklad zoraďuje mená zamestnancov v zostupnom poradí podľa platu.

SELECT Priezvisko, Plat
OD zamestnancov
OBJEDNAŤ PODĽA platu DESC, Priezvisko;

Ak zadáte pole, ktoré obsahuje údaje Memo alebo objekty OLE v klauzule ORDER BY, dôjde k chybe. DBMS jadro Microsoft Access nepodporuje triedenie podľa polí tohto typu.

Klauzula ORDER BY je zvyčajne posledným prvkom v príkaze SQL.

Do klauzuly ORDER BY môžete zahrnúť ďalšie polia. Záznamy sa najprv triedia podľa poľa špecifikovaného ako prvého v klauzule ORDER BY. Záznamy s rovnakými hodnotami prvého poľa sa potom zoradia podľa zadaného druhého poľa atď.

Pri získavaní údajov môže byť dôležité získať ich v určitej usporiadanej forme. Triedenie je možné vykonať podľa ľubovoľných polí s akýmkoľvek typom údajov. Toto môže byť vzostupné alebo zostupné zoradenie číselných polí. Pre znakové (textové) polia to môže byť triedenie abecedné poradie, hoci v podstate ide aj o triedenie vzostupne alebo zostupne. Môže sa tiež vykonávať v akomkoľvek smere - od A po Z a naopak od Z po A.

Podstatou procesu triedenia je zredukovať postupnosť na určité poradie. Viac o triedení sa dozviete v článku Algoritmy triedenia. Napríklad triedenie ľubovoľnej číselnej postupnosti vo vzostupnom poradí:

2, 4, 1, 5, 9

výsledkom by mala byť usporiadaná sekvencia:

1, 2, 4, 5, 6

Podobne pri zoraďovaní hodnôt reťazcov vo vzostupnom poradí:

Ivanov Ivan, Petrov Petr, Ivanov Andrej

výsledok by mal byť:

Ivanov Andrej, Ivanov Ivan, Petrov Petrov

Tu sa riadok „Andrey Ivanov“ presunul na začiatok, pretože porovnanie reťazcov sa vykonáva znak po znaku. Oba riadky začínajú rovnakými znakmi „Ivanov“. Keďže symbol „A“ v slove „Andrey“ je v abecede skôr ako symbol „I“ v slove „Ivan“, tento riadok bude umiestnený skôr.

Triedenie v SQL dotaze

Ak chcete vykonať triedenie, musíte do reťazca dotazu pridať príkaz ORDER BY. Po tomto príkaze je uvedené pole, podľa ktorého sa triedenie vykonáva.

Napríklad používame tovar tabuľky tovaru:

č
(Číslo položky)
titul
(Názov)
cena
(cena)
1 mandarínka50
2 Vodný melón120
3 Ananás80
4 Banán40

Údaje sú tu už zoradené podľa stĺpca „num“. Teraz zostavme dotaz, ktorý zobrazí tabuľku s produktmi zoradenými v abecednom poradí:

VYBRAŤ * Z tovaru OBJEDNAŤ PODĽA názvu

VYBRAŤ * Z tovaru – určuje výber všetkých polí z tabuľky tovaru;

ORDER BY – príkaz na triedenie;

nadpis – stĺpec, podľa ktorého sa bude triedenie vykonávať.

Výsledok vykonania takejto žiadosti je nasledujúci:

č titul cena
3 Ananás80
2 Vodný melón120
4 Banán40
1 mandarínka50

Môžete tiež zoradiť podľa ktoréhokoľvek z polí tabuľky.

Smer triedenia

Príkaz ORDER BY štandardne zoraďuje vzostupne. Ak chcete manuálne ovládať smer triedenia, použite kľúčové slovo ASC (vzostupne) alebo DESC (zostupne) za názvom stĺpca. Ak teda chcete zobraziť našu tabuľku v zostupnom poradí cien, musíte sa opýtať takto:

VYBRAŤ * Z tovaru OBJEDNAŤ PODĽA CENY OPI

Zoradiť podľa vzostupnej ceny bude:

VYBRAŤ * Z tovaru OBJEDNAŤ PODĽA ceny ASC

Triedenie podľa viacerých polí

SQL umožňuje triedenie podľa viacerých polí naraz. Aby ste to dosiahli, po príkaze ORDER BY sú povinné polia oddelené čiarkami. Poradie výsledku dotazu bude nakonfigurované v rovnakom poradí, v akom sú špecifikované polia triedenia.

stĺpec1 stĺpec2 stĺpec 3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Zoraďme tabuľku podľa nasledujúcich pravidiel:

VYBRAŤ * Z mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

Tie. prvý stĺpec je vzostupný, druhý zostupný, tretí je opäť vzostupný. Dotaz zoradí riadky podľa prvého stĺpca a potom, bez porušenia prvého pravidla, podľa druhého stĺpca. Potom tiež bez porušenia existujúcich pravidiel podľa tretieho. Výsledkom bude takýto súbor údajov:

stĺpec1 stĺpec2 stĺpec 3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Poradie príkazu ORDER BY v dotaze

Triedenie riadkov sa najčastejšie vykonáva spolu s podmienkou výberu údajov. Príkaz ORDER BY sa umiestni za podmienku výberu WHERE. Napríklad vyberáme produkty s cenou nižšou ako 100 rubľov, zoradené podľa názvu v abecednom poradí:

VYBRAŤ * Z tovaru, KDE cena 100 OBJEDNAŤ PODĽA ceny ASC

Často je potrebné zobraziť výsledok dotazu v určitom poradí, napríklad v abecednom poradí. Na tento účel má DBMS špeciálnu funkciu v jazyku SQL - triedenie. V tomto prípade si programátor môže vybrať, ktoré polia a v akom poradí sa vyskytnú, aby sa dosiahol požadovaný výsledok, bez použitia serióznych programátorských zručností.

Čo je triedenie v databáze?

Práca s databázami je neustále spojená s veľkým množstvom informácií, ktoré je potrebné organizovať. V súčasnosti existuje množstvo DBMS so širokou škálou funkcií, z ktorých najpopulárnejšie sú Oracle a MS SQL. Triedenie informácií, ako jeden z hlavných postupov pri práci s databázami, zabezpečuje špeciálna vstavaná funkcia v každej z nich.

Hodnotiace údaje vám umožňujú zjednodušiť proces vyhľadávania av niektorých prípadoch pomáhajú vyriešiť určité problémy alebo optimalizovať fungovanie programu. Triedenie SQL sa vykonáva samostatne vybratým poľom av prípade potreby, ak sú v prvkoch tohto poľa identické hodnoty, môžete zadať ďalšie parametre, ktoré určujú umiestnenie riadkov.

Príkaz na triedenie

SQL triedenie v databáze je zabezpečené pomocou funkcie ORDER BY. Takže pri výstupe informácií z databázy, po zadaní stĺpcov a tabuliek, z ktorých sa bude čítanie vykonávať, musí dotaz zadať príkaz na triedenie a potom určiť pole alebo polia, podľa ktorých sa bude triedenie vykonávať.

Ak napríklad potrebujete získať údaje z polí Meno a Vek z tabuľky Ľudia a zároveň zobraziť výsledok v abecednom poradí podľa stĺpca Názov, pomôže vám nasledujúci dotaz: VYBERTE Meno, Vek FROM Osoby ORDER PODĽA mena.

Ako nastaviť poradie zoradenia?

Moderné podmienky kladú programátorom rôzne úlohy a niekedy je potrebné vopred určiť, v akom poradí sa výsledok zobrazí - v zostupnom alebo vzostupnom poradí, v abecednom poradí alebo v opačnom poradí? A aby to bolo možné v SQL, poradie triedenia je určené pridaním kľúčového slova do dotazu. Po výbere polí a tabuliek, z ktorých sa získajú požadované informácie, musíte pridať ORDER BY a potom zadať názov stĺpca, podľa ktorého chcete triediť.

Ak chcete získať opačné poradie, musíte za názvom zadať parameter DESC. Ak je potrebné zoradiť prvky podľa dvoch alebo viacerých kritérií, stĺpce sú oddelené čiarkami a prioritu v poradí bude mať pole, ktoré je v zozname prvé. Je potrebné poznamenať, že parameter DESC umožňuje usporiadanie prvkov v opačnom poradí iba v jednom poli, za názvom ktorého je toto kľúčové slovo uvedené, takže ak je to potrebné, musí byť uvedené vo všetkých vybraných stĺpcoch.

Alternatívne metódy triedenia

Ak nie je možné použiť vstavanú funkciu triedenia SQL, môžete napísať niektorý zo známych algoritmov. Ak potrebujete dosiahnuť najrýchlejšie zoradenie prvkov, mali by ste použiť metódu založenú na rozdelení poľa prvkov na polovicu. Veľmi obľúbené sú aj metódy hodnotenia „bubliniek“, v ktorých sú dve susedné prvky zameniť miesta v prípade nesprávneho umiestnenia, „pyramídové triedenie“, ktoré pošle najväčší prvok na koniec zoznamu a „zoradenie vložením“, ktoré vopred určí umiestnenie každého prvku v poradí.

Vlastným písaním algoritmu sa výrazne nezvýši rýchlosť triedenia, prispeje to však k rozvoju programovacích zručností a tiež vám umožní upraviť proces prispôsobením schémy hodnotenia konkrétnej databáze, aby ste zvýšili efektivitu programu.

V budúcnosti možno budeme musieť triediť výber – abecedne pre text alebo vzostupne/zostupne pre číselné hodnoty. Na takéto účely v SQL Existuje špeciálny operátor ZORADIŤ PODĽA .

1. Triedenie vybraných údajov.

Zoraďme si celú našu tabuľku podľa množstva predaja produktov, konkrétne podľa stĺpca Suma.

VYBRAŤ * OD Sumproduktu OBJEDNAŤ PODĽA MNOŽSTVA

Vidíme, že dotaz zoradil záznamy v poli vzostupne Suma. Je bezpodmienečne nutné dodržať postupnosť operátorov, t.j. operátor ZORADIŤ PODĽA by mal ísť na úplný koniec žiadosti. V opačnom prípade sa zobrazí chybové hlásenie.

Tiež vlastnosť operátora ZORADIŤ PODĽA je, že dokáže zoradiť údaje podľa poľa, ktoré sme v dotaze nevybrali, teda stačí, že v databáze vôbec je.

2. Triedenie podľa viacerých polí.

Teraz zoraďme náš príklad navyše o jedno pole. Nech je to pole Mesto, ktorý zobrazuje miesto predaja produktov.

VYBRAŤ * OD Sumproduct OBJEDNAJTE PODĽA MNOŽSTVA, MESTA

Poradie zoradenia bude závisieť od poradia polí v požiadavke. To znamená, že v našom prípade budú najskôr údaje zoradené podľa stĺpcov Suma a potom podľa Mesto.

3. Smer triedenia.

Aj keď predvolený operátor ZORADIŤ PODĽA zoradí vzostupne, môžeme zadať aj zoradenie hodnôt v zostupnom poradí. Aby sme to dosiahli, na koniec každého poľa vložíme operátor DESC (čo je skratka pre slovo ZOSTUPNE).

VYBRAŤ * OD Sumproduct OBJEDNAJTE PODĽA sumy DESC , Mesto

IN v tomto príklade, hodnota v poli Suma boli zoradené v zostupnom poradí a v teréne Mesto- Vzostupne. Operátor DESC platí len pre jeden stĺpec, takže v prípade potreby ho treba napísať za každé pole, ktoré sa zúčastňuje triedenia.