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í, Jednotlivé položky, Díl, Zjednodušený příklad, Order, Jednotlivé prvky, Příkaz, Jednoduchý nástroj, From, Marko, SQL, Trigger, Martini, Martin, Jednotlivý díl, Union, Důležitý sloupec, Select, Následující řádek, Jednoduchý tvar

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


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší