2. díl o SQL - začínáme s příkazem Select

V dnešním pokračování seriálu se podíváme na typy systémů, kde můžete SQL najít a začneme s příkazem Select.
V minulém díle jsme se seznámili se stručnou historií SQL, pojďme se dnes spolu podívat, v jakých typech systémů se s tímto jazykem můžeme setkat, a hlavně nakousněme jeden jeho nejdůležitějších příkazů - příkaz SELECT.

Nejčastěji se s jazykem SQL můžeme setkat u celé řady relačních databázových serverů postavených na architektuře client/server. Zjednodušeně řečeno, v případě implementace na straně serveru (nemusí tomu tak být vždy, jak si ukážeme za chvíli u tzv. desktopových databází) jde o jakýsi nezbytně nutný základ. Prvků jazyka se pak využívá prostřednictvím klientských aplikací (případně uložených procedur a triggerů na serveru), které požadovanou operaci transformují do SQL a pošlou jej k provedení serveru. Následně aplikace obdrží odpověď, kterou zobrazí. S každým databázovým serverem je dodáván "jednoduchý" dotazovací klient. Pomocí tohoto nástroje uživatel může interaktivně zadávat jednotlivé SQL příkazy, případně celé SQL dávky. Dotazovací klient žádným způsobem vlastní SQL příkaz neprovádí, jeho zpracování je úlohou pouze serveru.

Minule jsme si jazyk SQL charakterizovali jako neprocedurální. To mimo jiné znamená neexistenci celé řady konstruktů známých z vyšších programovacích jazyků, jako je cyklus nebo větvení. Většina implementací SQL disponuje tzv. procedurálním rozšířením (například PL/SQL od společnosti Oracle). Nové vlastnosti doplňují sílu čistého SQL právě o zmiňované možnosti.

Desktopové databáze, které nepracují v architektuře client/server, mají také zabudovány (až na několik málo výjimek, například systém REDAP) některé prvky jazyka SQL, často mírně odlišné od norem. Rozdíl oproti předchozímu případu je zejména ten, že příkazy jsou vykonávány přímo na klientovi. Pro běh klientské aplikace vytvořené v systému této kategorie je zpravidla nutná přítomnost samotného vývojového prostředí, případně runtime modulů.

Konstrukty SQL je také možné použít jako součást vyššího programovacího jazyka (např. C/C++). Příkazy se pak stávají součástí zdrojového kódu aplikace, způsob jejich vykonávání je však závislý na konkrétním vývojovém nástroji - může být ve zdrojovém tvaru zaslán k vykonání serveru či proveden na straně klienta. Hovoříme o tzv. hostitelském přístupu. Pro některé vývojové nástroje, zejména pak vizuální (např. DELPHI), zůstává jazyk SQL pro vývojáře v pozadí - požadovaná operace, která je zapsána vlastními příkazy vývojového nástroje, je do SQL transformována. Důležité je, že bez zásahu vývojáře - ten mnohdy nemusí mít o SQL ani ponětí.

Tak, a nyní, když víme, kde se SQL používá, můžeme se vrhnout na první příkaz tohoto jazyka. Je jím SELECT, který má za úkol realizovat uživatelské dotazy nad daty. Zjednodušená syntaxe tohoto příkazu má následující podobu:

SELECT [DISTINCT] položky FROM jméno_tabulky [WHERE podmínka_výběru] [GROUP BY položky, [HAVING podmínka_agregace]] [ORDER BY položky]

Pro bližší vysvětlení významu jednotlivých možností tohoto příkazu uvažujme následující jednoduchou tabulku osoby:

Jméno příjmení rodné_číslo datum
Karel Smolný 580815/8777 3.12.1992
Marek Jurda 650404/8956 2.11.1992
Martin Pavlásek 720303/5511 28.3.1990
Pavel Jirásek 551212/7877 26.3.1989
Pavla Nováková 785308/4569 28.6.1997
Pavla Nováková 555111/3042 28.5.1990
Romana Bourková 745226/8820 3.5.1995

Pod položkami (atributy) si můžeme zjednodušeně představit sloupce tabulky, případně funkce. Tedy v případě naší tabulky jde o položky jméno, příjmení, rodné_číslo a datum (nástupu do zaměstnání). Poznamenejme, že na pořadí jednotlivých položek v tabulce nezáleží. DISTINCT zařídí, že stejné řádky vybereme pouze jednou. Klíčové slovo FROM nám říká, nad jakou tabulkou má být dotaz proveden, "odkud" budou data čerpána. Klauzule WHERE nám umožňuje omezit výběr řádků podle požadované podmínky. O GROUP BY a HAVING se zatím zmíníme pouze ve smyslu, že se používají pro agregační funkce a blíže se této problematice budeme věnovat v příštím díle. Konečně, pomocí ORDER BY můžeme určit setřídění výsledku dotazu. Názornější snad budou následující jednoduché příklady.

SELECT jméno,příjmení,rodné_číslo,datum FROM osoby

dává výsledek ve tvaru (formátování výstupu je závislé na použitém nástroji):

jméno příjmení rodné_číslo datum
Karel Smolný 580815/8777 3.12.1992
Marek Jurda 650404/8956 2.11.1992
Martin Pavlásek 720303/5511 28.3.1990
Pavel Jirásek 551212/7877 26.3.1989
Pavla Nováková 785308/4569 28.6.1997
Pavla Nováková 555111/3042 28.5.1990
Romana Bourková 745226/8820 3.5.1995

SELECT jméno,příjmení FROM osoby

dává výsledek:

jméno příjmení
Karel Smolný
Marek Jurda
Martin Pavlásek
Pavel Jirásek
Pavla Nováková
Pavla Nováková
Romana Bourková

SELECT DISTINCT jméno,příjmení FROM osoby

dává výsledek (všimněte si, že Pavla Nováková je zobrazena pouze jednou):

jméno příjmení
Karel Smolný
Marek Jurda
Martin Pavlásek
Pavel Jirásek
Pavla Nováková
Romana Bourková

SELECT jméno,příjmení,rodné_číslo,datum FROM osoby WHERE datum>31.11.1992

dává výsledek ve tvaru (jsou tedy zobrazeny pouze záznamy odpovídající podmínce):

jméno příjmení rodné_číslo datum
Karel Smolný 580815/8777 3.12.1992
Romana Bourková 745226/8820 3.5.1995

SELECT jméno,příjmení FROM osoby ORDER BY příjmení

dává setříděný výsledek (podle příjmení):

jméno příjmení
Romana Bourková
Pavel Jirásek
Marek Jurda
Pavla Nováková
Pavla Nováková
Martin Pavlásek
Karel Smolný

Na několika málo jednoduchých příkladech nelze pochopitelně ukázat (a ani to není cílem tohoto seriálu) všechny možnosti příkazu SELECT, k některým z nich se však vrátíme v příštích dílech. Především pak v souvislosti s konkrétními problémy pro existující systémy. Příště se podrobněji podíváme na agregační funkce. Zmíníme se také o tom, jak můžeme provést dotaz nad více tabulkami, stranou tedy nezůstanou ani pojmy UNION a JOIN.

Související články:
Víte, co je SQL? Ne? Nevadí - dnes začínáme!

Váš názor Další článek: Jaké soubory se zapisují při instalaci Microsoft Faxu do Windows 98?

Témata článku: Software, Programování, Příkaz, Martin, Nutná přítomnost, Martini, Jednotlivý díl, Díl, Order, Union, Jednoduchý tvar, Následující řádek, From, Nutný základ, SQL, Jednotlivé položky, Marko, Select, Důležitý sloupec, Jednotlivé prvky, Jednoduchý nástroj, Trigger, Zjednodušený příklad


Určitě si přečtěte

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

** Internet je plný malwaru, to už dnes ví každý ** Víte ale, že lze útočit třeba i na Bluetooth? ** Navštívil jsem hackery z brněnského FITu

Jakub Čížek | 1

Čtyřicet procent je moc. Spalovací motory nedokážou splnit požadavek EU na snížení emisí

Čtyřicet procent je moc. Spalovací motory nedokážou splnit požadavek EU na snížení emisí

** EP nařídil automobilkám snížit o 40 % emise CO2 ** EU chce zvýšit podíl elektromobilů ** Výrobci hrozí ztrátou pracovních míst

Karel Kilián | 254

Musk pošle lidi na oblet Měsíce. Japonský podnikatel Maezawa vezme na cestu až osm umělců

Musk pošle lidi na oblet Měsíce. Japonský podnikatel Maezawa vezme na cestu až osm umělců

** SpaceX chce nejdříve v roce 2023 vyslat lidi na oblet Měsíce ** Hlavním pasažérem bude japonský podnikatel Jusaku Maezawa, který vezme na cestu až 8 umělců ** Pětidenní cesta proběhne v chystané lodi BFS

Petr Kubala | 14


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku