002 hlavni.crop - vse.cznb.vse.cz/~simunek/files/kkp_sql.pdfpatrné, zabývá se zejména jazykem...

249

Upload: others

Post on 11-Jan-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 2: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 3: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 4: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 5: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 6: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 7: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 8: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 9: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 10: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

10 P EDMLUVA __________________________________________________

0. P edmluva

P EDMLUVADostáváte do rukou publikaci, která si klade za cíl seznámit široký okruh tená se základy práce s databázemi v jejich sou asnénej ast jší form – databázemi rela ními. Jak je i z názvu této knihy patrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z rela ních databází požadovaná data. Zárove jej používáme pro p idávání dat, jejich aktualizaci nebo mazání. SQL je základním prost edkem používaným od vytvo ení databáze p es její napln ní daty až po vlastní práci s daty. Krom samotného jazyka SQL zde naleznete i výklad základních pojm používaných v rela níchdatabázích (tabulka, sloupce, klí apod.) a také velmi hrubý nástin rela ní algebry, na které jsou rela ní databáze založeny.

P i len ní knížky do kapitol i b hem psaní kapitol samotných ne-byla zám rn dodržena posloupnost „vytvo ení databáze – vytvo enítabulek – napln ní tabulek – získávání a zm na dat“. Pouze malá skupina uživatel bude vytvá et databáze a jejich strukturu nebo data-báze napl ovat. Naproti tomu všichni budou z databáze data získávat, zejména pomocí p íkazu . Zárove lze o ekávat, že i úplní za áte níci budou mít k dispozici databázi, na které si mohou jedno-duché dotazy vyzkoušet. Není tedy nutné hned zpo átku tená e zat -žovat pom rn náro nými postupy tvorby databáze a jednotlivých tabulek. V úvodních kapitolách se proto zam íme pouze na základní pojmy a formy p íkaz , které umožní i úplným za áte ník m získat požadovaná data z databází, vybrat z nich zajímavou ást a uspo ádatje podle jednoduchých kritérií. Velmi užite nou pom ckou pro tvorbu vlastních SQL p íkaz je samostatná kapitola „SQL v p íkladech“. Ta obsahuje velké množství ukázek SQL p íkaz použitelných v r znýchtypových situacích. Budoucím tv rc m databází a zkušen jším uživa-tel m je v nována kapitola pojednávající o základech návrhu datové základny, její optimalizaci a optimalizaci zadávaných SQL p íkaz .Záv r knížky je vytvo en ve form referen ní p íru ky jazyka SQL a

Page 11: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________________ P EDMLUVA 11

obsahuje p ehled datových typ , operátor , funkcí i SQL p íkaz . Všeje dopln no podrobným komentá em.

Jako základ pro syntaxi jazyka SQL byla vzata norma SQL-92. V reálném sv t však nenalezneme její naprosto p esnouimplementaci, a proto byly vybrány produkty, se kterými se m žemv našich podmínkách setkat, a jejich odlišnosti jsou vždy uvedeny ve zvláštním odstavci za vlastním výkladem p íkazu, funkce apod.se o systém Oracle firmy Oracle Corporation – zástupce velkých databázových systém , který má historii stejn dlouhou jako SQL a rela ní databáze obecn , a dále o systém Microsoft Jet DatabaseEngine (zkratka MS JDBE). Na tomto systému jsou založeny aplikacjako MS Access a MS Visual Basic. Se stejným systémem se setkají iprogramáto i využívající ve svých aplikacích Microsoft Data AcceObjects (DAO). Význam MS JDBE je tedy zejména v jehoroz

e

Jedná

e

ss

ší enosti.

daného databázového systému.

Výb r t chto databázových systém byl proveden s cílem upozornit na r zné modifikace v implementaci standardu SQL. Za p edpokladuznalosti základní syntaxe p íkazu SQL a odlišností zde uvedených m žeme odvodit syntaxi použitelnou i na jiných databázových systémech. Zárove je nutné zd raznit, že tato publikace si v žádnémp ípad neklade za cíl nahradit p vodní dokumentaci ke zde uvád ným databázovým systém m. Cílem je seznámit tená es vlastním jazykem SQL, aby byl schopen tvorby SQL p íkaza jednoduchých zm n struktury datové základny. Systémový správce databáze nebo uživatel, který již této úrovn znalosti dosáhl, musípoužít originální dokumentaci, aby poznal detailní strukturu a parametry

Doufám, že tato publikace vám pom že seznámit se s jazykem SQL na požadované úrovni a bude dále sloužit jako referen ní p íru kavšem, kdo principy tohoto jazyka již zvládli.

Autor

Page 12: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

12 P EDMLUVA __________________________________________________

ny

Typografické konvence P i psaní této publikace byly dodržovány konvence, které usnadní pochopení textu. Veškeré texty, které se zadávají jako vstupy do po íta e nebo jsou naopak výstupy, jsou pro odlišení znázorn

. Názvy program a firem jsou vyzna eny kurzívou. V referen ní ásti knihy je pro vysv tlení každého p íkazudodržena posloupnost název – syntaxe – popis – p íklad – specifika – viz též. Specifika popisují odlišnosti p íkazu v prost edí MS Access nebo

racle. P i popisu syntaxe p íkaz jsou dále použity tyto znaky: O

Popis používaných symbol v definici syntaxe Symbol Význam

[ ] nepovinná ást{ } povinná volba jedné z uvedených možností

| odd lení variant, mezi kterými je možné vybírat < > parametr, za který se dosazuje konkrétní hodnota … možnost opakování ’ ozna ení konstant typu et zec znak ( )

Použitá literatura Chud jová E., Ing.: SQL Strukturovaný dotazovací jazyk a jeho implementace v databázovém systému Progress. VŠE 1993 Gregor J., Chlapek D., Chud jová E., Chvalovský V.: Datová základna. VŠE 1993 Oracle7 Server SQL Reference Manual – originální dokumentace k produktu Oracle Microsoft Access pro Windows 95 – originální dokumentace k produktu MS Access

Page 13: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

11 Úvod do práce s databázemi

Kapitola 1

ÚVOD DO PRÁCE S DATABÁZEMI

1.1 Obecn o práci s databází ........................................................141.1.1 Data a databáze....................................................141.1.2 Nástroje pro práci s daty......................................151.1.3 Databázový systém..............................................15

1.2 Data a jejich uložení ..................................................................171.2.1 Databázové tabulky .............................................171.2.2 Datové typy .........................................................18

1.3 Vazby mezi daty v tabulkách ....................................................201.3.1 Identifikátory ádk .............................................211.3.2 Primární klí ........................................................221.3.3 Cizí klí ...............................................................221.3.4 Integrita dat .........................................................23

1.4 Další informace uložené v databázi .........................................241.4.1 Indexy..................................................................241.4.2 Další pomocné informace v databázi...................25

Page 14: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 15: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________________ OBECN O PRÁCI S DATABÁZÍ 15

rychleji vyhledat požadované informace nebo provád t r zné sumari-zace a statistiky. �1.1.1.1 Datová základnaSoubor všech uživatelských dat uložených v databázi se nazývá dato-vá základna.

Poznámkaþ V této publikaci nebudeme brát v úvahu rozdíl mezi daty a infor-

macemi. Budeme p edpokládat, že veškerá data jsou pro nás záro-ve informacemi, protože je dokážeme interpretovat a p i adit jimsmysl.

1.1.2 Nástroje pro práci s daty Krom roz len ní do po ada máme k dispozici ješt nástroje pro efektivní vyhledávání požadovaných informací. Mezi tyto nástrojepat í štítky s po áte ními písmeny na každé zásuvce. Potom jsmeschopni daleko rychleji nalézt požadovanou složku, aniž bychommuseli procházet celou sk í . Na data v elektronické podob žádné štítky lepit nemusíme, ale na druhou stranu mezi ob ma zp sobyuložení dat z stává ada paralel.

1.1.3 Databázový systémDatabázový systém = data + nástroje pro práci s daty

Slou ením dat a nástroj , pomocí kterých tato data vytvá íme, aktuali-zujeme, vyhledáváme a rušíme, získáme databázový systém.Každý databázový systém musí obsahovat nástroje pro: þ vytvo ení, vyhledání, aktualizaci a rušení uživatelských dat, þ definici struktury dat, þ definici a zajišt ní integrity dat ( dále), þ a zajišt ní fyzické a logické nezávislosti dat. A p ípadn nástroje pro: þ podporu práce více uživatel (zejména definici transakcí

a p ístupových práv), þ zálohování dat.

Page 16: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

16 ÚVOD DO PRÁCE S DATABÁZEMI ___________________________________

1.1.3.1 Fyzická nezávislost dat � Fyzická nezávislost dat znamená odd lení zp sobu fyzického uložení

dat (nap íklad na disku) od zp sobu práce s nimi. Chceme-li pracovat s tabulkou zam stnanc , odkážeme se na ni pomocí jejího názvu (nap . ) a nemusíme se zabývat tím, kde je uložena na disku po í-ta e a jakým zp sobem jsou fyzicky zaznamenána data v ní uložená.

1.1.3.2 Logická nezávislost dat O logické nezávislosti dat hovo íme tehdy, když zm na logické struk-tury dat (její rozší ení o další tabulky nebo sloupce v existující tabul-ce) nevyžaduje úpravu již existujících program nebo dotaz pracují-cích s daty.

Page 17: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ DATA A JEJICH ULOŽENÍ 17

1.2 Data a jejich uložení �

1.2.1 Databázové tabulkyV textovém editoru pracujeme s textovými soubory, v tabulkovémkalkulátoru s tabulkovými listy a v databázovém prost edí jsou to hlavn databázové tabulky. Databázová tabulka je velmi podobná tabulce v tabulkovém kalkulátoru. Jedná se však o tu nejjednoduššíformu tabulky s jedním titulkovým ádkem a bez jakýchkoliv titulku jednotlivých ádk . Všechny ostatní hodnoty v tabulce jsou uživatel-ská data. Ukázku databázové tabulky, která obsahuje údaje o n kolikaam stnancích fiktivní firmy, vidíme níže. z

P íjmení Jméno Datum narození Výše platu v KNovák Adam 15. 3. 1956 6.000Polesný František 25. 11. 1948 7.500Drtina Robert 1. 4. 1962 8.000Veselá Anna 4. 5. 1960 7.000Smejkal Otakar 19. 8. 1959 8.000

Základní prvky tabulky sloupecádek

hodnota

1.2.1.2 Sloupce tabulkyTato velmi jednoduchá tabulka obsahuje ty i sloupce, kterým se také m že íkat atributy. Jsou to postupn P íjmení, Jméno, Datum naro-zení a Výše platu. Každá tabulka musí obsahovat alespo jeden slou-pec.

1.2.1.3 ádky tabulky V tabulce vidíme celkem p t ádk obsahujících data. ádky m žemenazývat také záznamy. V tabulce bývá obvykle mnoho ádk . M žemese setkat s tabulkami, které obsahují až miliony ádk , a na druhé

Page 18: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

18 ÚVOD DO PRÁCE S DATABÁZEMI ___________________________________

stran jsou tabulky, ve kterých není ádek žádný – jsou prázdné. Pouze celé ádky m žeme do tabulky p idávat nebo z ní mazat. Výsledkemnašich dotaz bude op t p evážn ádek nebo více ádk .�

1.2.1.4 Hodnoty – uživatelská data V pr se íku každého ádku a sloupce je hodnota zadaná uživatelem.Tato hodnota reprezentuje ur itý vztah mezi ádkem a sloupcem.V pr se íku ádku popisujícího zam stnance Nováka se sloupcemPlat nalezneme výši platu pana Nováka apod.

ádek tabulky je potom skupina hodnot, která obsahuje stejný po-et prvk jako je po et sloupc v tabulce. První ádek naší tabulky

tedy je , další atd.

1.2.2 Datové typyJiž z naší velmi jednoduché tabulky vidíme, že data obsažená v r zných sloupcích mohou být r zného druhu. Jsou zde hodnoty ve sloupci Datum narození, které jsou vždy zadány jako datum a jakos datumem s nimi m žeme pracovat – m žeme zjistit den v týdnu, dvhodnoty m žeme od sebe ode íst a získáme po et rok , m síc a dní mezi nimi apod. Dále jsou zde hodnoty ve sloupci Výše platu, sekterými m žeme pracovat jako s ísly – m žeme je s ítat, od ítat,násobit apod. Existují však i další druhy hodnot, které se mohouv tabulce vyskytovat.

Odborn se t mto druh m hodnot íká datové typy. Mezi základní datové typy pat í Text, Datum, íslo a logická hodnota Ano/Ne.S t mito datovými typy jsme se mohli setkat již v tabulkovém kalkulá-toru. Pouze jsme explicitn nemuseli ur ovat typ pro každou vkláda-nou hodnotu. Všimn me si však, že narozdíl od tabulkového kalkulá-toru se v jednom sloupci mohou vyskytovat pouze hodnoty stejnéhodatového typu. Tento fakt vyplývá i z naší definice databázové tabul-ky, která m že mít titulkový pouze první ádek. Potom je z ejmé, že nemá smysl požadovat nap . vložení hodnoty typu Datum do sloupce Výše platu. Z t chto d vod hovo íme o datovém typu celého sloupce (nebo atributu) tabulky.

Page 19: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ DATA A JEJICH ULOŽENÍ 19

�Základní datové typy Znak (text)

Jedná se o základní datový typ. Sloupec tohoto typu m že obsaho-vat libovolné znaky a to jak písmena, tak i ísla a n které další zna-ky jako árky, poml ky st edníky, závorky atd. Používá se zejménapro názvy (jako P íjmení a Jméno) a dále pro uložení všech hod-not, které není možné za adit do n kterého dalšího datového typu.

ísloíselný datový typ m že obsahovat pouze íselné hodnoty ur itého

rozsahu. Rozlišujeme n kolik druh íselných datových typ . Mezi základní rozlišení pat í, jestli se jedná o celé nebo desetinné íslo.U celých ísel rozlišujeme jejich rozsah – nap . od 0 do 255, od -32768 do 32767 apod. U desetinných pak maximální po et platných íslic celkem a za desetinnou árkou. íselné rozsahy jednotlivých

datových typ závisí na používaném databázovém systému.Datum

Slouží pro uchování datumu v libovolném formátu (den-m síc-rok,DD/MM/RRRR atp.) Ve v tšin databázových systém bývá do da-tumu zahrnut i as.

Ano/NeTento speciální datový typ slouží pro uchování logických hodnot

(pravda) a (nepravda). U každého zam stnance bychomnap íklad mohli zaznamenávat, jestli je, nebo není lenem odbor .

V jednotlivých databázových prost edích mohou být použity odlišné názvy pro jednotlivé datové typy. Více se o datových typech dozvímev referen ní ásti této publikace, v kapitole „Datové typy“.

Page 20: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

20 ÚVOD DO PRÁCE S DATABÁZEMI ___________________________________

1.3 Vazby mezi daty v tabulkách �

Zatím jsme se v novali pouze jediné tabulce. V databázi však m žebýt (a obvykle i je) tabulek více. Hlavní význam databází spo ívápráv ve v tším po tu vzájemn provázaných tabulek. P edstavme si nyní, že naše firma má n kolik odd lení, jejichž p ehled je uveden

následující tabulce: v

íslo odd lení Název odd lení1 Obchodní2 Ú tárna3 Reklamní

Vra me se k naší jednoduché tabulce zam stnanc . Pravd podobnbychom cht li v d t, do kterého odd lení každý z t chto zam stnancpat í. Musíme proto p idat další sloupec, který bude obsahovat íslodd lení:o

P íjmení Jméno D. narození Výše platu . odd leníNovák Jan 15. 3. 1956 6.000 1Polesný František 25. 11. 1948 7.500 3Drtina Robert 1. 4. 1962 8.000 3Veselá Anna 4. 5. 1960 7.000 2Smejkal Otakar 19. 8. 1959 8.000 1

Nebudeme se nyní zabývat zp sobem, kterým bychom p idali nový sloupec do tabulky v databázi a p ejd me rovnou k výsledné podobtabulky zam stnanc – u každého zam stnance je uvedeno i íslo jehoodd lení.

Pro jsme použili ísla odd lení místo jejich názv ? P edstavme si, že by se z n jakých d vod název reklamního odd lení zm nil na Marketing. P i zp sobu, který jsme zvolili, sta í opravit název odd -lení na jediném míst v tabulce odd lení. Kdybychom m li u každého zam stnance uveden název odd lení, museli bychom zm nit název odd lení jak v tabulce odd lení, tak i v tabulce zam stnanc . Museli bychom totiž provést zm nu názvu odd lení z Reklamní na Marke-ting u každého zam stnance, který do tohoto odd lení pat í. V našem

Page 21: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ VAZBY MEZI DATY V TABULKÁCH 21

p ípad to jsou pouze dva – Polesný a Drtina, ale v reálné situaci to mohou desítky a stovky záznam . Z tohoto d vodu se pro popis vzta-hu mezi tabulkami používají tzv. identifikátory. �

1.3.1 Identifikátory ádkÚkolem identifikátoru je jednozna n identifikovat jeden ádekv tabulce. Identifikátor musí být tedy v rámci jedné tabulky jedine ný– nesmí existovat dva ádky se stejnou hodnotou identifikátoru.

1.3.1.1 íselné identifikátory Identifikátorem bývá v tšinou íslo, u kterého máme jistotu, že se nikdy nezm ní. Nap íklad u osob to bývá jejich rodné íslo, íslo pasu nebo íslo ob anského pr kazu.

Pokud bychom použili hodnotu, která se m že m nit, museli by-chom p i každé její zm n nalézt v datech všechna místa, kde se tato hodnota použila jako identifikátor a nahradit ji hodnotou novou. Je z ejmé, že to je innost pracná a velice náchylná na zanesení chyb do datové základny. Proto je vhodné volit jako identifikátory takové hodnoty, u kterých máme relativní jistotu, že k jejich zm n nedojde.

D vodem pro použití ísel místo textových názv bývá úspora mís-ta a následn i zvýšení rychlosti zpracování. Název odd lení totiž m že být i Odd lení materiáln -technického zásobování a ten zabe-re rozhodn více místa než íselné ozna ení odd lení – nap . 05.

Kdybychom používali názvy odd lení v tabulce zam stnanc , byl by u každého zam stnance pat ícího do tohoto odd lení tento dlouhý název. Podle po tu zam stnanc v odd lení bychom m li celý název uložen v databázi desetkrát nebo i stokrát. Rozdíl mezi místem zabra-ným názvem a íslem se potom násobí po tem zam stnancv odd lení. V sou asné dob p estává být úspora místa kritickýmfaktorem, ale p esto není rozumné místem plýtvat. Rozhodn m žemepoužitím ísel místo názv výrazn zrychlit pozd jší zpracování na-šich dotaz . P i vyhledávání všech zam stnanc pat ících do ur itéhoodd lení nemusí být porovnávány velmi dlouhé názvy, ale sta í po-rovnávat ísla. A to je výrazn rychlejší na jakémkoliv po íta i.

Page 22: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

22 ÚVOD DO PRÁCE S DATABÁZEMI ___________________________________

1.3.1.2 Složené identifikátory� V n kterých p ípadech nesta í k jednozna né identifikaci ádku pouze

jedna hodnota. Abychom p esn identifikovali daný ádek musímeznát hodnot více. V t chto p ípadech hovo íme o složených identifiká-torech nebo o složených klí ích.

P íkladem existence složeného klí e je tabulka Vyplaty obsahujícívýplaty všech zam stnanc za každý m síc. Každý m síc je vyplacenotolik výplat, kolik je tou dobou zam stnanc ve firm . Každý zam st-nanec dostává svoji výplatu každý m síc po dobu trvání pracovního pom ru. Známe-li m síc výplaty, musíme vybírat mezi více výplatami,které byly tento m síc vyplaceny. Známe-li zam stnance, musíme op tvybírat tentokrát mezi více m síci, kdy výplatu dostal. Pouze v p ípad , že známe zam stnance i m síc výplaty, m žeme jednozna -n ur it, o kterou výplatu se jedná, a p ípadn její výši. Dvojice

bude tvo it složený identifikátor v tabulce výplat.

1.3.2 Primární klíPrimární klí je speciálním p ípadem identifikátoru ádku. Kromvlastnosti, že jednozna n identifikuje daný ádek, má zárove mini-mální délku. Složeným identifikátorem ádku z p edchozího p íkladuby mohla být i trojice , pro-tože by také jednozna n ur ovala každý ádek. P esto se nejedná o primární klí , protože výši výplaty m žeme vypustit a stále bude dvojice jednozna n identifikovat každý ádek. Tato dvojice je zárove i primárním klí em v tabulce výplat,

protože již nem žeme vypustit ani jeden z obou sloupc .

1.3.3 Cizí klíPrimární klí e se používají v dalších tabulkách pro ur ení vazeb mezitabulkami. U každé výplaty v tabulce výplat musíme ur it, kterémuzam stnanci byla vyplacena. V tabulce zam stnanc podobn ur uje-me, do kterého odd lení zam stnanec pat í. Jako odkaz použijemev tabulce výplat rodné íslo zam stnance a v tabulce zam stnancíslo odd lení. V obou p ípadech se jedná o primární klí e

v odkazovaných tabulkách, protože práv u primárních klí máme

Page 23: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ VAZBY MEZI DATY V TABULKÁCH 23

jistotu, že jednozna n identifikují jeden ádek v odkazované tabulce. Použití primárního klí e cizí tabulky pro vytvo ení odkazu se nazývá cizí klí . Cizí klí jako zprost edkování vazby do jiné tabulky se bude vždy skládat ze stejných sloupc jako primární klí v odkazované tabulce. V p ípad , že bychom pot ebovali vytvo it odkaz do tabulky,ve které existuje složený primární klí , museli bychom p idat tolik sloupc , kolik je v odkazované tabulce sloupc v primárním klí i.

1.3.4 Integrita datPod integritou nebo konzistencí dat rozumíme fakt, že data v rnzobrazují reálný stav, který popisují. Základním p edpokladem udrže-ní dat v konzistentním tvaru je kvalitn navržená datová základna. Návrhem datové základny se budeme podrobn ji zabývat ve zvláštní kapitole. Nekonzistence mezi realitou a daty, které ji popisují, mohoudále vznikat z t chto d vod :

Nedostate ná aktualizace dat Data se postupn stávají neaktuálními. Stává se tak v p ípad , že nedokážeme zajistit p idání nových ádk do tabulek, opravu hod-not v existujících ádcích a rušení ádk o již neexistujících objek-tech reálného sv ta. P estože se jedná o triviální úkony, m že udr-žování datové základny v aktuálním stavu vyžadovat zejména u rozsáhlých aplikací nemalé úsilí, as a peníze.

Referen ní integrita Tím, že máme základní informace o zam stnanci v jedné tabulce a údaje o výplatách v tabulce další, musíme dbát na to, abychom p irušení zam stnance vymazali nejen základní informace o n m, ale i všechny jeho výplaty. Obecn e eno, musíme vymazat všechnyádky z ostatních tabulek, které se na tohoto zam stnance

odkazovaly. Pokud bychom zapomn li vymazat n které odkazy,nebyli bychom pozd ji schopni ur it, ke kterému zam stnanci tytoúdaje pat í, a datová základna by již nezobrazovala v rn stav reality.

Page 24: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

24 ÚVOD DO PRÁCE S DATABÁZEMI ___________________________________

1.4 Další informace uložené v databázi �

Krom vlastních dat, jako je jméno zam stnance, výše jeho platu apod., jsou v databázi uloženy i informace, které jsou pouze pomocné.Tyto informace slouží zejména pro zrychlení zpracování našich poža-davk .

1.4.1 Indexy Mezi nejvíce používané dodate né informace pat í tzv. indexy.S indexy se setkal každý z nás – známe je nap íklad z ve ejné knihov-ny. Místo toho, abychom museli procházet dlouhé police a hledat požadovanou knížku, sta í prohledat malé karti ky v katalogu. Tytokarti ky jsou se azeny podle názvu knihy, což nám velmi uleh ujevyhledávání. Jist , podle názvu mohou být se azeny i knihy v policích, ale to má n kolik nevýhod:þ Manipulace s t žkými knihami je ur it náro n jší než s malými

karti kami. Pokud bychom cht li p idat další knihu doprost ed poli-ce, museli bychom posunout všechny následující knihy o jedno mís-to dál. Na konci police by už nemuselo být dostate né místo a mybychom museli p enášet poslední knihu do další police. Naproti to-mu vložení karti ky do katalogu na správné místo není nijak náro -né. I v p ípad nedostatku místa není problém p esunout n kolikposledních karti ek do jiné p ihrádky.

þ Hlavní výhodou použití index však je, že jich m žeme vytvo itvíce pro jedna a ta samá data. M žeme mít jeden katalog se azenýpodle názv knih, druhý podle jmen autor a kone n t etí podle tematických okruh . P i vyhledávání potom použijeme ten, který se nejvíce hodí pro naše pot eby. Když budeme hledat všechny knihyo zahradnictví, použijeme oborový katalog. Pot ebujeme-li všechna díla napsaná W. Shakespearem, použijeme katalog podle autor .

P estože jsme hovo ili o knihovn a katalozích s papírovými karti -kami, platí uvedené výhody a nevýhody i v p ípad použití po íta a elektronických médií. I v po íta i musí být data umíst na na disku a jejich fyzické azení do ur itého po adí a z toho vyplývající p esouvá-ní zabere n jaký as. I když data vyhledává po íta , bude výsledek k dispozici d íve, když bude „v d t“, na kterém míst disku jsou ulo-

Page 25: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________ DALŠÍ INFORMACE ULOŽENÉ V DATABÁZI 25

�ženy všechny knihy s titulem za ínajícím na „T“. V opa ném p ípadby musel být postupn na ítán ádek po ádku a kontrolován název titulu. A kone n , každému je z ejmé, že ani v po íta i nemohou být ádky v tabulce se azené najednou podle r zných kritérií.

V sou asné chvíli není nutné, abychom znali p esnou strukturu in-dex a zp sob práce s nimi. Sta í, když víme o jejich existenci a o tom, že mohou výrazn urychlit dobu pot ebnou k získání požado-vaných informací. Podrobn ji se k index m a zejména k jejich tvorbvrátíme v pozd jších kapitolách.

1.4.2 Další pomocné informace v databázi Krom vlastních dat a index jsou v databázích uloženy informace popisující tato data. V t chto „metadatech“ (informacích o informa-cích) jsou zaznamenány názvy existujících tabulek, po ty a názvy jejich sloupc a další informace nutné k tomu, abychom mohli s databází pracovat. T mto pomocným informacím se n kdy íkáslovník dat.

Page 26: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 27: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

22. Základy jazyka SQL

Kapitola 2

ZÁKLADY JAZYKA SQL

2.1 Historie .......................................................................................282.1.1 Databázové systémy ............................................282.1.2 Databázový jazyk SQL........................................28

2.2 Rela ní model dat......................................................................302.2.1 Základní pojmy ...................................................302.2.2 Operace rela ní algebry.......................................312.2.3 Podmínky minimální rela nosti ...........................32

2.3 Základní p íkazy jazyka SQL.....................................................332.3.1 Dotazy pomocí p íkazu SELECT ........................332.3.2 P idávání ádk – INSERT..................................392.3.3 Oprava hodnot v tabulce – UPDATE ..................402.3.4 Vymazání ádk z tabulky – DELETE................412.3.5 Vytvo ení tabulky – CREATE TABLE...............412.3.6 Odstran ní tabulky – DROP TABLE ..................42

Page 28: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

28 ZÁKLADY JAZYKA SQL __________________________________________

�2.1 Historie

2.1.1 Databázové systémy Po átek databází a databázového zpracování dat m žeme nalézt v 60. letech, kdy firma IBM vytvo ila první databázový systém založený na hierarchickém modelu. Tento model p edpokládal hierarchické uspo á-dání dat, podobné jako organiza ní struktura organizace. Datová základna byla tvo ena stromy, které m ly mezi nad ízeným a pod ízeným uzlem vztah 1:n (jeden nad ízený uzel má jednoho nebo více následník ).

V 70. letech se za aly stromy v hierarchickém modelu propojovat a by-lo možné popisovat i složit jší struktury než pouhé hierarchické vazby. P esto se stále neda ilo popisovat všechna data a vazby mezi nimi, jak se vyskytují v realit . V polovin 70. let se proto za aly objevovat zcela nové databázové systémy založené na relacích a rela ní algeb e. 80. léta pak pat í již zcela rela ním databázím a jazyku SQL, který se postupnstal jediným prost edkem pro práci s tímto typem databázových systém .

V sou asné dob se vývoj ubírá sm rem k objektovým databázím, je-jichž hlavní výhoda spo ívá v možnosti uchovávání širokého spektra dat – od znakových, p es obrazová a zvuková data až po video.

Zatím je možné pozorovat dva trendy v implementaci objektv databázových systémech. Jednak vznikají nové databázové systémy založené na objektových technologiích. Jejich výhodou je logická istotatýkající se konzistentního objektového p ístupu ke všem objekt m vysky-tujících se v databázi. V druhém p ípad se tv rci rela ních databázových systém snaží implementovat objekty a objektový p ístup do svých, již existujících produkt . V tomto p ípad nem že být zaru en striktn objek-tový p ístup a k n kterým dat m se stále používá p ístup rela ní. Nespor-nou výhodou je však zp tná kompatibilita t chto systém s velkým množ-stvím d íve napsaných program a také jejich vysp lost díky dlouhé dobjejich používání.

2.1.2 Databázový jazyk SQL V letech 1974 až 75 probíhal ve firm IBM výzkum týkající se možnosti využití rela ních databází. Pro tento projekt bylo nutné vytvo it sadu p íkaz , kterými by se rela ní databáze ovládala. Vznikl tak jazyk SE-QUEL (Structured English Query Language). Jak vypovídá jeho název, bylo cílem tv rc vytvo it jazyk, ve kterém by se p íkazy tvo ily syntak-ticky co nejblíže b žnému jazyku (angli tin ). Tento jazyk byl v upravené

Page 29: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_____________________________________________________ HISTORIE 29

�form SEQUEL/2 použit v databázovém systému SYSTEM R v roce 1977.

Výhody rela ního p ístupu si uv domily i další firmy. Tak v roce 1979 uvedla na trh firma Relational Software, Inc. (nyní Oracle Corporation)sv j rela ní databázový systém s názvem Oracle. Firma IBM nadálevylepšovala sv j systém a v roce 1981 uvedla nový systém SQL/DS a pozd ji, v roce 1983, DB2. Vznikaly však i databázové systémy dalších firem – nap . Progress, Informix a SyBase.V t chto systémech se používa-ly r zné verze jazyku SEQUEL, který se p ejmenoval na SQL (Structured Query Language).

Vzr stající význam rela ních databází si vyžádal nutnost standardizace jazyka pro jejich používání. Americký standardiza ní institut (ANSI) p vodn zamýšlel vytvo it standard na základ zcela nového jazyka RDL. V roce 1984 se však ukázalo, že jazyk se SQL stává standardem de facto.Proto se nový standard založil na tomto jazyku a bývá ozna ován jako SQL86 podle roku 1986, ve kterém byl p ijat.

V pr b hu následujících let se ukázalo, že p vodní standard obsahuje n které nedostatky a naopak v n m nejsou obsaženy n které d ležitéprvky týkající se zejména integrity dat. Proto byl v roce 1992 p ijat nový standard ozna ovaný jako SQL-92 nebo pouze SQL2. Za základní rozší-ení je považováno p idání primárních klí a definice integritních ome-

zení dat v tabulkách. V sou asné dob je stále ješt v návrhu verze stan-dardu SQL3, která by m la zejména reflektovat objektový p ístupa objektové databáze obecn .

Obecným problémem standard p ijímaných de iure r znými nadná-rodními organizacemi je zpožd ní, které vznikne mezi pot ebou standardu a jeho p ijetím. Z d vod zp tné kompatibility dále jednotliví tv rcidatabázových systém ponechávají ve svých systémech i prvky a konstrukce, které nejsou sou ástí standardu SQL. Naopak se ve standar-du SQL vyskytují požadavky, které žádný databázový systém nepodporu-je. Proto se musíme smí it s faktem, že existuje pouze ur itá základní množina p íkaz jazyka SQL a jejich syntaxe, se kterou se m žeme setkat na všech databázových systémech. Mezi jednotlivými systémy se však mohou vyskytovat odlišnosti, které velmi zt žují možnost p enosu jednou napsaných p íkaz na jiný databázový systém. Proto je zejména v referen ní ásti této publikace uvedena základní syntaxe p íkaz ,a potom jsou pro vybraná databázová prost edí vyjmenovány odlišnosti.

Page 30: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

30 ZÁKLADY JAZYKA SQL __________________________________________

�2.2 Rela ní model dat Rela ní databázové systémy jsou založeny na rela ním modelu dat a rela ní algeb e. P estože tento model tvo í matematický základ pro jazyk SQL, není jeho naprosté pochopení nutným p edpokladem pro zadávání správných p íkaz v jazyce SQL. Následující popis je proto v této publi-kaci uveden pouze pro úplnost.

2.2.1 Základní pojmy V každém matematickém modelu si nejprve musíme vysv tlit používané pojmy. þ Doména

Množina hodnot stejného významového typu. Doménou m že být na-p íklad v k nebo p íjmení. Hodnoty v domén jsou stejného datového typu – íslo, et zec znak , datum apod.

þ Kartézský sou in množin A, B Množina uspo ádaných dvojic [x, y] (obecn n-tic [x1, x2, x3, …]), pro které platí, že (x a zárove (y Po et prvk v kartézském sou inu je dán po tem prvk v množin A, krát po et prvk v množinB.

Máme-li množinu A = {1, 2, 3} a množinu B = {a, b} je kartézský sou in M = A B dán takto:

þ RelaceLibovolná podmnožina kartézského sou inu. Relace m že být trvalá (jako nap íklad tabulka), odvozená (jako ur itý pohled na relaci trva-lou) nebo do asná (pouze v pam ti, nap íklad p i spojování tabulek).

þ AtributNázev domény pro použití v relaci. Atributem m že být nap íkladnebo definované nad doménou hodnot typu íslo, resp. et -zec znak . V souvislosti s použitím tabulek hovo íme místo o atributu spíše o sloupci tabulky.

þ TabulkaZjednodušený a upravený pohled na relaci. Nepovažujeme za d ležitépo adí sloupc , ale naopak m že být d ležité po adí ádk v tabulce.

Page 31: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ RELA NÍ MODEL DAT 31

�þ Klí nebo identifikátor

Sloupec nebo skupina sloupc v tabulce jednozna n identifikující á-dek tabulky.

þ Primární klíKlí , který má minimální délku.

þ Cizí klíSloupec nebo skupina sloupc použitá jako odkaz v jiné tabulce, než ve které tvo í primární klí .

2.2.2 Operace rela ní algebry Pro jakékoliv operace se dv ma a více relacemi je nutné, aby tyto relace m ly stejnou strukturu – stejný po et sloupc , z nichž navzájem odpoví-dající sloupce z obou relací budou vytvo eny nad stejnou doménou.

Množinové operace Protože relace je zárove množina, m žeme s relacemi provád t množi-nové operace – sjednocení, pr nik, rozdíl a kartézský sou in.

Speciální operace Krom množinových operací jsou v rela ní algeb e definovány tyto speci-ální operace: þ Projekce

Výb r sloupc z relace (tabulky) A do relace (tabulky) B. Vybrané sloupce jsou dané jmenným seznamem.

þ RestrikceVýb r ádk z relace (tabulky) A do relace (tabulky) B na základ de-finované podmínky.

þ Spojení tabulekKartézský sou in dvou tabulek. Prvky tabulek jsou ádky a výsledkem je tabulka obsahující všechny sloupce z obou spojovaných tabulek. Po-et ádk výsledné tabulky je roven po tu ádk první tabulky krát po-tu ádk druhé tabulky. Protože mezi tímto velkým po tem ádk je

mnoho t ch, které nepot ebujeme, kombinuje se spojení tabulek s restrikcí. P i spojování tabulky zam stnanc s tabulkou odd lení nás zajímají pouze ádky, ve kterých se íslo odd lení u zam stnance rovná íslu odd lení v tabulce zam stnanc . Pouze tyto ádky obsahují

správnou kombinaci p íjmení a názv odd lení. Omezující podmínka se definuje v tšinou jako rovnost primárního a cizího klí e.

Page 32: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

32 ZÁKLADY JAZYKA SQL __________________________________________

�2.2.3 Podmínky minimální rela nostiAby mohl být databázový systém považován za rela ní, musí spl ovatalespo následující podmínky: 1. Všechna uživatelská data a definice vlastní struktury databáze, jsou

uložena v tabulkách. K ob ma skupinám dat se p istupuje pomocí stej-ných nástroj – stejného jazyka.

2. Fyzická struktura dat a jejich uložení je od uživatele odstín no.3. Existuje nástroj – jazyk, který umož uje realizovat alespo operaci

restrikce, projekce a spojování tabulek, aniž by obsahoval iteraci nebo rekurzi.

Page 33: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ ZÁKLADNÍ P ÍKAZY JAZYKA SQL 33

�2.3 Základní p íkazy jazyka SQL P íkazy jazyka SQL jsou len ny do n kolika skupiny, z nichž se nyní budeme zabývat pouze skupinou p íkaz pro manipulaci s daty. Manipu-lací rozumíme zejména vyhledávání dat, ale také p idávání nových ádkdo tabulek, aktualizaci hodnot v ádcích nebo vymazání existujících ád-k . Další skupiny p íkaz umož ují vytvá ení a rušení tabulek, indexa jiných databázových objekt a nastavování parametr databázového systému. Tyto p íkazy jsou ur eny zejména pro zkušen jší uživatele a jsou popsány v referen ní ásti této publikace.

Jazyk SQL byl navržen jako tzv. neprocedurální jazyk. V p íkazechpopisuje, „co“ chceme získat, a ne „jak“ (postup, proceduru) to chceme získat. Liší se tak od v tšiny programovacích jazyk , které jsou procedu-rální a ve kterých vždy popisujeme p esný postup toho, co se má provést.

P i zadávání SQL p íkaz není d ležité na kolika ádcích jsou zadány. Je lhostejné, jestli se jedná o jeden dlouhý ádek nebo více kratších ádk .Zvlášt složit jší p íkazy je proto vhodné rozd lit na více ádk , aby byly lépe itelné.

2.3.1 Dotazy pomocí p íkazu SELECT Pro vyhledávání dat podle r zných kritérií je v jazyku SQL k dispozici pouze p íkaz . Protože dotazy do databáze mohou být r znorodé,má i p íkaz mnoho variant. V této kapitole se budeme zabývat pouze t mi nejd ležit jšími, které však ve v tšin p ípad posta ujík získání požadovaných informací v p ehledné form . Detailní popis všech variant p íkazu je uveden v referen ní ásti, v kapitole 7 zabývající se pouze p íkazem . V kapitole 5 jsou uvedeny další p íklady použití tohoto p íkazu.

Výpis všech informací v tabulce Nejjednodušší varianta p íkazu umož uje vypsat na obrazovku p ehled všech sloupc a ádk v tabulce:

kde <název_tabulky> nahradíme skute ným názvem tabulky, jejíž obsah chceme vypsat. Chceme-li zobrazit všechny ádky z tabulky zam stnanc ,která má jméno , zadáme:

Page 34: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

34 ZÁKLADY JAZYKA SQL __________________________________________

�Poznámka þ Po zadání p íkazu musíme stisknout klávesu ENTER, aby se p íkaz

odeslal k vykonání. V n kterých databázových prost edích je nutné ukon it p íkaz st edníkem (‘;’).

Výsledek zadaného dotazu by mohl vypadat nap íklad takto:

Vidíme, že tabulka obsahuje t i sloupce – p íjmení, íslo odd lenía výši platu zam stnance. V tabulce jsou v sou asné dob pouze t i ádky, což nám pro za átek sta í. Tím jsme úsp šn zadali sv j první dotaz a dostali jsme ne zcela nezajímavou odpov – známe jména a platy všech zam stnanc v naší fiktivní firm .

Dotazovací jazyk SQL byl navržen tak, aby se co nejvíce podobal b ž-nému jazyku. Anglicky hovo ící lov k by zadaný dotaz dokázal p e ístjako „vyber všechno z tabulky zam stnanc “ (tedy za p edpokladu, že by znal význam znaku ‘*’ zastupujícího zde všechny sloupce v tabulce). Všechny další formy p íkazu budou zadávány podobným zp so-bem. Znalost anglického jazyka bude proto pro nau ení jazyka SQL podstatným p ínosem.

Výb r sloupc z tabulky – projekce Tabulka m že obsahovat velké množství sloupc , ze kterých nás n kterénezajímají. Pomocí p íkazu m žeme zadat, které ze sloupcchceme vypsat. Ostatní sloupce se ve výsledku neobjeví.

Chceme-li vybrat pouze p íjmení a výši platu, zadáme název sloupc a bezprost edn za klí ové slovo , místo znaku

‘*’. Názvy sloupc odd líme árkou:

Ve výsledku se objevuje pouze p íjmení a výše platu zam stnance:

Page 35: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ ZÁKLADNÍ P ÍKAZY JAZYKA SQL 35

�Omezení po tu ádk – restrikce V našem jednoduchém p íklad jsou v tabulce zam stnanc pouze t iádky. V reálné situaci by zde mohly být stovky nebo i tisíce ádk . M -

žeme se setkat i s tabulkami, ve kterých jsou miliony ádk . Výpis všech ádk z takto rozsáhlých tabulek by nem l velký smysl, protože bychom

jej nedokázali ani p e íst, natož z n j získat n jaké informace. Pomocí p íkazu proto m žeme omezit po et ádk , které jsou zobrazeny na obrazovce, pouze na ty, které vyhovují ur ité podmínce. Podmínku tvo í výraz jehož výsledkem je logická hodnota nebo logická hodnota

. Tento výraz je vyhodnocován pro každý ádek tabulky a pouze ádky, pro které byl vyhodnocen jako pravdivý, jsou zobrazeny ve výsledku. Více se o výrazech a o podmínkách dozvíme v referen ní ásti této publi-kace v kapitole „Operátory, výrazy a podmínky“.

Zajímají-li nás pouze zam stnanci pracující v odd lení íslo 1, omezí-me výsledek dotazu pouze na zam stnance, pro které platí .Takto zadaná podmínka je spln na pouze v p ípad zam stnanc pracují-cích v odd lení íslo 1 a pouze oni budou vypsáni na obrazovce:

Podmínka se zadává za klí ové slovo (anglicky „kde“) a celý dotaz tedy m žeme p eložit jako „vyber všechno z tabulky zam stnanc , kde (platí, že) íslo odd lení se rovná 1.

Ve výsledku dotazu není nyní pan Adámek, protože pracuje v odd lenííslo 2, a nespl uje tedy podmínku :

Poznámka þ Zadáním omezení v p íkazu nedojde k vymazání ádk

z tabulky! V tabulce z stává nadále stejný po et ádk . Pouze se n kte-ré z nich nezobrazí jako výsledek práv zadaného dotazu.

Kombinace projekce a restrikce Omezení sloupc a ádk ve výsledku m žeme navzájem kombinovat. M žeme tak vypsat pouze p íjmení všech zam stnanc , kte í mají plat v tší než 5 500,– K . Formulace podmínky bude :

A výsledek bude vypadat takto:

Page 36: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

36 ZÁKLADY JAZYKA SQL __________________________________________

T íd ní ádk na výstupu Hledáme-li v datech ur itou informaci, je výhodné mít tato data set íd napodle zvoleného sloupce nebo sloupc . Kritérium pro t íd ní m že tvo itkrom názvu sloupce i složit jší výraz. Kritérium se zadává za klí ovýmslovem (z anglického „se adit/po adí podle“):

Dotaz vybere z tabulky zam stnanc všechny ádky a set ídí je abecednpodle p íjmení:

Podobn m žeme set ídit výstup podle odd lení a v rámci odd lení podle výše platu:

Nejprve jsou ve výsledku uvedeni zam stnanci z prvního odd lení.V rámci tohoto odd lení jsou set íd ni podle výše platu vzestupn . Pak následují zam stnanci z druhého odd lení atd.:

Získání souhrnných informací Obzvlášt u rozsáhlých tabulek získáme alespo základní p edstavu o datech, známe-li jejich po et a minimální, maximální a pr m rnouhodnotu. P íkaz nám dává možnost získat tato data za celou ta-bulku, ale i za ur ité skupiny – nap íklad odd lení. M žeme tak zjistit pr m rnou výši platu ve firm , ale i pr m rnou výši platu v jednotlivých odd leních.

Page 37: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ ZÁKLADNÍ P ÍKAZY JAZYKA SQL 37

�þ Souhrnné informace za celou tabulku

K získání souhrnných informací slouží tzv. agrega ní funkce (kapitola 8). Mezi n pat í (sou et), (pr m r), (minimum),

(maximum) a (po et). Pomocí následujícího dotazu zjistíme n které souhrnné informace o platech ve firm :

Výsledek dotazu:

Vidíme, že ve firm jsou t i zam stnanci, jejich pr m rný plat je p i-bližn 5.833,– K , minimální 5.000,– K a maximální 6.500,– K . Po-dobným zp sobem bychom mohli použít i další agrega ní funkce. Je d ležité si uv domit, že takto získáme souhrnné informace za celou ta-bulku – v našem p ípad za všechny zam stnance.

þ Souhrnné informace za skupinyPot ebujeme-li znát souhrnné informace v podrobn jším len ní – nap íklad podle odd lení, musíme použít tzv. seskupování ádk po-mocí klí ového slova (z anglického „seskupit podle“). Chceme-li zjistit souhrnné informace za jednotlivá odd lení, budeme seskupovat zam stnance podle sloupce obsahujícího íslo odd lení (v našem p ípad ). Seskupení znamená, že jsou nejprve nalezeny a p i azeny k sob všechny ádky, které mají v zadaném sloupci stej-nou hodnotu. V našem p ípad to jsou zam stnanci, kte í pracují ve stejném odd lení. Souhrnná funkce bude potom vypo tena pro každou takto vzniklou skupinu. Ve výsledku bude tolik ádk , kolik existuje skupin – v našem p ípad dva, protože jsou dv odd lení:

Výsledek:

Page 38: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

38 ZÁKLADY JAZYKA SQL __________________________________________

�Z výsledku m žeme zjistit, že existují dv odd lení (s ísly 1 a 2). Z prvého ádku pak, že v prvním odd lení pracují dva zam stnanci, je-jichž pr m rný plat je 5.500,– K , minimální plat v odd lení je 5.000,– K a maximální 6.000,– K . Z druhého ádku vidíme, že ve druhém odd lení pracuje pouze jeden zam stnanec s platem 6.500,– K .

Spojování tabulek P edstavme si situaci, že chceme vypsat seznam všech zam stnanc spolu s názvy odd lení, ve kterých zam stnanci pracují. K tomu nám nesta íinformace z tabulky zam stnanc , protože zde je uloženo pouze ísloodd lení, a ne jeho plný název. Musí tedy existovat další tabulka obsahu-jící ísla všech odd lení a jejich názvy. Pomocí této tabulky budeme moci vytvo it požadovaný seznam zam stnanc .

P i spojování tabulek nesmíme zapomenout uvést tzv. spojovací pod-mínku. Ta ur uje, které ádky z obou tabulek se mají navzájem spojit. Pracuje-li pan Novák v odd lení íslo 1, chceme pro n j vyhledat v druhé tabulce název prvního odd lení. U pana Nováka nás nezajímají názvy ostatních odd lení. Z hlediska rela ní algebry se jedná o restrikci kartéz-ského sou inu pouze na dvojice ádk , které mají smysl. Podmínka se ve v tšin p ípad zadává jako rovnost dvou sloupc , z nichž každý je v jedné tabulce. V našem p ípad je to íslo odd lení:

Spojovací podmínka se zadává stejn jako ostatní podmínky za klí ovéslovo . V tomto p ípad zajiš uje, že se ke každému zam stnancivyhledá v tabulce odd lení název odd lení, ve kterém tento zam stnanecpracuje:

Všimn me si také uvedení názv obou tabulek ( a ) za klí ovým slovem . Více se o spojování tabulek dozvíme v referen níásti publikace ( kapitola 7).

Page 39: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ ZÁKLADNÍ P ÍKAZY JAZYKA SQL 39

�2.3.2 P idávání ádk – INSERT Do existující tabulky m žeme pomocí p íkazu p idávat nové ádky. ádek p idáme tak, že zadáme hodnoty pro všechny sloupce tabul-

ky. Do tabulky zam stnanc z p edcházejících p íklad , která obsahuje

sloupce , a , p idáme nového zam stnances p íjmením Petrásek. Tento zam stnanec bude pat it do odd lení íslo 2 a bude mít plat ve výši 6.200,– K :

Za klí ovými slovy musíme uvést název tabulky, do které chceme ádek p idat. V našem p ípad je to tabulka zam stnancs názvem .

Klí ové slovo oznamuje, že budeme p idávat hodnoty. Za ním následuje seznam hodnot odd lených árkou a uzav ený do kulatých závorek.

Hodnoty v seznamu jsou postupn p i azovány do sloupc nového ád-ku. Hodnota se vloží do sloupce , hodnota do sloupce a hodnota do sloupce . Hodnoty v seznamu musí svým po tem a typem odpovídat sloupc m v tabulce.

Poznámka þ Všimn me si použití apostrof p i zadávání p íjmení zam stnance.

Všechny et zce znak , které budeme používat v SQL p íkazech, musí být uzav eny v apostrofech nebo v uvozovkách, podle používaného da-tabázového prost edí.

Neznámá hodnota P idat ádek do tabulky m žeme i v p ípad , že neznáme jednu nebo více hodnot. Místo hodnoty, kterou neznáme, použijeme speciální hodnotu s názvem . Ta ozna uje neznámou nebo nezadanou hodnotu:

P edchozím p íkazem jsme p idali do tabulky zam stnanc pana Petráska v etn výše jeho platu, aniž bychom ur ili, do kterého odd lení bude pat it.

Page 40: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

40 ZÁKLADY JAZYKA SQL __________________________________________

�Poznámka þ Je z ejmé, že pro používání hodnot budou existovat ur itá ome-

zení. Nemá nap íklad význam p idat ádek, který obsahuje pouze hod-noty . P i vytvá ení tabulky se proto ur uje, které sloupce mohou obsahovat hodnotu a které ne.

2.3.3 Oprava hodnot v tabulce – UPDATE P i práci s databází se dostaneme do situace, kdy musíme opravit d ívezadanou hodnotu nebo hodnoty: zam stnanec m že být p e azen do jiné-ho odd lení, dojde ke zvýšení plat apod. Pro tento ú el používáme p íkaz

. P i jeho používání nedochází ke zm n po tu ádk v tabulce, ale pouze ke zm n hodnot v jednom nebo více sloupcích u jednoho nebo více ádk tabulky.

Nejjednodušší formou p íkazu je aktualizace jednoho sloupce u všech ádk tabulky. Ukážeme si zvýšení platu o 20 % u všech zam st-nanc :

nebo zkrácen :

Takto zadaný p íkaz prochází tabulku zam stnanc ádek po ádku a u každého zam stnance uloží do sloupce plat hodnotu jeho 1,2násobku. Jinými slovy, zvýší plat o 20 %.

Jak ale zadat p íkaz, když chceme zvýšit plat pouze zam stnanc mve druhém odd lení? Podobn jako u p íkazu m žeme zadat podmínku za klí ové slovo . Tato podmínka omezí množinu ádk ,se kterými chceme pracovat – tj. ve kterých chceme zvýšit plat:

Podmínka zajistí, že plat bude zvýšen pouze zam stnanc mz odd lení íslo 2.

Podobn m žeme zm nit íslo odd lení u zam stnance se jménem Pet-rásek, pokud máme jistotu, že v tabulce zam stnanc je pouze jeden zam stnanec s tímto jménem:

Page 41: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ ZÁKLADNÍ P ÍKAZY JAZYKA SQL 41

�2.3.4 Vymazání ádk z tabulky – DELETE P íkaz je opakem p íkazu . Z tabulky vymaže úplnvšechny ádky, nebo pouze ty, které spl ují zadanou podmínku. Protože v tšinou nechceme z tabulky vymazat všechny ádky, nesmíme zapome-nout tuto podmínku zadat.

Podmínka, ur ující, které ádky chceme vymazat, se zadává jako ob-vykle za klí ové slovo . M žeme nap íklad vymazat pouze zam st-nance, kte í pracují v prvním odd lení:

Zam stnanci, kte í pracují v jiném než prvním odd lení, z stanou i nadále v tabulce.

Pozor!þ Nezadáme-li podmínku, budou z tabulky vymazány všechny ádky:

Tento p íkaz vymaže z tabulky zam stnanc všechny ádky.

2.3.5 Vytvo ení tabulky – CREATE TABLE P íkaz umož uje vytvo ení databázové tabulky. P i jejím vytvá-ení musíme zadat název, kterým se na ni budeme odkazovat v dalších

SQL p íkazech, a hlavn názvy sloupc , které bude tabulka obsahovat. U každého sloupce musíme navíc zadat datový typ hodnot, které bude obsahovat – íslo, et zec znak , datum apod. (Datové typy jsou podrobnvysv tleny ve zvláštní kapitole.)

Vytvo me pomocí p íkazu tabulku zam stnanc . Ta bude po-jmenována a bude obsahovat t i sloupce: p íjmení zam stnances názvem a datovým typem et zec znak o maximální délce 50 znak , íslo odd lení s názvem a do t etice výši platu s názvem a datovým typem desetinné íslo s dv ma platnými dese-tinnými místy:

Page 42: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

42 ZÁKLADY JAZYKA SQL __________________________________________

�V seznamu jsou názvy sloupc a jejich datové typy odd leny árkou. Celý seznam je uzav en do kulatých závorek. Grafická úprava p íkazu je pouze pro jeho p ehlednost a nemá žádný vliv na jeho provedení.

Poznámka þ Pro zadání datových typ sloupc byly použity datové typy

z databázového systému Oracle.

2.3.6 Odstran ní tabulky – DROP TABLE Existující tabulku, v etn všech ádk , odstraníme z databáze pomocí p íkazu a uvedením jejího názvu. P ed odstran ním tabulky nebude vyžádáno potvrzení této operace jako nap íklad p i vymazání soubor . Proto používejme tento p íkaz s rozmyslem – jednou odstran -nou tabulku a všechna v ní obsažená data nelze pozd ji obnovit.

Takto zadaný p íkaz odstraní celou tabulku zam stnanc v etn všech ádk .

Page 43: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

33 Návrh datové základny

Kapitola 3

NÁVRH DATOVÉ ZÁKLADNY

3.1 Analýza p edm tné oblasti .......................................................443.2 T i úrovn návrhu ......................................................................45

3.2.1 Konceptuální úrove ...........................................453.2.2 Logická úrove ....................................................503.2.3 Implementa ní úrove .........................................51

3.3 Slovník dat..................................................................................52

Page 44: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

44 NÁVRH DATOVÉ ZÁKLADNY _______________________________________

3.1 Analýza p edm tné oblasti �

Návrh datové základny a její struktury by nem l být, zvlášt u rozsáhlej-ších systém , živelným procesem postupn reagujícím na vzniklé poža-davky. V sou asné dob existují historicky ov ené postupy a pravidla návrhu, která umožní a do jisté míry i zaru í vytvo ení kvalitní datové základny, která bude ádn zdokumentovaná, logicky konzistentní a bude umož ovat relativn snadné zapracování skute ností vzniklých pozd ji.

Tato kapitola si neklade za cíl popsat metodiku návrhu datové základnya již v bec ne metodiku návrhu a implementace databázové aplikace. Snaží se pouze upozornit na význam po áte ní analýzy oblasti, kterou chceme popsat v databázovém prost edí, p edtím než za neme vytvá ettabulky a dotazy pomocí jazyka SQL. ím pozd ji totiž odhalíme chybyv návrhu datové základny, tím v tší námahu a tím i finan ní prost edkybudeme muset ob tovat na jejich nápravu.

Page 45: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ T I ÚROVN NÁVRHU 45

3.2 T i úrovn návrhu �

Jedním z možných p ístup je odd lení popisu oblasti našeho zájmu od vlastní implementace na po íta i. Zp sob implementace m že výraznovlivnit strukturu datové základny, ale s oblastí, kterou datová základna popisuje, nemá nic spole ného. Princip t í architektur rozd luje postup návrhu datové základny na t i kroky, které si podrobn popíšeme.

3.2.1 Konceptuální úroveNa této úrovni se snažíme popsat p edm tnou oblast pomocí všech entit, které se v ní vyskytují, a všech vztah mezi t mito entitami. V žádnémp ípad však nebereme v úvahu pozd jší zp sob implementace a do jistémíry ani pozd jší omezení technologického charakteru. Tím, že neuvažu-jeme o pozd jším zp sobu implementace v konkrétním databázovémsystému, m žeme v novat veškerou energii na pochopení vlastního pro-blému. Nakonec získáme i obecn platný popis dané oblasti, který m že-me použít pro implementaci v odlišných databázových systémech bez nutnosti op tovné analýzy.

Cíle konceptuálního modelu þ vytvo it obraz reality ve formalizované podob nezávislý na poz-

d jším zp sobu implementace;þ formalizovat požadavky uživatel a dát návrhá m snadno pochopi-

telný prost edek pro komunikaci s uživateli, kterému budou i uživa-telé rozum t;

þ vytvo it podklad pro návrh datové základny.

3.2.1.2 E-R diagramy, ERA diagramy K formálnímu popisu reality slouží tzv. E-R diagramy z anglického Enti-ty-Relationship (do eštiny p ekládané jako diagramy entit a vztah ) nebo ERA diagramy z anglického Entity-Relationship-Attribute. V ERA dia-gramech jsou navíc u každé entity uvedeny i její atributy.

Pro kreslení obou typ diagram existuje velké množství notací, které se liší množstvím zna ek vyjad ující vlastnosti popisované oblasti. Z praktických zkušeností vyplývá, že ani nejvíce graficky bohaté notace nedokážou popsat všechny situace z reálného sv ta a je nutné doplnit každý diagram slovním popisem. Velké množství zna ek používaných v diagramech navíc iní tyto diagramy nep ehlednými a zt žuje jejich

Page 46: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

46 NÁVRH DATOVÉ ZÁKLADNY _______________________________________

pochopení. Z t chto d vod se omezíme pouze na základní notaci, se kterou se m žeme setkat s drobnými odlišnostmi tém ve všech produk-tech pro podporu návrhu datové základny.�

Prvky v datových modelech Entita

Významný prvek ve zkoumané oblasti. Entitou m že být zam stnanec,odd lení, výplata apod. Entity se v diagramu vyzna ují jako obdélníkys vepsaným názvem entity.

Atribut Vlastnost entity podstatná z hlediska zkoumané oblasti. Atributem enti-ty Zam stnanec bude jeho jméno, výše platu apod. Atributy nemusíme v diagramu vyzna ovat. Sta í, budou-li uvedeny v textovém komentá ik tomuto diagramu.

Vztah Libovolný vztah, ve kterém mohou být dv (nebo více) entit. V ta„Zam stnanec pracuje v odd lení“ je vyjád ením vztahu pracuje v me-zi entitami Zam stnanec a Odd lení. Vztah je vhodné pojmenovat, protože mezi dv ma entitami m že existovat více r zných vztah .Vztah je v diagramu vyzna en jako ára, která spojuje entity vystupují-cí v tomto vztahu.

Zam stnanec Odd lenípracuje v

Ukázka E-R diagramu Tento velmi jednoduchý E-R diagram obsahuje dv entity –Zam stnaneca Odd lení. Zárove vyzna uje vztah mezi t mito entitami – pracovat v(„Zam stnanec pracuje v odd lení“).

Kardinalita vztahuVšimn me si „vidli ky“ na stran zam stnance ve vztahu s odd lením.Jejím smyslem je vyjád it tzv. kardinalitu vztahu zam stnance a odd lení.Pod kardinalitou rozumíme po et výskyt objekt obou entit, které se vztahu ú astní. Víme, že v jednom odd lení pracuje obvykle více zam st-nanc . Naproti tomu jeden zam stnanec pracuje v jeden okamžik pouze v jednom odd lení. Jedná se o p íklad vztahu n:1 (n zam stnanc pracuje v jednom odd lení) nebo opa n 1:n (v jednom odd lení pracuje n zam stnanc ).

Page 47: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ T I ÚROVN NÁVRHU 47

�Typy kardinalit vztah

1:1 Vztah, ve kterém na obou stranách vystupuje pouze jeden objekt dané entity. Tyto vztahy se v realit vyskytují pouze z ídka a jejich existen-ce v diagramu bývá n kdy zp sobena chybou v popisu reality. P íkla-dem vztahu 1:1 m že být vztah manželé mezi entitou Muž a entitou Žena (v p ípad monogamní spole nosti) nebo vztah t ídní u itel mezientitami U itel a T ída.

1:n Na jedné stran je jediný objekt, který je ve vztahu s jedním nebo více objekty na stran druhé. Jedná se typ vztahu, který se vyskytuje velmi asto. Krom již uvedeného vztahu zam stnance a odd lení to je nap í-

klad vztah nad ízený – pod ízený, zam stnanec – výplata, ale také t ída – žák.

m:n specifickým typem vztahu jsou vztahy, ve kterých vystupuje více ob-jekt na obou stranách. Ve vztahu zam stnanec – úkol m že více za-m stnanc ešit jeden úkol a zárove m že jeden zam stnanec zároveešit více úkol ( Dekompozice vztah m:n).

1:n m:n1:1

Notace kardinality vztahu

Parcialita vztahuKrom kardinality vztahu m žeme ješt rozlišovat povinnost a volitelnost jeho existence:þ je nutné, aby každý zam stnanec byl za azen do ur itého odd lení?

Nebo m že existovat zam stnanec, který v sou asné dob nepat ído žádného odd lení? Musí mít každý muž manželku a žena manže-la?

Jak vidíme, mohou se vyskytovat typy vztah , které nemusí existovat u všech objekt dané entity – existují nap íklad svobodní muži i ženy.Parcialitu nebo volitelnost vztahu m žeme také vyjad ovat v diagramech.

Prázdné kole ko vyjad uje volitelnost na stran entity, která nemusíexistovat. Parcialita ve vztahu pracuje v znázor uje fakt, že ne všichni zam stnanci mají p id lené odd lení, ve kterém by pracovali.

Page 48: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

48 NÁVRH DATOVÉ ZÁKLADNY _______________________________________

Muž Ženamanžel

Zam stnanec Odd lenípracuje v

Notace parciality vztahu

Poznámkaþ U vztahu 1:n se v tšinou parcialita nevyjad uje, protože se na stra-

n n automaticky p edpokládá výskyt 0 až n objekt . Záleží pouze na konvencích, které si p i návrhu datové základny zvolíme, jestlibudeme vztah 1:n používat pouze pro výskyt 1 až n objekta možnost neexistence vztahu budeme vyjad ovat pomocí parciali-ty.

3.2.1.3 Dekompozice vztah m:n Vztah m:n je z hlediska další práce velmi komplexní a je nutné pokusit se o jeho zjednodušení. Ned láme tak pouze kv li jeho implementaci na další, logické úrovni návrhu, ale i pro p ípad, že v tomto vztahu je „scho-vána“ další entita, která zatím naší pozornosti unikla. Sou ástí této entitymohou být i atributy, o kterých jsme tušili, že existují, ale nev d li jsme,ke které entit je p i adit.

Dekompozicí vztahu m:n rozumíme vytvo ení nové, tzv. vazební entity, která bude mít vztahy typu n:1 na ob p vodní entity vztahu m:n. Nov vzniklá entita ešitel úkolu vyjad uje fakt, že zam stna-nec m že být najednou ešitelem více úkol a jeden úkol m že být ešen najednou více ešiteli.

Sou ástí této entity mohou být atributy, které nelze p i adit žádné z entit Zam stnanec a Úkol. P íkladem je atribut popisující hodnocení zam stnance za odvedenou práci na daném úkolu. Protože zam stnanecm že pracovat na více úkolech a být hodnocen za každý jinak, nem žebýt tento atribut umíst n do entity Zam stnanec. Zárove nem že být umíst n ani do entity Úkol, protože na úkolu m že pracovat více zam st-nanc . Jediným správným umíst ním atributu Hodnocení je entita ešitelúkolu, protože se vztahuje vždy k dvojici {zam stnanec; úkol}.

Page 49: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ T I ÚROVN NÁVRHU 49

Zam stnanec Úkol

Zam stnanec Úkol

ešitel úkolu

eší �

Dekompozice vztahu m:n

3.2.1.4 Generalizace a specializace Zvláštním typem vztah mezi entitami je tzv. generalizace a specializace. Generalizací rozumíme zobecn ní n kterých vlastností r zných entit, pomocí kterého dojde k jejich splynutí v entitu jednu. Pomineme-li jistd ležité odlišnosti mezi kon m a oslem, m žeme generalizovat, že sejedná o lichokopytníky. Ješt výše na pomyslné hierarchii m žeme hovo-it o savcích, dále o teplokrevných a úpln obecn o živo iších. Opa ným

postupem bychom získávali více a více specializované živo ichya hovo íme tedy o specializaci.

Podobné hierarchické uspo ádání m žeme nalézt i v jiných oblastech – osoba m že být zam stnanec, d chodce nebo student. Zam stnanec m žebýt, v p ípad školy, u itel/ka, sekretá /ka, studijní referent/ka nebo i uklíze /ka. S problémy se setkáme v p ípad , že chceme pracovat s entitou zam stnanec – každý zam stnanec dostává výplatu, m že dostat výpov apod. – ale n kdy pot ebujeme vyjád it vztah pouze s ur itouspecializací – nap . pouze u itel m že být t ídním u itelem v n kterét íd . Jeden z možných zp sob znázorn ní specializace v rámci entityzam stnanec vidíme na následujícím diagramu:

Zam stnanec Výplata

U itel T ída

dostává

t ídníu itel

Notace specializace

Page 50: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

50 NÁVRH DATOVÉ ZÁKLADNY _______________________________________

3.2.2 Logická úrove� Pro popis dat na logické úrovni se v rela ních databázích používá

tzv. rela ní schéma. Rela ní schéma obsahuje tabulky v etn všech jejich sloupc . Ve schématu jsou vyzna eny primární klí e v tabulkách a dále i cizí klí e jako odkaz na primární klí v jiné tabulce. Tento odkaz je v tšinou vyzna en jako ára spojující sloupce ve dvou tabulkách. Sou ástírela ních schémat mohou být i popisy integritních omezení tabulek a sloupc .

Pravidla p evodu z konceptuálního modelu P evod konceptuálního modelu dat na rela ní schéma lze tém automati-zovat pomocí následujících pravidel: þ Každá entita v konceptuálním modelu se stává samostatnou tabul-

kou.þ Identifikátor entity se stává primárním klí em.þ Je-li sou ástí vztahu jeden nebo více atribut , je nutné vytvo it

novou (vazební) entitu podobn jako u vztahu m:n a z ní vytvo ittabulku. V n kterých p ípadech nemusíme u vztahu 1:n tuto entitu vytvá et a všechny atributy lze p esunout do entity na stran nv tomto vztahu.

þ U každého vztahu zvolíme tabulku, která bude obsahovat cizí klí ,jako odkaz do druhé tabulky. Pro volbu tabulky použijeme tato pra-vidla:

Je-li vztah typu 1:n, bude cizí klí p idán do tabulky na stran n.Jedná-li se o parciální vztah 1:1, bude cizí klí p idán do tabulky,která se vyskytuje ve vztahu nepovinn .Jedná-li se o neparciální vztah 1:1, volíme tabulku, která je v cn„pod ízená“ (nap íklad ve vztahu zam stnanec – u itel to bude u itel, protože je specializovanou formou zam stnance).Vztahy typu m:n nejprve dekomponujeme na dva vztahy 1:n a potom postupujeme podle pravidla pro tento typ vztah .

þ Vyskytuje-li se v konceptuálním modelu specializace, máme n kte-rou z t chto možností:

Vytvo íme jednu tabulku (nap íklad Zam stnanci), která bude obsahovat sloupce pro všechny atributy, v etn t ch, které se vy-skytují pouze u specializovaných entit (nap íklad u itel ). Na každém ádku z stanou n které sloupce nevypln ny (budou ob-sahovat hodnotu ). Tento zp sob je nejmén náro ný

Page 51: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ T I ÚROVN NÁVRHU 51

z hlediska tvorby dotaz , ale je nehospodárný místem, které bu-dou data zabírat, a zpracování dotaz nad takto vytvo enými ta-bulkami bude trvat déle. �Vytvo íme zvláštní tabulku pro každou specializovanou entitu. Budeme tedy mít tabulky U itelé, Sekretá ky, Studij-ní_Referentky atd. Nebudeme sice plýtvat místem, ale bude náminit potíže práce se všemi zam stnanci najednou – pouhé vypsání

jmenného seznamu, zvýšení platu apod. Velice snadno se m žestát, že budeme nuceni p idat další tabulku (nap íklad Externisté)a zapomeneme opravit n který z již vytvo ených dotaz pracují-cích se všemi zam stnanci.Vytvo íme tabulku Zam stnanci, která bude obsahovat sloupce spole né pro všechny typy zam stnanc . Pro každou specializo-vanou entitu pak vytvo íme tabulku další, která bude obsahovat už jen sloupce specifické pro tuto entitu. Tento zp sob spojujevýhody obou p edchozích. Musíme však zajistit referen ní inte-gritu dat mezi specializovanými tabulkami a tabulkou hlavní.

Následuje ukázka jednoduchého rela ního schématu popisujícího t itabulky – Zam stnanci, Výplaty a Odd lení – a jejich vzájemné vztahy.

Zam Rodné P íj Odd

stnanciíslo

menílení_ íslo

Výplaty Rodné íslo Den_výplaty

ástka

Odd lenílení_ ísloOdd

Název

Rela ní schéma

3.2.3 Implementa ní úroveNa implementa ní úrovni vybíráme konkrétní databázový systém, ve kterém vytvo íme datovou základnu. Po jeho výb ru m žeme za ít využí-vat i r zných nestandardních funkcí zvoleného prost edí. Jejich použití bychom však m li d kladn zvážit, zejména kv li možnému pozd jšímup echodu na jiný databázový systém. Z hlediska jazyka SQL je nutné na této úrovni vzít v úvahu i možné díl í odlišnosti v p íkazech, zejména ve skupin p íkaz pro definici dat (DDL).

Page 52: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

52 NÁVRH DATOVÉ ZÁKLADNY _______________________________________

�3.3 Slovník dat Slovník dat (z anglického „data dictionary“) popisuje strukturu všech objekt uložených v databázi. Jsou zde uloženy informace o existujících tabulkách a jejich sloupcích, popis omezení pro data v tabulkách, popis definovaných index a další charakteristiky dat používané pro zrychlení zpracovávání p íkaz ( kapitola 4).

Jednou z podmínek rela ních databázových systém je, že i tyto infor-mace jsou uloženy v rela ních tabulkách a jsou dosažitelné pomocí jazyka SQL. V každém databázovém systému se proto m žeme setkat s r znýmpo tem tzv. systémových tabulek. Z našeho hlediska se jedná o normální tabulky a m žeme zjistit jejich obsah pomocí p íkazu . Názvy tabulek za ínají ve v tšin p ípad p edponou . Nap íklad názvy a další charakteristiky tabulek bývají uloženy v tabulce s názvem

. Pomocí p íkazu zjistíme veškeré informace o existujících tabulkách v databázi:

Podobn existují i tabulky obsahující názvy a typy datových sloupc ,názvy uživatel atd. Všechny tyto informace m žeme zjistit za p edpo-kladu, že známe názvy systémových tabulek.

Systémové tabulky sice m žeme íst, ale bývá zakázáno v nich údaje m nit. Databázový systém nám ani nedovolí provést p íkaz ,

nebo s t mito tabulkami. Pokud se n jakým zp sobemporuší data uložená v t chto tabulkách, ztratíme celou databázi a všechna v ní uložená data.

Názvy systémových tabulek a jejich popis jsou sou ástí dokumentace ke každému databázovému prost edí.

Page 53: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

44 SQL pro pokro ilé

Kapitola 4

SQL PRO POKRO ILÉ4.1 Transakce...................................................................................544.2 ízení práce více uživatel .......................................................56

4.2.1 Sdílený p ístup k dat m.......................................564.2.2 P ístupová práva ..................................................58

4.3 Rozší ení jazyka SQL ................................................................634.3.1 Procedury ............................................................634.3.2 Trigger.................................................................64

4.4 Optimalizace...............................................................................664.4.1 Optimalizace datové základny.............................664.4.2 Optimalizace zpracování SQL p íkaz ................67

Page 54: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

54 SQL PRO POKRO ILÉ ___________________________________________

4.1 Transakce �

Jedním ze základních problém pro udržení konzistence dat v databázi je situace, kdy b hem zpracování p íkazu dojde k nestandardnímuukon ení práce s databází. Jeho p í inou m že být nap íklad fyzickáchyba za ízení po íta e nebo výpadek elektrického proudu. Nastane-li tato chyba b hem p íkazu, který aktualizuje hodnoty v databázi, stáva-jí se data nekonzistentními – zvýšení platu se provedlo pouze u ástizam stnanc , a ne u všech, jak bylo zamýšleno; byl vymazán zam st-nanec z tabulky zam stnanc , ale již se nestihlo vymazat všechny jehopod ízené záznamy (výplaty, ešené úkoly …) apod. Z t chto d vodbyl vytvo en koncept transak ního zpracování.

Transakce je ned litelný logický celek, který bude bu proveden celý, nebo se neprovede žádná jeho ást. Transakce se skládá z SQL p íkaz , které jsou postupn vykonávány.

Od za átku transakce až do jejího ukon ení p íkazem jsouvšechny zm ny provedené v datech uschovány, aby bylo možnév libovolném okamžiku provést návrat do stavu, který byl na za átkutransakce. Dojde-li p ed ukon ením transakce k chyb (nap . vlivemvýpadku proudu), jsou p i op tovném spušt ní databáze všechna data uvedena do stavu, v jakém se nacházela na za átku transakce. Nem žese tedy stát, aby se databáze dostala do nekonzistentního stavu tím, že by se provedl pouze p íkaz vymazání zam stnance z tabulky zam st-nanc a již by se nestihlo provést vymazání všech ostatních, na n j seodkazujících záznam . Procesu, který provede návrat ke stavu na po átku transakce, se íká „odrolování“ (z anglického rollback). Odro-lování je možné vyvolat kdykoliv p ed ukon ením transakce pomocíp íkazu .

Zadáním p íkazu je aktuální transakce ukon ena a všechnydosud provedené zm ny jsou natrvalo uloženy do databáze. V tomtookamžiku za íná nová transakce, která bude ukon ena dalším zadánímp íkazu .

Po zadání p íkazu již není možný návrat do stavu, ve kte-rém byla data na za átku transakce.

Page 55: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

___________________________________________________ TRANSAKCE 55

4.1.1.1 Možné problémy s transakcemi �P es nespornou ú elnost transakcí se m žeme dostat do situace, kdy

nám jejich existence za ne vadit. Jedná se zejména o p ípady aktuali-zace velkého množství dat – jejich zm nu nebo mazání. Aby byl mož-ný návrat do stavu na po átku transakce, musí databázový systémukládat všechny zm n né nebo vymazávané ádky na p edem vyhra-zené místo. Máme-li tabulku o velikosti 800 MB, ze které chcemevymazat polovinu ádk , musíme mít k dispozici dalších 400 MB prostoru na disku. Databázovému systému musíme umožnit, aby do tohoto prostoru do asn ukládal informace o zm nách v databázi. Po ukon ení transakce p íkazem m žeme tento prostor op t zru-šit.

Oracle V systému Oracle se prostoru pro ukládání informací o zm náchv datech íká . Více informací se dozvímev referen ní ásti pod heslem .

Page 56: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

56 SQL PRO POKRO ILÉ ___________________________________________

4.2 ízení práce více uživatel�

M že-li s jednou databází pracovat více uživatel , musíme ešit dva základní problémy:1. p ístup více uživatel ke stejným dat m v jeden okamžik,2. p ístupová práva uživatel k dat m uloženým v databázi.

4.2.1 Sdílený p ístup k dat mPracuje-li s databází v jeden okamžik více uživatel , nem žeme zaru-it, že se nepokusí v jeden okamžik pracovat se stejnými daty. P itom

se musí rozlišovat dva zp soby p ístupu:þ tení dat, bez možnosti jejich aktualizace, þ aktualizace dat. První p ípad je v tšinou ešen na nižší úrovni (opera ní systém nebo p ímo fyzická úrove tecího za ízení), protože je nutné rozhodnout pouze o tom, který uživatel požadovaná data p e te jako první a který až jako druhý. Skute né problémy nastávají v okamžiku, kdy jedenz uživatel nebo více uživatel sou asn chce provést aktualizaci dat.

P edstavme si situaci, kdy máme zjistit celkové mzdové náklady ve firm . Zadáme tedy následující dotaz do tabulky zam stnanc :

B hem zpracování tohoto dotazu bude ten ádek po ádku v tabulce zam stnanc a budou s ítány hodnoty ve sloupci . Ve stejné dobvšak mzdová ú etní z vedlejší kancelá e zadá p íkaz, který má zvýšit mzdy všem zam stnanc m z druhého odd lení o 10 %:

Op t bude procházen ádek po ádku a hodnota ve sloupci plat bude zvýšena o 10 %. Operace je obvykle pomalejší než dotaz

, a proto by se mohlo stát, že do sou tu plat budou zahrnuty n které platy po zvýšení o 10 % (ze za átku tabulky) a dále platy zam stnanc z konce tabulky, u kterých se zvýšení ješt nesta i-lo provést. Výsledný sou et bude zavád jící, protože neodpovídá stavu p ed ani po zvýšení plat .

Page 57: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_____________________________________ ÍZENÍ PRÁCE VÍCE UŽIVATEL 57

Tento problém se zcela odstraní použitím transakcí. Z p edchozíhooddílu popisujícího transakce víme, že se zm ny do databáze prove-dou až po skon ení transakce – po zadání p íkazu . Dokud mzdová ú etní (nebo program, se kterým pracuje) neukon í aktuální transakci, nebude zvýšení plat viditelné pro žádného dalšího uživate-le a sou et bude odpovídat plat m p ed jejich 10% zvýšením.V okamžiku, kdy je transakce ukon ena, se provede zvýšení plat u všech zam stnanc naráz a všechny následné dotazy na zjišt -ní sou t plat budou vracet sou et plat po jejich zvýšení.

4.2.1.1 Zamykání datV p ípad , že více uživatel chce v jeden okamžik stejná data aktuali-zovat, již nevysta íme pouze s transakcemi a musíme použít složit jšímechanismy. P edstavme si situaci, kdy chceme odm nit dobré pra-covní výkony pana Adámka tím, že mu zvýšíme plat o 1.000,– Kz 10.000,– K na 11.000,– K . Shodou okolností bude ve stejný oka-mžik mzdová ú etní plošn zvyšovat platy všem zam stnanc m o 5 %. Nyní bude velmi záležet na po adí zpracování obou p íkaza ukon ení transakcí: þ Poda í se nám zvýšit plat o 1.000,– K a ukon it transakci p íkazem

. Teprve potom bude mzdovou ú etní zadán p íkaz na plošné zvýšení plat .

þ Nejprve se provede plošné zvýšení v etn ukon ení transakce a potom zvýšení platu o 1.000,– K .

Výsledný plat bude: (10000 + 1000) * 1.05 = 11.550,– K

Výsledný plat bude: (10000 * 1.05) + 1000 = 11.500,– Kþ P ed ukon ením transakce zvyšující plat o 1.000,– K bude zadán

p íkaz na 5% valorizaci plat . Následuje ukon ení první transakce, a potom ukon ení druhé transakce. Výsledný plat bude: 10000 * 1.05 = 10.500,– K

þ Totéž, ale nejprve se provede ukon ení druhé transakce, a potomukon ení transakce první. Výsledný plat bude: 10000 + 1000 = 11.000,– K

Dostali jsme ty i r zné výsledky v závislosti na vcelku náhodnémpo adí zadání p íkaz u obou transakcí.

Page 58: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

58 SQL PRO POKRO ILÉ ___________________________________________

Aby nemohlo k této situaci dojít, existují v databázových systémechtzv. zámky, které zabra ují aktualizaci dat, která již n kdo „zamkl“pro svoji pot ebu aktualizace. Rozeznáváme t i druhy zámk :� Sdílený

Data se používají pro tení. Více uživatel m že najednou íst stej-ná data.

Aktualiza níData budou aktualizována. Ostatní uživatelé mohou data íst, ale nemohou je aktualizovat.

Exkluzivní Data jsou m n na, p idávána nebo mazána. Ostatní uživatelé nemajív tomto okamžiku žádný p ístup k dat m.

V p ípad existence zámk by na požadavek aktualizace platu zam st-nance databázový systém oznámil, že data jsou aktualizována jinýmuživatelem. Na tv rcích databázové aplikace závisí, jak situaci oznámíuživateli a jestli dovolí aktualizaci dat v pozd ji. Po ukon ení transak-ce jsou všechny zámky automaticky uvoln ny.

DeadlockP i zamykání dat m že dojít k velmi nep íjemné situaci, kdy si dvtransakce navzájem uzamknou data a pak se nemohou do kat jejichuvoln ní. Stane se tak v p ípad , že první transakce zamkne ást dat a než stihne uzamknout zbylou ást, je tato ást uzam ena druhou trans-akcí. V p ípad , že by druhá transakce skon ila a uvolnila zámky,mohla by první transakce data uzamknout a pokra ovat dál. M že se však stát, že druhá transakce bude chtít pracovat s daty, které jsouuzam eny první transakcí. Nyní nem že ani jedna z transakcí pokra-ovat, zámky nebudou nikdy uvoln ny a nastává deadlock.

V databázových systémech bývá tato situace ešena tak, že po vyprše-ní ur itého asového limitu je ekající transakce násiln ukon ena a provede se zp tné odrolování dat.

4.2.2 P ístupová práva Pracuje-li s databází více uživatel , není žádoucí, aby všichni mohliprovád t v databázi zm ny, p ípadn , aby m li p ístup ke všem infor-macím uloženým v databázi.

Page 59: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_____________________________________ ÍZENÍ PRÁCE VÍCE UŽIVATEL 59

P ístupová práva se týkají vždy jednoho databázového objektu (ta-bulky, pohledu apod.) a konkrétního uživatele. Rozlišujeme dv sku-piny p ístupových práv: � Právo na tení

Uživatel ví o existenci daného objektu a m že p e íst data v n muložená. Uživatel s právem na tení u tabulky zam stnanc m žeprovést p íkaz a všechny další dotazy ,které používají tabulku .

Právo na zápis (aktualizaci) Umož uje provád t zm nu databázového objektu a dat v n m ulo-žených. Do této skupiny pat í právo na provedení p íkazu ,

, a právo na p idání omezení nad tabulkou nebo n -kterými sloupci (pomocí p íkazu . Právo na zápis bývá v tšinou spojeno s právem na tení.

Automaticky jsou všechna práva p id lena uživateli, který objekt(nap íklad tabulku) vytvo il. Ten má zárove právo p id lovat tato práva dalším uživatel m, v etn práva na další p id lování vlastn -ných práv. Práva se p id lují pomocí p íkazu a odejmout jem žeme pomocí p íkazu .

P id lení práva Chceme-li p id lit právo na tení údaj z tabulky zam stnanc uživa-teli , zadáme následující p íkaz:

Uživatel s tímto jménem m že nyní provád t libovolný dotaz do tabulky zam stnanc . Nem že však provést žádnou zm nu dat v tabulce. Chceme-li, aby mohl provád t i p idávání, mazání ádka zm nu hodnot, musíme mu p id lit další práva:

Všechna práva m žeme p id lit i najednou pomocí klí ového slova :

Uživatel sice dostal všechna práva k tabulce zam stnanc , ale tato práva nem že sám nikomu p id lit. Aby mohl sám p id lovat práva na tuto tabulku, musíme výslovn uvést modifikátor

:

Page 60: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

60 SQL PRO POKRO ILÉ ___________________________________________

� Od tohoto okamžiku m že uživatel p id lovat právo na teníz tabulky zam stnanc dalším uživatel m.

Zvolená práva m žeme najednou p id lit všem uživatel m pomocíklí ového slova :

Všichni uživatelé mohou nyní provád t dotaz do tabulky za-m stnanc .

Odejmutí práv P id lená práva m žeme uživateli odejmout pomocí p íkazu .Jeho syntaxe je podobná jako u p íkazu . Následující p íkazodejme uživateli všechna jeho práva na tabulku zam stnanc :

Odejmout m žeme i jedno samostatné právo:

4.2.2.2 Pohled jako forma ízení p ístupových práv Jako velmi užite né se jeví použití dynamických pohled ( p íkaz

) jako formy ízení p ístupových práv.P i vytvá ení pohledu m žeme vybrat pouze n které sloupce a také

m žeme omezit ádky, které bude obsahovat. K vlastní tabulce za-m stnanc nebude mít krom správce databáze p ístup žádný uživatel. Nad touto tabulkou bude definován jeden nebo více pohled , který bude obsahovat pouze podmnožinu sloupc a ádk p vodní tabulky.Pomocí politiky p id lování p ístupových práv umožníme konkrétní-mu uživateli p ístup pouze ke zvolenému pohledu.

Ve v tšin firem bývá utajena výše plat zam stnanc . Proto není žádoucí, aby si jednotliví zam stnanci mohli pomocí p íkazuzjistit výši platu od vrcholového managementu až po nejnižší pozice. Informace o výši platu však v tabulce zam stnanc být musí, mini-máln pro tisk výplatních pásek. Vytvo íme tedy speciální pohled, který bude zobrazovat p esnou kopii tabulky zam stnanc , ovšem bez výše platu:

Page 61: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_____________________________________ ÍZENÍ PRÁCE VÍCE UŽIVATEL 61

�Dále umožníme všem uživatel m, aby mohli pohled používat ve svých dotazech a naopak zakážeme jakýkolivp ístup k tabulce :

Od tohoto okamžiku mohou všichni uživatelé pracovat s pohledem stejn , jako d íve s tabulkou . Nemohou však zjistit

výši platu. Ve firm však existují zam stnanci, kte í výši platu znát musí. Jed-

ná se nap íklad o mzdové ú etní. Pro tento typ zam stnanc bychompot ebovali sloupec s výší platu zachovat. P esto bychom cht li zatajitplaty nejvyššího vedení. Vytvo íme tedy pohled, který bude obsahovat všechny sloupce tabulky zam stnanc , ale budou v n m chyb t n kte-ré ádky (vrcholového vedení, která má p i azeno fiktivní íslo odd -lení 99):

P ístupová práva k tomuto pohledu p id líme pouze paní Novákové s uživatelským jménem , která je mzdovou ú etní. Pro ostat-ní zam stnance nebude tento pohled viditelný a nebudou tedy op tmoci zjistit výše plat .

4.2.2.3 Role Zamyslíme-li se více nad p edchozím p íkladem, zjistíme, že obsahujepotenciální problémy. Ty se vyskytnout v p ípad , že paní Nováková odejde z firmy nebo že p estane být mzdovou ú etní. Tehdy musímezrušit všechna jí p id lená p ístupová práva a p id lit je nové mzdovéú etní. Je z ejmé, že se m že jednat o velké množství p ístupovýchpráv k velkému množství databázových objekt . Práv role nás t chtoproblém ušet í.

Rolí rozumíme chování, které vyplývá z postavení lov ka ve spo-le nosti nebo p enesen i ve firm . Rolí editele firmy je ídit jejíchod, rozhodovat o plánech do budoucna a reprezentovat firmu v iokolí. Role mzdové ú etní naproti tomu znamená výpo et mezd jed-

Page 62: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

62 SQL PRO POKRO ILÉ ___________________________________________

notlivým zam stnanc m, zajiš ování bankovek p ed dnem výplat apod.� Existence rolí nám umož uje odd lit p ístupová práva od konkrét-ních uživatel . Vidíme, že innosti vykonávané v jednotlivých rolích jsou stále stejné, bez ohledu na to, jestli je editelem pan Adámeknebo Ji í ek, mzdovou ú etní paní Nováková nebo Veselá apod. Do-konce je možné, že editel, pan Adámek, bude po jistou dobu plnit roli mzdové ú etní, dokud se mu nepoda í sehnat novou po odchodu paní Novákové. S innostmi typickými pro danou roli jsou pak spojenai p ístupová práva, která musí být p id lena. Proto je výhodné vytvo itnejprve množinu rolí, které se vyskytují ve firm , a t m p id litvšechna p ístupová práva stejným zp sobem, jako jsme je d íve p id -lovali jednotlivým uživatel m. Vytvo íme nap íklad roli ,které p id líme všechna práva na tabulku zam stnanc . Dále vytvo í-me roli , která bude moci pracovat s pohledem

. Všichni zam stnanci budou mít právo na dotaz do pohledu :

Nyní provedeme p id lení rolí uživatel m:

V p ípad , že paní Nováková z firmy odejde a roli mzdové ú etní za ni p ebere pan Adámek, sta í zadat následující dva p íkazy:

Až se poda í najmout novou ú etní paní Veselou, budou ji všechna práva spojená s touto rolí p id lena pomocí p íkazu:

Pan Adámek si m že ponechat roli nebo ji m žezrušit p íkazem .

Page 63: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ ROZŠÍ ENÍ JAZYKA SQL 63

4.3 Rozší ení jazyka SQL �

Jazyk SQL se neustále vyvíjí a tv rci databázových systém se snaží neustále reagovat na požadavky uživatel a tv rc databázových aplikací. Mezi tato rozší ení pat í možnost definice procedur jakobloku SQL p íkaz a dále automatické vyvolání SQL p íkazu nebo celé procedury p i vzniku ur ité události – trigger (anglicky „spouš “).

4.3.1 Procedury S procedurami se m žeme setkat ve v tšin programovacích jazyk .Jedná se o posloupnost p íkaz , která má své jméno a v p ípad pot e-by ji m žeme vyvolat z r zných míst programu. Procedura m žepracovat s parametry, které ji p edáme p i jejím volání. Vlastní t loprocedury se skládá z p íkaz , které mohou být bu SQL p íkazy,nebo p íkazy p evzatými z n kterého procedurálního jazyka (for-cykly, p i azení, volání procedury atd.).

Z hlediska jazyka SQL se jedná o porušení jeho základního princi-pu. Jazyk SQL je navržen jako neprocedurální jazyk, kterým popisu-jeme, „co chceme“, a ne „jak to chceme ud lat“. V dotazu íkáme, že chceme vybrat ty a ty sloupce z té a té tabulky, a navíc, že

vybrané ádky musí spl ovat ur itou podmínku. Kde je tabulka fyzic-ky umíst na a jakým zp sobem bude vybrána požadovaná množinaádk , nás nezajímá. Naproti tomu u procedurálních jazyk popisuje-

me p esn posloupnost krok , které se mají provést. P i provád níprogramu jsou pak všechny kroky vykonány p esn tak, jak jsme jezadali, což ale nemusí vést vždy k požadovanému výsledku.

Existují situace, kdy je vhodné použít neprocedurální jazyk, a nao-pak situace, pro které se více hodí jazyk procedurální. Proto bylyprocedury p idány do databázových systém a m žeme je zejména p ivytvá ení databázových aplikací používat sou asn s p íkazy jazykaSQL. P íkazy, které se mohou v procedurách používat, a jejich synta-xe závisí na databázovém prost edí, které používáme. Svým rozsahemjsou rovnocenné s vlastním jazykem SQL, a proto se jimi nebudemev této publikaci zabývat.

Page 64: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

64 SQL PRO POKRO ILÉ ___________________________________________

4.3.2 Trigger � Trigger je SQL p íkaz nebo procedura, která je spušt na p i vzniku

ur ité události (proto název trigger – anglicky „spouš “). Touto udá-lostí m že být p idání ádku do tabulky, zm na hodnot ve sloupci nebo vymazání ádku z tabulky.

Pomocí trigger m žeme ešit zajišt ní integrity dat v p ípad , že databázový systém neumož uje její zajišt ní automaticky nebo pot e-buje provést dodate né akce. Máme-li tabulku zam stnanc a dále tabulku výplat, která obsahuje výplaty zam stnanc , musíme zajistit,že se po vymazání zam stnance vymažou i všechny jeho výplaty.K tomu použijeme následující trigger:

Po každém vymazání ádku v tabulce zam stnanc je vyvolán p íkaz, který vymaže

všechny výplaty práv mazaného zam stnance.Podobn m žeme zajistit, že po vymazání odd lení bude automa-

ticky nastaveno íslo odd lení na hodnotu u všech zam stnanc ,kte í do rušeného odd lení pat ili:

Podobn jako pro mazání ádk m žeme definovat triggery i pro p idávání ádk ( ) a pro aktualizaci hodnot v ádku ( ).V p ípad p íkazu máme možnost ur it sloupce, jejichž aktua-lizace trigger vyvolá. Máme-li z d vodu rychlého zpracování duplicit-n uloženo p íjmení zam stnance i v tabulce výplat u jeho výplaty,musíme zajistit, že se provede jeho zm na i v tabulce výplat:

Page 65: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ ROZŠÍ ENÍ JAZYKA SQL 65

�Existuje velké množství situací, kdy je vhodné trigger použít. Významtrigger se ješt zv tšuje v p ípad , že místo jednoho SQL p íkazumohou vyvolat celou proceduru. Na druhou stranu je nutné vzít v úvahu ur ité nebezpe í, které použití trigger p edstavuje. Jejichvyvolání je natolik skryté, že zvlášt u velkých databázových aplikací m žeme na existenci n kterého z nich zapomenout. V p ípad hledání chyby v zadávaných SQL p íkazech pak m žeme strávit dlouhé hodi-ny, než si uv domíme všechny d sledky, které má vyvolání triggeru.

Definice trigger je zatím pouze v p ipravovaném návrhu standardu SQL3. Proto se m žeme setkat s velkými odlišnostmi jejich syntaxemezi r znými databázovými systémy.

Page 66: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

66 SQL PRO POKRO ILÉ ___________________________________________

4.4 Optimalizace �

Návrh datové základny podle pravidel z p edchozí kapitoly nebo obecn podle libovolné metodiky umož uje vytvo it logicky správnou datovou základnu odpovídající popisované realit . V žádném p ípadvšak takto nevytvo íme datovou základnu optimalizovanouz n kterého dále uvedeného hlediska.

4.4.1 Optimalizace datové základny P ed vlastní optimalizací datové základny si musíme zvolit hledisko, podle kterého chceme optimalizovat. Obecn lze íct, že optimalizacev jednom sm ru je v rozporu s optimalizací ve sm ru jiném:1. Optimalizace místa na pevném disku:

Snažíme se, aby struktura dat zabírala co nejmenší prostor na pev-ném disku po íta e:

Jako první se zam íme na indexy, které nejsou pro vykonáváníp íkaz nezbytné a zabírají relativn velký prostor. Jejich odstra-n ním však zna n zpomalíme zpracovávání p íkaz , zejménaobsahujících spojování tabulek a t íd ní.Dále se pokusíme nahradit co nejv tší množství opakujících se dat samostatnými tabulkami ve form íselník – k estní jménanebudeme zadávat do tabulky zam stnanc , ale do zvláštní tabul-ky k estních jmen. ím více bude zam stnanc se stejným k est-ním jménem, tím více místa ušet íme, protože k estní jméno bude uloženo pouze jednou. Podobn mohou být ve zvláštní tabulce názvy ulic apod. Z takto rozt íšt nou databází se nebude pracovat p íjemn , vzhledem k velkému množství tabulek a nutnosti jejichastého spojování.

2. Optimalizace rychlosti získání informací:Snažíme se co nejvíce zkrátit as nutný pro tení dat z databáze:

Vytvo íme indexy všude tam, kde budeme tabulky spojovat, t íditnebo omezovat pomocí podmínek.Snažíme se zachovat co nejmenší po et r zných tabulek, aby ne-bylo nutné asto tabulky spojovat.V tabulkách ponecháváme i duplicitní informaci, aby nebylo nut-né spojování s jinou tabulkou. Duplicita je však nebezpe ná

Page 67: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_________________________________________________ OPTIMALIZACE 67

z hlediska pozd jší aktualizace, kdy opomene zaktualizovat všechny výskyty dané hodnoty. �Všechny uvedené body vedou navíc k nár stu objemu dat

a prodloužení doby nutné na aktualizaci dat. 3. Optimalizace rychlosti aktualizace:

Snažíme se co nejvíce zkrátit as nutný pro aktualizaci dat v databázi:

Omezíme používání index nebo je b hem aktualizace odstraní-me a pozd ji znovu vytvo íme.Co nejvíce omezíme duplicity v datech, abychom mohli data ak-tualizovat pouze na jednom míst .Aktualizace tabulek s menším po tem sloupc a ádk probíhá rychleji, proto se snažíme vytvo it v tší množství jednoduššíchtabulek.

Jak tedy máme datovou základnu optimalizovat? V konkrétním p ípa-d musíme volit vhodnou kombinaci rychlosti zpracování dotaza místa, které databáze zabírá. Jako hlavní hledisko je však ve v tšinp ípad žádoucí ponechat snadnou pochopitelnost celé datové základ-ny a její snadnou údržbu. Veškeré „proh ešky“ proti istot návrhu jenutné ádn zdokumentovat, aby se na n p i pozd jších úpravách a zásazích do p íkaz nezapomn lo.

4.4.2 Optimalizace zpracování SQL p íkazKaždý databázový systém používá obecná pravidla zpracování SQL p íkaz , zejména dotazu : P ednost restrikce p ed spojováním tabulek

Operace restrikce (omezení množiny zpracovávaných ádk ) seprovád jí nejd íve. Zabrání se tak spojování ádk , které budou pozd ji stejn vy azeny, protože nesplní podmínku. Mezi podmín-kami se navíc první vyhodnocují ty nejsiln jší (nejvíce omezujícímnožinu ádk ) – nap íklad podmínka obsahující operátor = (rovnost) je vyhodnocována d íve než podmínka obsahující ope-rátor < (menší než).

Optimalizace spojování tabulek P i spojování tabulek je výhodn jší k ádk m v tší tabulky dohle-dávat ádky z menší tabulky. Existují-li v obou tabulkách indexy,

Page 68: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

68 SQL PRO POKRO ILÉ ___________________________________________

použije se tzv. slévání, kdy se zárove prochází oba indexya vyhledávají se shodné hodnoty v obou indexech. � Využití existujících indexP i restrikci ádk pomocí podmínky a p i set íd ní ádk pomocí

se použijí indexy všude tam, kde je to možné.

Vyšší úrove optimalizace nabídne databázový systém v p ípad , že má k dispozici ur itou charakteristiku dat v tabulkách. Mezi základní charakteristiky pat í:þ po et ádk v tabulce, þ pr m rná hodnota ve sloupci, þ rozptyl hodnot ve sloupci.

Pomocí t chto a dalších charakteristik m že databázový systém roz-hodnout o nejvýhodn jším zp sobu zpracování p íkazu – které tabul-ky budou spojovány jako první, je-li rychlejší p ipojovat tabulku Ak tabulce B nebo naopak B k A atd.

Tím, jak se postupn m ní data uložená v tabulkách – jsou p idává-ny nové ádky, n které jsou naopak mazány atd. – p estávají být cha-rakteristiky dat aktuální. Bylo by sice možné, aby se po každé aktuali-za ní operaci provedlo i p epo ítání t chto charakteristik, ale to byvedlo k výraznému snížení výkonu (uv domme si jen, že po každé aktualiza ní operaci se musí provést i aktualizace index , kterých se operace dotkla a pouze to zabere relativn hodn asu). Proto jev databázových systémech k dispozici speciální p íkaz, který provede p epo ítání t chto charakteristik (nap . ,

apod.). Na správci databáze pak je, aby se toto p epo ítávání provád lo pravideln a nedocházelo tak k zastarání charakteristik.

4.4.2.2 Zákaz použití charakteristik Ve specifických p ípadech se m že stát, že data v tabulce mají natolik zvláštní strukturu, že využití informací o jejich charakteru vede spíše ke zpomalení než ke zrychlení zpracování p íkaz . Pomocí p íkazu na vytvá ení charakteristik lze charakteristiky i vymazat. P i asov kri-tických aplikací je vhodné vyzkoušet rychlost zpracování p íkazs použitím a bez použití charakteristik a zvolit lepší variantu.

Page 69: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_________________________________________________ OPTIMALIZACE 69

�4.4.2.3 Zjišt ní postupu zpracování p íkazuVe v tšin databázových systém existuje p íkaz, který umožní zjistit postup zpracování zadaného SQL p íkazu. Obvykle bývá pojmenován

z anglického „vysv tli plán pro“. Za tato t i slova zadáme celý text SQL p íkazu stejn , jako bychom jej zadali pro jeho provedení:

V závislosti na použitém databázovém prost edí se objeví bu na obrazovce, nebo jako ádky p eddefinované tabulky postup, kterým bude p íkaz (v tomto p ípad vykonán). Zejména je d ležité,pro jaké operace budou použity indexy. Zjistíme-li, že pro spojování tabulek nebo pro set íd ní podle sloupce nebyl použit index, je vhodné jej vytvo it. Samoz ejm je nutné vzít v úvahu i etnost použití tohoto indexu, abychom nevytvá eli p íliš mnoho index , které se témnikdy nepoužijí.

4.4.2.4 Ovlivn ní zpracování SQL p íkazuN která databázová prost edí rozši ují syntaxi SQL p íkaz o zna ky, kterými m žeme ur it požadovaný postup zpracování SQL p íkazu.Jedná se zejména o zákaz nebo vynucení použití ur itého indexu, po adí vyhodnocování podmínek apod. Zabývat se t mito záležitostmi má smysl teprve u velmi rozsáhlých databází, u kterých je hlavním kritériem doba odezvy. P i práci s obvyklým množstvím dat se m že-me spolehnout na algoritmy implementované v databázovém systému a používat b žné postupy zrychlování zpracování p íkaz – indexy.

Page 70: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 71: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

55 SQL v p íkladech

Kapitola 5

SQL V P ÍKLADECH5.1 Struktura dat používaná v p íkladech......................................725.2 P íkaz SELECT...........................................................................73

5.2.1 Definice sloupc ve výsledku..............................735.2.2 Se azení ádk na výstupu...................................745.2.3 Omezení po tu zobrazených ádk ......................745.2.4 Zjiš ování souhrnných údaj ...............................765.2.5 Seskupení ádk v tabulce ...................................765.2.6 Hodnota NULL ...................................................775.2.7 Práce s více tabulkami .........................................78

5.3 Aktualizace dat...........................................................................805.3.1 P idání ádk do tabulky .....................................805.3.2 Zm na hodnot v tabulce ......................................805.3.3 Vymazání ádk z tabulky...................................81

5.4 Definice struktury dat................................................................825.4.1 Tabulka................................................................825.4.2 Index....................................................................835.4.3 Pohled..................................................................83

Page 72: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

72 SQL V P ÍKLADECH ____________________________________________

�5.1 Struktura dat používaná v p íkladechV následujících p íkladech budou použity tyto tabulky:

Zam … zam stnanci

Sloupec Datový typ Popis rc varchar(10) rodné íslo; primární klíprijmeni varchar(50) p íjmení zam stnancejmeno varchar(20) k estní jméno zam stnanceplat numeric výše základního platu oddcis numeric íslo odd lení; cizí klídnarozeni date datum narození

Odd … odd lení

Sloupec Datový typ Popis oddcis numeric íslo odd lení; primární klínazev varchar(30) název odd lenísef varchar(10) rodné íslo šéfa; cizí klí

Vyplaty … výplata pro každého zam stnance v daném m síci

Sloupec Datový typ Popis rok numeric výplatní rok mesic numeric výplatní m síc (1 až 12) rc varchar(10) rodné íslo zam stnance;

cizí klípremie numeric m sí ní premie vyplata numeric celková výše výplaty

V každé tabulce jsou tu n vyzna eny sloupce tvo ící primární klí .

Page 73: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P ÍKAZ SELECT 73

�5.2 P íkaz SELECT

5.2.1 Definice sloupc ve výsledku Výpis všech informací (všech sloupc a všech ádk ) z tabulky za-m stnanc :

Výpis vybraných sloupc (p íjmení, výše platu a datum narození) z tabulky zam stnanc :

ísla a názvy všech odd lení z tabulky odd lení:

Výpis vybraných sloupc s pozm n ným názvem sloupce v záhlaví výsledku:

Výpo et výrazu v seznamu výstupních sloupc :

þ Se te do jednoho sloupce p íjmení a jméno zam stnance. P íjmení a jméno bude odd lené árkou. Celý sloupec bude nadepsán titulkem

.

þ Ve druhém sloupci bude zobrazen základní plat zam stnance zvý-šený o 10 %.

þ P evede všechny znaky v p íjmení na velká písmena. Seznam ísel odd lení, ve kterých pracuje alespo jeden zam stnanec,podle tabulky zam stnanc . Každé íslo odd lení bude v seznamu pouze jednou:

Page 74: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

74 SQL V P ÍKLADECH ____________________________________________

�5.2.2 Se azení ádk na výstupu Seznam všech zam stnanc se azený vzestupn podle rodných ísel:

Seznam zam stnanc set íd ný sestupn podle výše platu:

Totéž, ale pokud bude mít více zam stnanc stejný plat, budou se a-zeni abecedn podle p íjmení:

Totéž, ale s použitím ísla sloupce za :

5.2.3 Omezení po tu zobrazených ádkVýpis všech zam stnanc pracujících v odd lení íslo 2:

P íjmení a výše platu zam stnance s rodným íslem 401002103:

Rodné íslo zam stnance s p íjmením Adámek:

Page 75: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P ÍKAZ SELECT 75

�Výpis všech zam stnanc , jejichž plat p esáhne po 20% navýšení 12.000,– K :

Totéž, ale optimalizované zadání dotazu:

Názvy odd lení, která nemají šéfa (hodnota ve sloupci je ):

P íjmení a jméno všech zam stnanc , jejichž p íjmení za íná na ‘N’:

Názvy odd lení, jejichž šéf se nenarodil v b eznu ani v dubnu (v rod-ném ísle není na tvrté pozici 3 ani 4):

Výpis všech zam stnanc nepracujících v odd lení íslo 3, kte í se zárove narodili p ed rokem 1970:

nebo

Výpis všech zam stnanc mladších t iceti let, jejichž plat je vyšší nebo roven 10.000,– K :

Page 76: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

76 SQL V P ÍKLADECH ____________________________________________

�P íjmení a výše platu deseti zam stnanc s nejvyššími platy ve firm :MS JDBE

Oracle

5.2.4 Zjiš ování souhrnných údajCelkový po et zam stnanc ve firm :

Po et zam stnanc pracujících v odd lení íslo 1 a celkové mzdové náklady na toto odd lení:

Zjišt ní pr m rného, minimálního a maximálního platu ve firm :

Po et odd lení ve firm , která mají p id leného šéfa (hodnota ve sloupci není ) podle tabulky odd lení:

Po et šéf odd lení ve firm podle tabulky odd lení (dv r zná odd -lení mohou mít stejného šéfa):

5.2.5 Seskupení ádk v tabulce Po et zam stnanc v odd lení a jejich pr m rný plat:

Page 77: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P ÍKAZ SELECT 77

�Seznam zam stnanc v etn jejich ro ních p íjm v roce 1997:

ísla odd lení, ve kterých maximální plat nep esahuje 10.000,– K :

5.2.6 Hodnota NULL Zjišt ní celkové výše výplaty (plat + prémie) za p edpokladu, že pré-mie nemusí být zadané (sloupec obsahuje hodnotu ):MS JDBE

Oracle

þ V obou p ípadech je velikost prémií nahrazena hodnotou ‘0’ v p ípad , že prémie nejsou zadány (je ). Jedin tak dostaneme vždy alespo výši základního platu, a ne hodnotu , která je vý-sledkem výrazu .

Pr m rná výše prémií v etn zam stnanc , kte í nedostali prémie žádné (ve sloupci je hodnota ):MS JDBE

Oracle

Page 78: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

78 SQL V P ÍKLADECH ____________________________________________

�5.2.7 Práce s více tabulkami Seznam p íjmení zam stnanc v etn názvu odd lení, ve kterém pra-cují:

nebo

þ V obou p ípadech nebudou v seznamu uvedeni zam stnanci, kte ínemají p i azené odd lení.

þ V seznamu budou uvedeni všichni zam stnanci bez ohledu na to, jestli mají p i azeno odd lení.

þ V seznamu budou uvedena všechna odd lení bez ohledu na to, jestli v nich pracuje n který zam stnanec.

P ehled výplat zam stnanc za rok 1997 set íd ný podle m síce výpla-ty a dále podle p íjmení zam stnance:

Seznam šéf odd lení:

Seznam zam stnanc , kte í mají nadpr m rný plat ve firm :

Seznam zam stnanc , kte í mají nadpr m rný plat ve svém odd lení:

Page 79: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P ÍKAZ SELECT 79

�Seznam zam stnanc , kte í pracují v odd lení „Marketing“:

þ Modifikátor zajistí správný výsledek i v p ípad , že by v tabulce odd lení byla dv marketingová odd lení.

P íjmení a datum narození nejstaršího zam stnance (nebo zam stnan-c ) ve firm :

P íjmení a datum narození všech zam stnanc , kte í se narodili ve stejný den jako n kdo další ve firm . Seznam set ídit sestupn podle datumu narození:

þ Podmínka zajistí, že ve výsledku nebudou uvedeni úpln všichni zam stnanci. P i jejím neuvedení by byla podmínka spln na pro každého za-m stnance.

Page 80: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

80 SQL V P ÍKLADECH ____________________________________________

�5.3 Aktualizace dat

5.3.1 P idání ádk do tabulky P idání odd lení íslo 5 s názvem Marketing a rodným íslem šéfa 401002103 do tabulky odd lení:

Totéž, ale šéf nového odd lení není zatím ur en:

5.3.2 Zm na hodnot v tabulce Zvýšení platu všem zam stnanc m paušáln o 1.000,– K :

Zvýšení platu všem zam stnanc m o 20 %:

nebo také:

P e azení všech zam stnanc z odd lení íslo 3 do odd lení íslo 5:

Zvýšení platu o 10 % všem zam stnanc m, kte í nedosahují poloviny pr m rného platu ve firm :

Zvýšení platu o 1.000,– K všem zam stnanc m, kte í nedosahují ani poloviny platu šéfa ve svém odd lení (pokud šéf existuje):

Page 81: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________________________ AKTUALIZACE DAT 81

5.3.3 Vymazání ádk z tabulky Vymazání všech zam stnanc (tabulka zam stnanc však z stanezachována):

Vymazání všech záznam o výplatách zam stnance s rodným íslem 401002103:

Vymazání všech zam stnanc , kte í nepat í do žádného odd lení:

Vymazání všech záznam o výplatách zam stnance s p íjmením Adá-mek:

Vymazání všech odd lení, ve kterých nepracuje žádný zam stnanec:

Page 82: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

82 SQL V P ÍKLADECH ____________________________________________

�5.4 Definice struktury dat

5.4.1 Tabulka Vytvo ení tabulky odd lení ve struktu e, jak je definována na za átkutéto kapitoly:

Totéž, ale sloupec bude ozna en jako primární klí (hodnoty musí být jedine né a nesmí být ):

Totéž, ale ve sloupci musí být vždy n jaká hodnota (nesmí být ):

Totéž, ale sloupec je p ímo ozna en jako cizí klí do tabulky zam stnanc (hodnota zadávaná do tohoto sloupce musí existovat ve sloupci v tabulce zam stnanc ):

nebo jako omezení pro celou tabulku:

Totéž, ale íslo odd lení musí být v intervalu 1 až 20:

Page 83: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________ DEFINICE STRUKTURY DAT 83

P idání sloupce do tabulky zam stnanc . Hodnoty zadané do tohoto sloupce musí být vždy v tší nebo rovny 0:

Vymazání sloupce z tabulky zam stnanc :

Odstran ní tabulky zam stnanc z databáze:

5.4.2 Index Vytvo ení indexu nad sloupcem v tabulce zam stnanc ,který umožní rychlé se azení zam stnanc podle abecedy:

Vytvo ení složeného indexu nad sloupci a , který ešíp ípad, kdy dva zam stnanci mají stejné datum narození. V tomto p ípad budou se azeni podle rodného ísla:

Vytvo ení jedine ného indexu nad sloupcem . Tento index zajistí, že do tohoto sloupce nelze vložit dv stejné hodnoty:

Odstran ní indexu s názvem :

5.4.3 Pohled Vytvo ení pohledu na tabulku zam stnanc , který p esn kopíruje její strukturu a všechna její data:

Page 84: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

84 SQL V P ÍKLADECH ____________________________________________

� Vytvo ení pohledu nad tabulkou zam stnanc , který neumož uje zjišt ní rodného ísla a datumu narození zam stnance:

Totéž, ale sloupec je p ejmenován na :

Pohled o stejné struktu e jako tabulka zam stnanc , ale obsahuje pouze šéfy:

Page 85: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

66 P íkazy jazyka SQL

Kapitola 6

P ÍKAZY JAZYKA SQL

6.1 D lení SQL p íkaz ....................................................................866.1.1 P íkazy pro manipulaci s daty .............................866.1.2 P íkazy pro definici dat .......................................876.1.3 P íkazy pro ízení dat ..........................................876.1.4 Ostatní p íkazy ....................................................87

6.2 P ehled SQL p íkaz ..................................................................886.2.1 Zápis SQL p íkaz ..............................................886.2.2 Abecední p ehled p íkaz ....................................896.2.3 Vytvo ení definice dat – CREATE....................1016.2.4 Zm na definice dat – ALTER ...........................1176.2.5 Rušení definice dat – DROP..............................122

Page 86: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

86 P ÍKAZY JAZYKA SQL ___________________________________________

6.1 D lení SQL p íkaz�

Pomocí SQL p íkaz zadáváme své požadavky databázovému systému. Ten je vyhodnotí a bu vrátí požadovaný výsledek, nebo provede zm nyv databázové struktu e (p ípadn jiné zm ny podle významu daného p íkazu).

SQL p íkazy d líme do ty skupin. P i b žné práci se budeme nej ast jisetkávat s p íkazy z první skupiny – p íkazy pro manipulaci s daty. P i vytvá-ení tabulek nebo jiných zm nách databázové struktury budeme používat

p íkazy z druhé skupiny – p íkazy pro definici dat. Ve víceuživatelských prost edích, kdy ke stejným dat m m že p istupovat najednou i více uživatel ,musíme pracovat s p íkazy pro ízení dat, které tvo í t etí skupinu p íkaz .Jedná se zejména o p id lování práv pro p ístup k dat m a dále o ízení trans-akcí. V každém databázovém systému se vyskytují i další p íkazy, které se zabývají správou databáze apod. Tyto p íkazy se liší v jednotlivých databázo-vých prost edích a tvo í tvrtou skupinu p íkaz .

6.1.1 P íkazy pro manipulaci s daty Jádrem jazyka SQL jsou p íkazy, které nám umož ují vyjád it, jaké výstupy a v jaké form chceme z databáze získat, p ípadn jakým zp sobem chceme existující data upravit. Nejd ležit jším p íkazem je nepochybn p íkaz

. Ten slouží pro získání požadovaných dat z databáze. Dalšími p íkazy pat ícími do této skupiny jsou p íkazy , a

, které slouží pro vkládání, aktualizaci a mazání ádk tabulky. Speciálním p íkazem je , který nám umož uje zjistit

postup zpracování SQL p íkazu. Známe-li tento postup, m žeme upravit tvar SQL p íkazu (formulaci podmínek, seskupení ádk apod.) nebo strukturu tabulek v databázi tak, abychom docílili rychlejšího zpracování p íkazu, a tím výrazn zkrátili dobu odezvy.

Tato skupina p íkaz je zkrácen ozna ována jako „DML“ – z anglického „Data Manipulation Language“.

6.1.1.1 Práce s transakcemi P íkazy z této skupiny neukon ují aktuální transakci. Aby se provedené zm nyv datech promítly napevno do databáze, je nutné zadat p íkaz .

Page 87: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ D LENÍ SQL P ÍKAZ 87

6.1.2 P íkazy pro definici dat �Pomocí p íkaz pro definici dat vytvá íme struktury databáze – tabulky, inde-

xy a další objekty, které se v databázi mohou vyskytovat. Již vytvo ené data-bázové objekty m žeme m nit nebo je z databáze odstranit.

Pro vytvo ení nových objekt se používají p íkazy za ínající slovem , pro jejich zm nu p íkazy za ínající a kone n pro odstran ní

objekt z databáze p íkazy za ínající slovem .Tato skupina p íkaz je zkrácen ozna ována jako „DDL“ – z anglického

„Data Definition Language“.

6.1.2.1 Práce s transakcemi P ed provedením kteréhokoliv p íkazu z této skupiny je provedeno ukon eníaktuální transakce. Všechny zm ny provedené od za átku transakce jsou uloženy do databáze.

6.1.3 P íkazy pro ízení dat M že-li s jednou databází pracovat více uživatel , je nutné rozlišit ty, kte ímohou údaje m nit, a ty které je mohou pouze prohlížet. Navíc ne všechna data mohou být k dispozici všem uživatel m. Jazyk SQL disponuje p íkazypro p id lení p ístupových práv na ur itá data ( ) a naopak pro odn tít chto práv ( ).

Práce v robustn jších databázových systémech m že být len na do logic-kých celk – transakcí. Mezi základní p íkazy pro práci s transakcemi pat í

a ( p íslušná hesla v referenci p íkaz ).Tato skupina p íkaz je zkrácen ozna ována jako „DCL“ – z anglického

„Data Control Language“. V systému Oracle jsou tyto p íkazy nazývány jako „TCC“ – z anglického „Transaction Control Commands“.

6.1.4 Ostatní p íkazyDo této skupiny pat í p íkazy pro správu databáze. Pomocí t chto p íkazp idáváme a odstra ujeme uživatele, nastavujeme r zné parametry, jako národní sady znak , zp soby t íd ní vzhledem k národním znak m, formáty datum apod.

Konkrétní množství a názvy p íkaz z této skupiny závisejí na používaném databázovém systému.

Page 88: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

88 P ÍKAZY JAZYKA SQL ___________________________________________

6.2 P ehled SQL p íkaz�

6.2.1 Zápis SQL p íkazP i zápisu SQL p íkaz musíme dodržovat syntaktická pravidla platná pro daný p íkaz, tak jak jsou uvedena v této kapitole. Grafická úprava t chtop íkaz však závisí zcela na nás a na vlastní provád ní nemá žádný vliv. Je proto vhodné p íkazy, zvlášt ty složit jší, lenit na více ádk tak, aby byly pro nás lépe itelné a snáze pochopitelné. Následující dva p íkazy jsou z hlediska databázového systému zcela totožné a budou vykonány naprosto stejn . Je však z ejmé, že p íkaz zapsaný ve druhé variant bude snáze pocho-pitelný:Varianta I

Varianta II

P i popisu syntaxe p íkaz jsou použity následující znaky:

Popis používaných symbol v definici syntaxe Symbol Význam

[ ] nepovinná ást{ } povinná volba jedné z uvedených možností

| odd lení variant, mezi kterými je možné vybírat < > parametr, za který se dosazuje konkrétní hodnota … možnost opakování’ ozna ení konstant typu et zec znak ( )

6.2.1.1 Velká a malá písmena Ve v tšin p ípad nerozlišují databázové systémy mezi velkými a malými písmeny p i zadávání klí ových slov jazyka SQL a názv databázových objek-t (tabulek, index apod.). Pro lepší itelnost jsou v této publikaci uvád na

Page 89: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 89

klí ová slova jazyka SQL velkými písmeny a názvy objekt písmeny malými,jak je vid t z p edchozí ukázky SQL p íkazu. Jedná se však pouze o konvenci, kterou nemusíme p i zadávání vlastních p íkaz dodržovat. �Pozor!þ P i zadávání znakových literál (nap . , apod.) se

rozlišuje mezi velkými a malými písmeny. Následující dotaz tedynenalezne všechny zam stnance s k estním jménem Petr, pokud u n kterého z nich bude k estní jméno zadáno nebo omylem

:

P i tvorb podmínek obsahující et zce znak jako konstanty musíme na uvedenou situaci dát pozor. Možným ešením je zadávání všech písmen ja-ko velká a použít funkci nebo její ekvivalent pro p evedení všech znak zadaných do sloupce tabulky na velká písmena:

6.2.2 Abecední p ehled p íkaz

ALTER zvláštní oddíl „Zm na definice dat – ALTER“ dále v této kapitole.

ANALYZE OracleProvedení analýzy dat v tabulce nebo indexu.

Syntaxe

Page 90: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

90 P ÍKAZY JAZYKA SQL ___________________________________________

Popis � Po velkých zm nách v obsahu tabulek je nutné zaktualizovat charakteristiky

t chto dat, aby databázový systém mohl optimalizovat provád ní SQL p íkaz( 4.3).

6.2.2.2 Vytvo ení informací o datech v tabulce Máme-li tabulku napln nu daty, m žeme provést jejich analýzu a uložení jejich charakteristik. Vytvo ením charakteristik o tabulce se automaticky provede i analýza index vytvo ených nad sloupci tabulky:

Po provedení p íkazu se do ásti databáze nazývané slovník dat uloží charak-teristiky dat v tabulce . Tyto charakteristiky jsou potom uloženy spole ns popisem struktury tabulky.

6.2.2.3 Charakteristiky velmi rozsáhlých tabulek Provád t analýzu dat ve velmi rozsáhlých tabulkách by bylo asov velmi náro né. Pokud víme, že data v tabulce mají stejné rozd lení, m žeme provést analýzu pouhé ásti z nich. Výsledek se pak nebude p íliš lišit od kompletní analýzy všech dat.

Chceme-li provést vytvo ení charakteristik pouze na základ 1000 ádk ,použijeme následující p íkaz:

Podobn m žeme vytvo it charakteristiku dat pouze na základ p ti procent ádk z tabulky:

6.2.2.4 Vymazání charakteristikVe specifických p ípadech se m že stát, že data v tabulce mají natolik zvláštní strukturu, že využití informací o jejich charakteru vede spíše ke zpomalení než ke zrychlení zpracování p íkaz . Pomocí p íkazu m že v tomto p ípad již vytvo ené charakteristiky vymazat. Databázový systém pak bude p i práci s danou tabulkou používat pouze obecná pravidla bez ohledu na data práv uložená v tabulce:

Page 91: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 91

Viz též

� COMMIT Ukon ení aktuální transakce.

Syntaxe

Poznámkaþ P íkazy a jsou ekvivalentní. V n kterých

databázových prost edích je nutné uvád t plnou formu.

Popis Zadáním p íkazu je aktuální transakce ukon ena a všechny dosud provedené zm ny jsou natrvalo uloženy do databáze. V tomto okamžiku za íná nová transakce, která bude ukon ena dalším zadáním p íkazu .

Po zadání p íkazu již není možný návrat do stavu, ve kterém byla data na za átku transakce.

Viz též

CREATE zvláštní oddíl „Vytvo ení definice dat – CREATE“ dále v této kapitole.

DELETE Vymazání ádk z tabulky.

Syntaxe

Page 92: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

92 P ÍKAZY JAZYKA SQL ___________________________________________

Popis � P íkaz vymaže z tabulky všechny ádky, které spl ují podmínku

zadanou za klí ovým slovem . Není-li tato podmínka uvedena, jsou z tabulky vymazány všechny ádky.

P íkaz vymaže z tabulky celé ádky. Pokud chceme pouze vymazat hodnotu v ur itém sloupci (nastavit ji na ), musíme použít p íkaz

. Chceme-li naopak odstranit celou tabulku, použijeme p íkaz.

6.2.2.5 Tabulka s definovanými indexy Jsou-li nad sloupci tabulky definovány indexy, bude zpracování p íkazu

probíhat pomaleji. Po vymazání každého ádku je totiž nutné provést aktualizaci indexu. Chceme-li vymazat z tabulky v tší množství dat, m že být rychlejší nejprve všechny indexy odstranit, potom provést p íkaz a nakonec indexy op t vytvo it.

P íkladVymazání všech zam stnanc z tabulky :

Vymazání všech zam stnanc , kte í pracují v odd lení íslo 2:

Viz též

DROP zvláštní oddíl „Rušení definice dat – DROP“ dále v této kapitole.

EXPLAIN PLAN FORZjišt ní postupu, kterým bude databázový systém zpracovávat ur itý SQLp íkaz.

Syntaxe

Page 93: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 93

kde <SQL_p íkaz> p edstavuje jeden z SQL p íkaz , ,, . �

Popis Zp sob zpracování SQL p íkazu závisí na pravidlech, která zadali tv rcidatabázového systému p i jeho tvorb . Tato pravidla mají za cíl co nejvícezkrátit dobu pot ebnou pro zpracování SQL p íkazu. Krom obecných pravi-del, která se uplatní bez ohledu na strukturu dat, jsou využívány i uložené charakteristiky dat ( p íkaz ).

asov nejnáro n jší je spojování dvou a více tabulek a vyhledávání zá-znam spl ujících zadanou podmínku. Proto se pravidla týkají zejména oka-mžiku, kdy je výhodné tabulky spojovat (v tšinou až po omezení ádk v obou tabulkách pomocí podmínek), kdy je výhodné použít indexy pro spojování tabulek nebo pro omezující podmínku atp. Pravidla jsou založena na r znýchheuristických analýzách a jsou jednotlivými firmami pe liv utajována. Proto jsou v r zných databázových systémem r zná a i zp sob zpracování jednoho a téhož SQL p íkazu m že být na r zných databázových systémech r zný.

P íkladZjišt ní zp sobu zpracování dotazu:

Po zadání p íkazu se objeví zp sob, kterým bude zadaný p íkaz zpracován. V závislosti na použitém databázovém systému bude výpis více i mén sro-zumiteln popisovat: þ jestli se bude provád t nejprve spojování tabulky zam stnanc

s tabulkou odd lení, nebo výb r zam stnanc s platem vyšším než 20.000,– K ;

þ jestli se bude p ipojovat tabulka odd lení k tabulce zam stnanc ,nebo naopak;

þ jestli pro spojování, výb r a set íd ní bude, nebo nebude použit index nad n kterým ze sloupc atd.

Odhalíme tak možnost p idání dalšího indexu, který výrazn zrychlí zpracová-ní dotazu nebo naopak existenci indexu nadbyte ného, který není nikdy použit

pouze zbyte n zabírá místo a zdržuje p i aktualizacích.a

Page 94: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

94 P ÍKAZY JAZYKA SQL ___________________________________________

Pozor!

� þ Zp sob zpracování SQL p íkazu bude u v tšiny databázových systém záviset i na uložených charakteristikách dat v tabulkách. P ed provád ním p íkazu je proto vhodné pro-vést aktualizaci t chto charakteristik ( p íkaz ).

Oracle Syntaxe

V systému Oracle je nutné uložit výsledek p íkazu do data-bázové tabulky. Tato tabulka musí mít odpovídají strukturu sloupc ( origi-nální dokumentace k systému Oracle). ádky obsahující zp sob zpracování SQL p íkazu budou identifikovány et zcem znak zadaným za klí ovýmislovy .

Nebude-li zadán název tabulky, bude výsledek uložen do tabulky s názvem , která musí p ed použitím p íkazu existovat.

Viz též

GRANT Ud lení práv uživateli na provád ní vyjmenovaných inností.

Syntaxe

nebo

kde

Page 95: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 95

� Popis Umož uje ud lit právo na provád ní p íkazu , , ,

nebo na vytvá ení omezení pro sloupce tabulky konkrétnímu uživate-li, roli nebo všem uživatel m. Druhá varianta p íkazu p id lujeuživateli danou roli ( 4.1.2).

P íkladP id lení práv na p íkaz nad tabulkou zam stnanc uživateli :

P id lení práva na aktualizaci sloupce a v tabulce zam st-nanc všem uživatel m:

P id lení všech možných práv na tabulku zam stnanc uživateli , který m že zárove tato práva p id lovat dalším uživatel m:

Viz též

INSERTP idání ádk do tabulky.

Syntaxe

Popis Nový ádek p idáme do tabulky uvedením hodnot pro všechny sloupce v tabulce. Tímto zp sobem m žeme p idat vždy pouze jeden ádek.

Více ádk najednou p idáme do tabulky pomocí vno eného dotazu , který musí mít stejnou strukturu seznamu výstupních sloupc (po et

a datové typy sloupc ), jako má tabulka, do které chceme ádky p idat. ádky,

Page 96: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

96 P ÍKAZY JAZYKA SQL ___________________________________________

které jsou výsledkem tohoto dotazu, jsou automaticky p idány k již existujícímádk m v tabulce. �

6.2.2.6 Tabulka s definovanými indexy Jsou-li nad sloupci tabulky definovány indexy, bude zpracování p íkazu

probíhat pomaleji. Po p idání každého ádku je totiž nutné provést aktualizaci indexu. Chceme-li p idat do tabulky v tší množství dat, m že být rychlejší nejprve všechny indexy odstranit, potom provést p íkaz a nakonec indexy op t vytvo it.

P íkladP idání nového zam stnance do tabulky zam stnanc , která má definovány sloupce – et zec znak , – desetinné íslo a – celé íslo:

P idání všech zam stnanc s hodnocením vyšším než 5 z tabulky do tabulky (ob tabulky mají stejnou strukturu):

Oracle V seznamu sloupc nemusíme uvést názvy všech sloupc v tabulce. Do sloup-c , jejichž jména neuvedeme, budou p i azeny hodnoty definované za klí o-vým slovem b hem vytvá ení tabulky ( p íkaz ).

Viz též

RENAMEP ejmenování tabulky, pohledu nebo sekvence.

Syntaxe

Page 97: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 97

Popis �Tabulku, pohled nebo sekvenci (p ípadn další objekt vyskytující se

v používaném databázovém prost edí) m žeme p ejmenovat. Ve všech SQL p íkazech budeme muset použít nový název. V okamžiku p ejmenovávánínesmí existovat jiný databázový objekt, který by se jmenoval stejn jako

nový_název>.<

Pozor!þ Pomocí p íkazu nelze p ejmenovávat sloupce v tabulce. Pro

p ejmenování sloupc slouží p íkaz .

P íkladP ejmenování tabulky zam stnanc ze na :

Viz též

REVOKEOdn tí d íve p id lených práv uživateli nebo roli.

Syntaxe

nebo

kde

Popis Umož uje odejmout právo na provád ní p íkazu , , ,

nebo na vytvá ení omezení pro sloupce tabulky konkrétnímu uživate-

Page 98: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

98 P ÍKAZY JAZYKA SQL ___________________________________________

li, roli nebo všem uživatel m. Druhá varianta p íkazu umož ujeodejmout roli danému uživateli ( 4.1.2). � P íkladOdejmutí práv na p íkaz nad tabulkou zam stnanc uživateli :

Viz též

ROLLBACK Návrat všech dat v databázi do stavu p ed za átkem transakce.

Syntaxe

Poznámkaþ P íkazy a jsou ekvivalentní. V n kterých

databázových prost edích je nutné uvád t plnou formu.

Popis Provede tzv. odrolování transakce – návrat dat do stavu, ve kterém byly na za átku transakce ( 4.0).

P íkladNávrat do stavu p ed za átkem transakce:

Oracle Návrat k uživatelsky definovanému asovému bodu Pomocí konstrukce <název_bodu_uložení> m žeme vrátit data v databázi do stavu, ve kterém se nacházeli v okamžiku, který jsme si pozna-menali pomocí p íkazu <název_bodu_uložení>.

Není-li tento asový okamžik uveden, provede p íkaz návrat na za átek transakce. Po provedení p íkazu jsou ztraceny všechny

Page 99: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 99

ozna ené snímky (savepoint) za bodem, ke kterému jsme se p íkazem vrátili. �

Návrat ke stavu uloženému pod názvem :

Viz též

SAVEPOINTUložení aktuálního stavu dat v databázi s možností pozd jšího návratu k tomuto stavu.

Syntaxe

Popis Aktuální stav dat v databázi je uložen pod zvoleným názvem. Z d vodu úspo-ry místa není archivována celá databáze, pouze se budou zaznamenávat všechny zm ny provedené v databázi od tohoto okamžiku. Pomocí p íkazu

<název_bodu_uložení> m žeme kdykoliv vrátit data do stavu,ve kterém se nacházela v okamžiku zadání p íkazu .

Od za átku transakce m žeme definovat i více t chto bod . Po skon enítransakce pomocí p íkazu jsou však všechny body ztraceny. Použije-me-li p íkaz bez udání bodu, ke kterému se chceme vrátit, provede se návrat do stavu p ed za átkem transakce a rovn ž budou ztraceny všechny uložené body. P i návratu k definovanému bodu uložení budou ztraceny všechny pozd ji definované body. K jednomu bodu se však m žeme vracet i n kolikrát.

Viz též

Page 100: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

100 P ÍKAZY JAZYKA SQL ___________________________________________

� SELECTP íkaz je pro svoji d ležitost a složitost uveden samostatnv následující kapitole ( kapitola 7).

UPDATEZm na hodnot ve sloupcích ádk tabulky.

Syntaxe

Popis Do všech sloupc , které jsou uvedeny za klí ovým slovem se vloží hod-nota odpovídajícího výrazu. Pomocí podmínky za klí ovým slovem m žeme omezit množinu ádk , kterých se bude aktualizace týkat.

6.2.2.7 Aktualizace hodnot ve všech ádcích tabulky Chceme-li zvýšit plat všem zam stnanc m o 20 %, musíme jinými slovy p i adit do sloupce hodnotu :

P íkaz bude postupovat v tabulce zam stnanc ádek po ádku a do sloupce vloží hodnotu .

6.2.2.8 Aktualizace hodnot ve vybraných ádcích tabulky Chceme-li, narozdíl od p edchozího p íkladu, zvýšit plat o 20 % pouze za-m stnanc m, kte í ješt nedosáhli alespo 10 000,– K , musíme použít pod-mínku :

Podmínka zajistí, že p i azení bude provedeno pouze u zam stnanc , kte í mají plat nižší než 10.000,– K .

Page 101: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 101

Oracle �Existuje další varianta p íkazu :

Systém Oracle dovoluje aktualizovat hodnoty i pomocí výsledku vno enéhodotazu . Seznam výstupních sloupc tohoto dotazu musí odpovídat seznamu sloupc aktualizované tabulky uvedeného za klí ovým slovem .Pro každý aktualizovaný ádek tabulky jsou nové hodnoty zjišt ny podle odpovídajícího ádku z výsledku vno eného dotazu.

Následující p íklad provede aktualizace p íjmení a ísla odd lení u všech zam stnanc v tabulce podle tabulky . Aktualizace se provádí pouze pro zam stnance, kte í jsou zárove v tabulce .

Viz též

6.2.3 Vytvo ení definice dat – CREATE SQL p íkazy za ínající slovem („vytvo “) umož ují p idávat tabulky, indexy a jiné objekty databáze v závislosti na používaném databázovém pro-st edí do databázové struktury. Tyto p íkazy pat í do skupiny p íkaz DDL, tedy do skupiny p íkaz pro definici datové základny, jak je popsáno na za át-ku této kapitoly.

Za slovem následuje ozna ení typu objektu, který chceme vytvo it– nap . (vytvo ení tabulky), (vytvo eníindexu). Po tomto sousloví následuje název objektu – nap . (tabulka zam stnanc ) a popis struktury nov vytvá eného objektu – nap . názvy a datové typy sloupc tabulky.

Na následujících stránkách jsou uvedeny pouze nejb žn jší tvary p íkazu. R zná databázová prost edí mohou pomocí stejn syntakticky tvo e-

Page 102: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

102 P ÍKAZY JAZYKA SQL ___________________________________________

ných p íkaz umož ovat vytvá ení dalších databázových objekt , které se v daném prost edí vyskytují. � Oracle Velikost a umíst ní vytvá eného objektu P i vytvá ení libovolného objektu musíme také ur it jeho po áte ní velikost, délku používanou p i prodlužování a umíst ní objektu v databázi a fyzicky na disku. K zadání pot ebných údaj slouží následující klí ová slova: þ Ur ení umíst ní objektu v logickém prostoru – tablespace:

Chceme-li nap íklad umístit objekt do logického prostoru s názvem :

þ Ur ení velikosti objektu:

Celé íslo za klí ovým slovem udává velikost místa vyhrazeného pro objekt v okamžiku jeho vytvo ení. Tato velikost je udávána v kilobytech – ‘K’ nebo v megabytech – ‘M’.

V nepovinné ásti za klí ovým slovem je možné ur it velikost, o kterou bude prostor vyhrazený pro objekt zv tšen, nebude-li p vodní veli-kost sta it. Op t je možné zadávat velikost v kilobytech nebo v megabytech.

Následuje ukázka vytvo ení místa o po áte ní velikosti 20 MB, které bude v p ípad pot eby zv tšováno vždy o 100 KB:

CREATE INDEXVytvo ení indexu nad jedním nebo více sloupci tabulky.

Syntaxe

kde <specifikace_sloupce> = <název_sloupce> … vzestupné uspo ádání hodnot v indexu; … sestupné uspo ádání hodnot.

Page 103: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 103

Popis �Index obsahuje seznam odkaz na ádky tabulky set íd ný podle ur itého

kritéria – v tšinou vzestupn podle hodnot ve sloupci, nad kterým je index definován. Existence index m že zna n zrychlit dobu zpracování dalších SQL p íkaz , zejména dotazu . Je-li nap íklad vytvo en index nad sloupcem v tabulce zam stnanc , mohou všechny dotazy obsahují-cí ást využít tento index a jejich výsledek bude set í-d n abecedn podle p íjmení, aniž by každý dotaz musel znovu ádky ve výsledku t ídit.

6.2.3.2 Jedine né a duplicitní indexy Rozlišujeme dva druhy index – jedine né (nebo s unikátními hodnotami) a s duplicitními hodnotami. V tabulce zam stnanc , pro kterou je vytvo enunikátní index nad sloupcem , nem že být více zam st-nanc s jedním íslem – což v tšinou pot ebujeme. Unikátní index vytvo ímepomocí klí ového slova , které uvedeme hned za .

P esto m že být ú elné vytvá et indexy i nad sloupci, ve kterých se stejná hodnota vyskytuje vícekrát. P íkladem jsou p íjmení zam stnanc . Ve firmm že být více zam stnanc se stejným p íjmením, a p esto budeme astovytvá et abecední seznam zam stnanc . V tomto p ípad použijeme index, ve kterém jsou duplicitní hodnoty povoleny – neuvedeme klí ové slovo .

6.2.3.3 Uspo ádání hodnot v indexu Neuvedeme-li za názvem sloupce žádný modifikátor, budou hodnoty v indexu set íd ny vzestupn . Použijeme-li modifikátor , m li by být hodnoty v indexu set íd ny sestupn . V tšina databázových prost edí však p estoset ídí hodnoty vzestupn , pouze budou vyhodnocovány v opa ném po adí.Použití modifikátoru nemá, narozdíl od ásti v p íkazu

, u index p íliš velký smysl.

6.2.3.4 Nevýhody použití indexP es nesporné výhody týkající se rychlosti provád ní dotaz mají indexy i své nevýhody. Krom faktu, že i index musí být n kde uložen a zabírá tedy ur i-tou ást prostoru na disku, se jedná zejména o dodate né innosti, které jsou pot eba k udržování index v aktuálním stavu.

Po každé operaci, která p idává/maže ádek nebo m ní hodnoty v ádku, je nutné provést i opravu indexu, aby byl seznam odkaz nadále aktuální a správn set íd ný. Každá aktualizace tabulky tedy trvá déle, než v p ípad ,kdy není žádný index nad tabulkou definován. P ed vytvo ením indexu je

Page 104: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

104 P ÍKAZY JAZYKA SQL ___________________________________________

proto dobré vždy zvážit, který druh operací bude z hlediska ádk tabulky ast jší – jestli jejich tení, nebo jejich aktualizace. � Chceme-li vytvo it tabulku a naplnit ji v tším množstvím dat, je lepší nej-

prve provést napln ní, a teprve potom vytvo it pot ebné indexy. V n kterýchp ípadech m že být i vhodné nejprve zrušit existující indexy, provést v tšímnožství aktualiza ních operací, a potom indexy op t vytvo it.

P íkladVytvo ení vzestupného indexu nad tabulkou zam stnanc podle p íjmenízam stnanc . Index m že obsahovat duplicitní hodnoty:

Vytvo ení jedine ného sestupného indexu nad tabulkou odpracovaných hodin složeného z datumu dne a ísla zam stnance. Index nem že obsahovat dupli-citní hodnoty:

MS JDBE

Volitelný modifikátor umož uje ur it další omezení indexu: þ

Primární index. Primární index je implicitn unikátní. Nad tabulkou není možné definovat více primárních index – p i pokusu o vytvo ení dalšího primárního indexu dojde k chyb .

þþ

Zakázání hodnoty ve sloupcích tvo ících index.

Hodnoty ve sloupcích tvo ících index jsou ignorovány a tyto ádkynejsou do indexu zahrnuty.

Oracle

Page 105: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 105

�kde <velikost_a_umíst ní> je popsána pod heslem .

NOSORTVolitelný modifikátor dovoluje zrychlit proces vytvá ení indexu. Jeho uvedení upozor uje databázový systém, že ádky v tabulce jsou fyzicky set í-d ny podle stejného kritéria jako tento index, a není tedy nutné provád tt íd ní seznamu odkaz v indexu.

Hodnota NULL v indexechHodnoty nejsou do indexu zahrnuty. Vytvo íme-li jedine ný index nad sloupcem , nenastane chyba, budou-li na více ádcích v tomto sloupci hodnoty . Zárove to však znamená, že p i testech na hodnotu

nebudou použity indexy!

Viz též

CREATE ROLEVytvo ení role, které budou p id lena p ístupová práva

Syntaxe

Popis Vytvo í roli s daným názvem ( 4.1.2).

P íkladVytvo ení role :

Viz též

Page 106: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

106 P ÍKAZY JAZYKA SQL ___________________________________________

�CREATE ROLLBACK SEGMENT Oracle

Vytvo ení speciálního prostoru na disku sloužícího uložení informací nutných k návratu ke stavu p ed za átkem transakce – „rollback“.

Syntaxe

kde definuje rollback segment, který je p ístupný všem uživatel m a definice velikosti a umíst ní je popsána pod heslem .

Popis Do prostoru definovaného jako „rollback segment“ jsou ukládány všechny zm ny v databázi – vymazané a zm n né ádky, informace o p idaných ád-cích apod. – provedené od posledního p íkazu . P íkazvyužije tyto informace k uvedení databáze do stavu, ve kterém se nacházela bezprost edn po posledním p íkazu ( 4.0).

Význam „rollback segmentu“ je d ležité mít na pam ti zejména p i zpraco-vání velkého objemu dat. Chceme-li vymazat z tabulky velké množství ádk ,budou nejprve tyto ádky uloženy do „rollback segmentu“, a teprve po zadání p íkazu budou skute n vymazány. Nebude-li velikost „rollbacksegmentu“ dostate ná pro uložení všech vymazávaných ádk , dojde k chyb .V tomto p ípad je nutné pomocí p íkazu zv tšitprostor vyhrazený pro „rollback segment“.

V prost edí Oracle je možné mít najednou vytvo ených více „rollbacksegment “. Pro každou transakci je standardn použit „rollback segment“ definovaný v profilu uživatele. Je však možné explicitn ur it i jiný pomocí následující dvojice p íkaz :

Každý „rollback segment“ m že být ve stavu online – p ipravený pro ukládání informací, nebo ve stavu offline – vypnutý a tehdy nem že být použit jako „rollback segment“ pro žádnou transakci.

Nov vytvo ený rollback segment není možné ihned použít. Je nutné jej nejprve uvést do aktivního stavu – online. K tomu použijeme p íkaz:

Více se o vytvá ení a používání rollback segment dozvíte v originální doku-mentaci k databázovému systému Oracle.

Page 107: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 107

P íklad�Vytvo ení rollback segmentu v logickém prostoru

o velikosti 100 MB:

Viz též

CREATE SEQUENCEVytvo ení sekvence – uživatelského po ítadla.

Syntaxe

kdeþ STARTWITH

Po áte ní hodnota sekvence. Tato hodnota musí být mezi minimální a ma-ximální hodnotou (jsou-li zadány).

þ INCREMENT BY Velikost kroku – rozdílu mezi p edchozím a aktuálním íslem vráceným sekvencí.

þ MINVALUE

þ MAXVALUEMinimální hodnota v sekvenci.

Maximální hodnota v sekvenci. þ CYCLE

Po dosažení posledního ísla v sekvenci bude p íšt vráceno op t první, po-tom druhé atd. ísla se tedy budou opakovat.

Page 108: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

108 P ÍKAZY JAZYKA SQL ___________________________________________

Popis � Sekvence umož uje získat vzestupnou, nebo sestupnou adu ísel. Pomocí

sekvencí m žeme nap íklad p i azovat unikátní ísla jako primární klí k novvytvá eným ádk m v tabulce.

Jediným zp sobem jak provést inicializaci sekvence – nastavení po áte níhodnoty – je sekvenci odstranit pomocí p íkazu a následn jiop t vytvo it pomocí p íkazu a parametru .

Více se o používání sekvencí dozvíte v originální dokumentaci k databázovému prost edí Oracle.

P íkladVytvo ení sekvence vytvá ející vzestupnou adu ísel s krokem jedna za ínají-cí na desítce bez opakování:

Viz též

CREATE SYNONYM OracleSynonymum k p vodnímu názvu objektu se stálou platností.

Syntaxe

Popis Vytvo ení alternativního pojmenování databázového objektu (tabulky, pohle-du, sekvence apod.), které má stálou platnost. Toto alternativní pojmenování m žeme kdykoliv použít jako synonymum k p vodnímu názvu objektu

kterémkoliv SQL p íkazu.v

Poznámkaþ Aby bylo synonymum p ístupné všem uživatel m, musíme zadat

klí ové slovo p i jeho vytvá ení.

Page 109: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 109

P íklad�Vytvo ení synonyma k názvu tabulky zam stnanc ( ):

CREATE TABLEVytvo ení databázové tabulky.

Syntaxe

kde

Popis Databázová tabulka slouží pro ukládání uživatelských dat. Musí mít definován alespo jeden sloupec. Každý sloupec v tabulce m že obsahovat hodnoty pouze jednoho datového typu.

Data v tabulce uložená mohou podléhat ur itým omezením definovaným uživatelem. Tato omezení se týkají zejména povolení nebo zamítnutí výskytu duplicitních hodnot a povolení nebo zamítnutí výskytu hodnoty .

Page 110: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

110 P ÍKAZY JAZYKA SQL ___________________________________________

6.2.3.5 Omezení sloupce� P i definici tabulky m žeme zadat omezení pro všechny hodnoty v jednom

sloupci. M žeme tak zabránit zadání hodnoty nebo výskytu duplicitních hodnot v jednom sloupci.

Dále m žeme zajistit referen ní integritu s hodnotami v jiné tabulce. Refe-ren ní integrita zabezpe uje, že p i výskytu ur itého ísla zam stnancev tabulce odpracovaných hodin bude toto íslo i v tabulce zam stnanc . Jiný-mi slovy, že se nem že stát, aby existovaly v n které tabulce informace o zam stnanci a my bychom p itom zam stnance s tímto íslem nem li uvede-ného v tabulce zam stnanc .

6.2.3.6 Hodnota NULLNeuvedeme-li p i vytvá ení sloupce žádné omezení, mohou být do sloupce vkládány i hodnoty . Chceme-li tomu zabránit, musíme p i definici sloupce zadat omezení následujícího tvaru:

Zabránit výskytu hodnoty budeme chtít zejména u sloupc tvo ícíchprimární klí . K definici primárního klí e slouží omezení .

6.2.3.7 Duplicitní hodnoty ve sloupci Chceme-li zakázat více výskyt jedné hodnoty ve sloupci, použijeme omezení

v následujícím tvaru:

6.2.3.8 Primární klíJe-li sloupec sám o sob primárním klí em v tabulce, m žeme použít omezení

pro zabrán ní výskytu duplicit a hodnot v tomto sloupci:

6.2.3.9 Cizí klíO sloupci, který odkazuje na ádek jiné tabulky, hovo íme jako o cizím klí i.V tabulce odpracovaných hodin je íslo zam stnance cizím klí em, protože pouze odkazuje na ur itý ádek v tabulce zam stnanc .

Výskyt cizího klí e v tabulce znamená zvýšené nároky na udržení databáze v konzistentním tvaru. Není možné, abychom vymazali zam stnance z tabulky zam stnanc a neprovedli zárove vymazání všech záznam , které se na tohoto zam stnance prost ednictvím cizího klí e odkazovali z ostatních tabu-

Page 111: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 111

lek. V opa ném p ípad by naše databáze p estala být konzistentní a p i práci s ní by za alo docházet k chybám a k nep edvídatelným výsledk m. �Chceme-li ozna it íslo zam stnance v tabulce odpracovaných hodin jako cizí klí do tabulky zam stnanc , použijeme následující omezení:

6.2.3.10 Podmínka pro sloupce tabulky Pro každý sloupec tabulky lze zadat libovolnou podmínku, kterou musí spl o-vat všechny hodnoty zadávané do sloupce. Tato podmínka se zadává pomocí omezení . Syntaxe zápisu podmínky je shodná jako v ástip íkazu .

Chceme-li zajistit, že po et odpracovaných hodin za den musí být v intervalu 0 až 24, použijeme následující omezení p i definici sloupce

:

6.2.3.11 Omezení tabulkyStejná omezení, jako jsme definovali pro jeden sloupec tabulky, m žemedefinovat i pro více sloupc najednou. M žeme tak vytvo it složený primární klí nebo složený cizí klí skládající se ze dvou a více sloupc . Narozdíl od omezení pro jeden sloupec uvádíme v tomto p ípad v kulatých závorkách seznam názv sloupc odd lených árkou.

Chceme-li zadat složený primární klí nad tabulkou odpracovaných hodin skládající se z ísla zam stnance a datumu, použijeme následující omezení:

Podobn m žeme definovat i podmínku pro více sloupc najednou. Následuje ukázka podmínky pro zadání pouze možného po tu odpracovaných hodin za den spole n s íslem zam stnance, který existuje v tabulce zam stnanc :

P íkladVytvo ení tabulky zam stnanc se sloupci ( íslo zam stnance – celé íslo, – et zec znak a – celé íslo:

Page 112: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

112 P ÍKAZY JAZYKA SQL ___________________________________________

�Vytvo ení stejné tabulky jako v p edchozím p ípad , ale s definicí ísla za-m stnance jako primárního klí e:

Vytvo ení tabulky odpracovaných hodin za den. Tabulka obsahuje íslo za-m stnance, datum a po et odpracovaných hodin v daný den. íslo zam stnan-ce je v této tabulce cizí klí a musí být zachována referen ní integrita – íslozam stnance použité v tabulce odpracovaných hodin musí vždy existovat i v tabulce zam stnanc . Primární klí je v této tabulce tvo en dvojicí {cis-lo_zam; datum}:

nebo pomocí omezení tabulky:

MS JDBE

Page 113: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 113

�þ Každé omezení musí za ínat slovem následovanýmnázvem omezení. Z tohoto názvu se odvodí i název pomocn vytvá-eného indexu, který zprost edkovává existenci tohoto omezení nad

sloupcem nebo tabulkou. þ Není možné použít omezení s klí ovým slovem .

Oracle

kde

Napln ní tabulkyP i vytvá ení tabulky je možné tabulku rovnou i naplnit. K tomu použijeme p íkaz , který musí mít stejnou strukturu seznamu sloupc jako má tabulka. Výsledek dotazu je potom vložen po jednotlivých ádcích do tabulky. V p ípad , že použijeme dotaz k vytvo ení tabulky, nemusíme defi-novat seznam sloupc v tabulce a jejich typ. Sloupce v tabulce budou vytvo e-ny podle sloupc ve výsledku dotazu .

P eddefinovaná hodnota ve sloupciU každého sloupce m žeme definovat výraz, jehož aktuální hodnota bude do tohoto sloupce p i azena v p ípad , že neuvedeme žádnou jinou hodnotu pro tento sloupec v p íkazu nebo p i jiném zp sobu p idávání ádk do tabulky.

P eddefinované hodnoty je vhodné používat pro dosazení po áte ních hod-not do sloupc , které jinak musí zadávat uživatel. P i vhodném nastavení t chto po áte ních hodnot m žeme zna n zjednodušit uživateli zadávání nových ádk a celkov zefektivnit práci s databázovými aplikacemi.

Page 114: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

114 P ÍKAZY JAZYKA SQL ___________________________________________

Chceme-li nastavit p eddefinovanou hodnotu pro po et odpracovaných ho-din za den na íslo 8, použijeme následující definici sloupce :�Kaskádovité vymazání ádkP i zadávání referen ní integrity lze povolit automatické mazání ádk obsahu-jících cizí klí , který je práv vymazáván z tabulky ozna ené jako referen ní.Pomocí modifikátoru zajistíme, že p i vymazání za-m stnance z tabulky zam stnanc budou automaticky vymazány i všechny záznamy o jím odpracovaných hodinách v tabulce odpracovaných hodin.

Viz též

CREATE USER

Popis Vytvo ení uživatele ve víceuživatelském databázovém systému. Mezi povinné parametry tohoto p íkazu pat í jméno uživatele a p ípadn i heslo, pomocí kterého se bude uživatel p ihlašovat. Konkrétní syntaxe p íkazu závisí na databázovém systému.

CREATE VIEWDefinice tzv. pohledu – fiktivní tabulky založené na sloupcích jedné nebo více tabulek, p ípadn dalších pohled .

Syntaxe

kde <pojmenování_slupce> p edstavuje nepovinný alternativní název pro sloupec na dané pozici v p íkazu .

Popis Pomocí pohled m žeme vy ešit dva odlišné problémy. První se týká velmi složitých dotaz nebo databází s velkým množstvím tabulek. V tomto p ípad

Page 115: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 115

m žeme rozd lit složitý dotaz na více krok , kdy výsledkem každého kroku je jeden nebo více pohled , které se využijí jako vstupy v kroku dalším. P ípadnm žeme vybrat z v tšího množství tabulek sloupce, které bude dále pot ebo-vat, a pomocí dotazu spojíme tyto tabulky do jednoho pohledu, který op t m žeme použít v dalších dotazech.

Druhou možností využití pohled je ízení p ístupu k dat m pro uživatele s rozdílnými p ístupovými právy. Uživatelé si mohou prohlížet data pouze prost ednictvím p eddefinovaných pohled . Pohled v tomto p ípad tvo í„filtr“, který danému uživateli zviditelní pouze sloupce, ke kterým má mít na základ svých práv p ístup. V databázových tabulkách jsou však stále všechna data, a tak nemusíme p i vytvá ení dotaz brát v úvahu p ístupová práva jednotlivých uživatel a dotazy zadávat stejn , jako když žádná p ístupovápráva neexistují ( 4.1.2).

6.2.3.12 Pohled spojující tabulky Vytvo íme pohled, který spojuje tabulku zam stnanc a odd lení, aby mohl být pozd ji vypisován i název odd lení, ve kterém zam stnanec pracuje.

Postupujeme naprosto stejným zp sobem, jako kdybychom vytvá eli dotaz, který požadované sloupce vypíše ve výsledku. Rozdíl je pouze v použití kon-strukce <název_pohledu> p ed p íkazem :

Výsledkem p edchozího dotazu bude pohled s názvem , který bude obsahovat sloupce , , a .

Tento pohled m žeme použít ve všech dalších SQL p íkazech všude tam, kde bychom mohli použít standardní databázovou tabulku. Chceme-li nyní vypsat seznam zam stnanc v etn názv odd lení, použijeme následující dotaz:

Vidíme, že p i vhodném vytvo ení r zných pohled , m žeme zna n zjedno-dušit tvorbu dalších dotaz .

6.2.3.13 Názvy sloupc v pohledu Názvy sloupc pohledu musí být jedine né. Pokud neuvedeme alternativní pojmenování pro jednotlivé sloupce, jsou názvy sloupc pohledu odvozeny podle seznamu výstupních sloupc ve vno eném dotazu . Zde se však

Page 116: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

116 P ÍKAZY JAZYKA SQL ___________________________________________

nesmí vyskytnout více sloupc se stejným názvem. Proto není možné vytvo itpohled pomocí následujícího p íkazu:�

V seznamu výstupních sloupc v dotazu jsou použity dva sloupce s názvem ( íslo odd lení). Jeden je z tabulky zam stnanc , druhý z tabulky odd lení. Aby bylo možné vytvo it i takovýto pohled, musíme použít alternativní pojmenování pro sloupce pohledu. Alternativní pojmeno-vání sloupc se uvádí jako seznam do kulatých závorek bezprost edn za název pohledu. Jednotlivá pojmenování jsou odd lena árkou. Správn zadaný p íkaz tedy je:

Názvy sloupc v pohledu nyní budou , a , takže se žádný název sloupce neopakuje.

Alternativní pojmenování sloupc je také povinné v p ípad , že vno enýdotaz obsahuje v seznamu výstupních sloupc výraz místo pouhého názvu sloupce.

MS JDBEV prost edí MS JDBE se nesetkáme s pohledy jako takovými, ale syntaxe p íkazu dovoluje v ásti a použít místo názvu tabulky i název existujícího dotazu. Výsledný efekt je pak shodný jako p i použití pohled .

Oracle Nahrazení existujícího pohleduJe-li pohled již vytvo en, bývají k n mu p i azena i ur itá p ístupová práva a p ípadná další nastavení, jejichž op tovné vytvá ení by zabralo ur itý as.Chceme-li upravit definici pohledu, která vyžaduje jeho op tovné vytvo ení – zejména vno ený dotaz – museli bychom pohled nejprve zrušit, po-tom jej vytvo it podle nové definice a následn vytvá et znovu všechna p ístu-pová práva. Místo toho lze použít klí ové slovo , které umožní na-hradit již existující pohled jiným podle nové definice. V p ípad , že pohled s tímto názvem ješt neexistuje, nemá klí ové slovo na vytvá ení

Page 117: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 117

pohledu žádný vliv a p íkaz se provede stejn jako bez použití slova . �Máme-li již vytvo ený pohled , který obsahuje mimo jiné i sloupec , m žeme chtít tento sloupec nahradit sloupcem obsahujícímjméno zam stnance. Vytvo íme tedy nový pohled , který nahradí p vodní:

Pohled pouze pro teníVytvo íme-li nový pohled, je možné (p i dodržení ur itých pravidel uvede-ných v originální dokumentaci k systému Oracle) provád t prost ednictvímpohledu aktualizace ádk v tabulkách, na kterých je tento pohled založen. Pomocí modifikátoru m žeme tyto aktualizace zakázat. Zabráníme tak necht ným zm nám v tabulkách, jejichž p vod by se velmi t žko odhaloval. Dále m žeme zrychlit práci s tímto pohledem, protože data-bázový systém m že po ítat s nem nností dat.

Viz též

6.2.4 Zm na definice dat – ALTER SQL p íkazy za ínající slovem („zm “) umož ují m nit existujícístrukturu databáze – tabulky, indexy a jiné objekty databáze v závislosti na používaném databázovém prost edí. Tyto p íkazy pat í do skupiny p íkazDDL, tedy do skupiny p íkaz pro definici datové základny, jak je popsáno na za átku této kapitoly.

Za slovem následuje vždy ozna ení typu objektu, který chceme m -nit – nap . (zm na struktury tabulky), (zm naindexu). Po tomto sousloví následuje název objektu – nap . (tabulka zam stnanc ) – a popis zm ny, kterou chceme provést.

Page 118: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

118 P ÍKAZY JAZYKA SQL ___________________________________________

Na následujících stránkách jsou uvedeny pouze nejb žn jší tvary p íkazu. R zná databázová prost edí mohou pomocí stejn syntakticky tvo e-

ných p íkaz umož ovat zm ny dalších databázových objekt , které se v daném prost edí vyskytují.

ALTER ROLLBACK SEGMENT OracleÚprava velikosti speciálního segmentu, do kterého se ukládají všechny zm nyprovedené p ed ukon ením transakce.

Syntaxe

kde <definice_velikosti> je popsána v odstavci „Definice velikosti a umíst ní“pod heslem .

Popis P íkaz umož uje zm nit velikost prostoru, který zabírá daný rollback seg-

ment. Dále m žeme nastavit segment do aktivního modu – online nebo do stavu offline, kdy je vypnutý a není možné jej používat ( p íkaz

).

P íkladNastavení rollback segmentu do aktivního modu:

Viz též

ALTER SEQUENCEZm na parametr definované sekvence – velikost kroku, minimální a maxi-mální hodnota apod.

Syntaxe

Page 119: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 119

�Vysv tlení jednotlivých parametr nalezneme u p íkazu .

P íkladNastaví novou velikost kroku sekvence s názvem na 10:

Viz též

ALTER TABLEZm na definice tabulky – p idávání/rušení sloupc , zm na definice sloupce a zm na definice integritních omezení.

Syntaxe

kde <specifikace_sloupce> je popsána pod heslem .

Popis U již vytvo ené tabulky m žeme p idávat nebo rušit sloupce a jejich omezení, m nit definici existujících sloupc . Více se o použití jednotlivých parametrdozvíme pod heslem .

6.2.4.2 P idání sloupce Chceme-li p idat do tabulky další sloupec nebo sloupce, použijeme klí ovéslovo dopln né seznamem obsahujícím názvy nových sloupc , jejichdatové typy a p ípadná omezení. Zp sob zápisu je shodný jako u p íkazu

.

Page 120: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

120 P ÍKAZY JAZYKA SQL ___________________________________________

Pro p idání sloupce do tabulky zam stnanc použijeme ná-sledující p íkaz:�

Omezení dovolí zadat do sloupce pouze íslo v tšínebo rovné 0.

6.2.4.3 Zm na definice sloupce U existujících sloupc m žeme m nit jejich datový typ a omezení definovaná nad t mito sloupci.

Chceme-li zm nit omezení pro existující sloupec v tabulce zam stnanc tak, aby po et musel být vždy v tší než 0, použijeme následující p íkaz:

6.2.4.4 Zrušení sloupce nebo omezení Z tabulky m žeme vymazat existující sloupce nebo omezení pomocí klí ovéhoslova . Omezení, zadané v p edchozím odstavci, m žeme op t vymazat takto:

6.2.4.5 P ejmenování sloupce Pomocí p íkazu nem žeme v jednom kroku zm nit název sloupce. Musíme provést celkem t i kroky, které p ejmenování sloupce nasi-mulují:1. P idáme nový sloupec s požadovaným novým jménem a datovým typem

shodným s p vodním sloupcem. 2. Zkopírujeme hodnoty všech ádk z p vodního sloupce do nového sloupce. 3. Zrušíme p vodní sloupec.

V následujícím p íkladu si ukážeme p ejmenování sloupce v tabulce na . Datový typ sloupce je et zec znak , zde repre-zentovaný klí ovým slovem . SQL p íkazy použité k p ejmenování sloupce jsou následující:

Page 121: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 121

Poznámkaþ Pokud by byly nad p vodním sloupcem definovány indexy nebo by

tento sloupec byl sou ástí primárního klí e, museli bychom ještvytvo it tyto indexy resp. primární klí nad novým sloupcem.

MS JDBE

Za klí ovými slovem a je nutné uvést bu v p ípad p idá-vání/rušení sloupce nebo v p ípad p idávání/rušení omezení.

Oracle Syntaxe

Pomocí ásti je možné vymazat primární index definovaný nad tabulkou nebo libovolný unikátní index definovaný nad jedním nebo více sloupci tabul-ky.

Rušení existujícího sloupceSyntaxe ásti neumož uje, aby byl z tabulky odstran n existující slou-pec. V originální dokumentaci k systému Oracle je doporu eno vytvo it novou tabulku pomocí p íkazu:

kde <seznam_sloupc > obsahuje názvy všech sloupc p vodní tabulky, kromt ch, které chceme odstranit.

Page 122: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

122 P ÍKAZY JAZYKA SQL ___________________________________________

� Vytvo íme tak kopii p vodní tabulky, ovšem bez nežádoucích sloupc . P -vodní tabulku pak m žeme vymazat pomocí p íkazu a novou tabulku p ejmenujeme pomocí p íkazu zp t na jméno p vodní tabul-ky.

Viz též

ALTER USERZm na základních nastavení uživatele.

Popis P íkaz slouží ke zm n r zných nastavení u uživatele databáze. Mezi tato nastavení pat í zejména p ístupové jméno a heslo, dále p íslušnostuživatele do ur ité uživatelské skupiny a z ní odvozená p ístupová práva apod. Konkrétní syntaxe tohoto p íkazu závisí na používaném databázovém prost e-dí.

6.2.5 Rušení definice dat – DROP SQL p íkazy za ínající slovem („odstra “) umož ují odstranit tabulky, indexy a jiné objekty z databáze v závislosti na používaném databázovém prost edí. Tyto p íkazy pat í do skupiny p íkaz DDL, tedy do skupiny p íka-z pro definici datové základny, jak je popsáno na za átku této kapitoly.

Za slovem následuje ozna ení typu objektu, který chceme odstranit – nap . (odstran ní tabulky), (odstran ní indexu). Potom sta í uvést již jen název objektu, který má být odstran n.

Na následujících stránkách jsou uvedeny pouze nejb žn jší tvary p íkazu. R zná databázová prost edí mohou pomocí stejn syntakticky tvo e-

ných p íkaz umož ovat odstran ní dalších databázových objekt , které se v daném prost edí vyskytují.

DROP INDEXOdstran ní existujícího indexu.

Syntaxe

Page 123: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 123

Popis �Za klí ovými slovy zadáme název indexu, který chceme odstra-

nit.

P íkladOdstran ní indexu s názvem z databáze:

MS JDBE

Za názvem indexu je nutné uvést klí ové slovo a název tabulky, nad kterou je index vytvo en:

Viz též

DROP ROLEOdstran ní role a jí p id lených p ístupových práv.

Syntaxe

Popis Odstraní roli s daným názvem ( 4.1.2).

P íkladOdstran ní role :

Viz též

Page 124: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

124 P ÍKAZY JAZYKA SQL ___________________________________________

�DROP ROLLBACK SEGMENT Oracle

Odstran ní rollback segmentu z databáze ( p íkaz).

Syntaxe

Pozor!þ Z databáze lze odstranit pouze rollback segment, který je

v neaktivním stavu offline!

P íkladOdstran ní rollback segmentu z databáze:

Viz též

DROP SEQUENCEOdstran ní sekvence – uživatelského po ítadla.

Syntaxe

P íkladOdstran ní sekvence s názvem :

Viz též

DROP SYNONYM OracleOdstran ní synonymního ozna ení objektu.

Page 125: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ P EHLED SQL P ÍKAZ 125

Syntaxe �

Popis Odstraní z databáze synonymní ozna ení databázového objektu (tabulky, pohledu, sekvence apod.). Na objekt se potom budeme muset odkazovat jeho pravým jménem. Odstran ním synonyma nedojde v žádném p ípadk odstran ní p vodního databázového objektu!

P íkladOdstran ní synonyma pro tabulku zam stnanc :

DROP TABLEOdstran ní celé tabulky a všech nad ní definovaných index a omezení z databáze.

Syntaxe

Popis Odstraní z databáze tabulku s daným jménem. P i odstra ování tabulky dojde k vymazání všech ádk tabulky, index definovaných nad jedním nebo více sloupci tabulky a dále k odstran ní všech p ípadných omezení definovaných nad sloupci nebo nad celou tabulkou.

Zárove si musíme uv domit, že odstran ním tabulky se stanou nepoužitel-nými všechny pohledy nebo uložené dotazy využívající tuto tabulku.

Pokud pot ebujeme odstranit pouze n které ádky z tabulky, použijeme p í-kaz .

P íkladOdstran ní tabulky zam stnanc s názvem z databáze:

Oracle

Page 126: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

126 P ÍKAZY JAZYKA SQL ___________________________________________

�Existují-li omezení nad sloupci tabulky nebo nad tabulkou samotnou, je nutné p i odstra ování tabulky zadat modifikátor , jinak se odstran ní tabulky neprovede a bude ohlášena chyba.

Viz též

DROP USER Odstran ní uživatele z databáze.

DROP VIEW Odstran ní pohledu z databáze.

Syntaxe

Popis Odstran ní pohledu daného názvu z databáze.

Poznámkaþ Odstran ním pohledu nejsou žádným zp sobem ovlivn ny tabulky,

které byly použity v ásti p i definici tohoto pohledu.

Page 127: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

77 P íkaz SELECT

Kapitola 7

P ÍKAZ SELECT7.1 Základní syntaxe......................................................................1287.2 SELECT – sloupce ve výsledku .............................................1307.3 FROM – seznam vstupních tabulek .......................................1367.4 WHERE – omezení ádk ........................................................1407.5 GROUP BY – seskupení ádk ...............................................1427.6 HAVING – omezení souhrnných ádk ..................................1467.7 ORDER BY – set íd ní ádk na výstupu..............................1487.8 UNION, INTERSECT, MINUS – složené dotazy .....................1537.9 Spojování tabulek....................................................................1547.10 Vno ené dotazy..................................................................167

Page 128: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

128 P ÍKAZ SELECT ______________________________________________

�7.1 Základní syntaxe P íkaz je uveden ve zvláštní kapitole, protože se jedná o nejd ležit jší a nejpoužívan jší p íkaz jazyka SQL. Navíc se jedná o jediný p íkaz, kterým m žeme získávat informace z databáze, a proto je jeho struktura pom rnsložitá.

SELECT

Jediný p íkaz, kterým je možné získat data z databázových tabulek. P íkaz nem ní žádná data v databázi.

Syntax

Povinná ást p íkazu :

ásti p íkazu SELECT SELECT

Definice sloupc ve výsledku – jejich obsahu i textu v záhlaví. FROM

Seznam tabulek, ze kterých jsou získávány požadované informace. P i de-finici dotazu není možné použít sloupce z jiných než ze zde uvedených ta-bulek.

WHERE Omezení zpracovávaných ádk pomocí podmínky. Pouze ádky, pro které je tato podmínka spln na, jsou dále zpracovávány.

GROUP BY Definice výraz , podle kterých jsou ádky seskupeny. Skupina ádk se stejnými hodnotami ve všech uvedených výrazech je nahrazena jedním sou-hrnným ádkem.

Page 129: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_____________________________________________ ZÁKLADNÍ SYNTAXE 129

� HAVING

Omezení souhrnných ádk definovaných pomocí ve výsledku. Pouze souhrnné ádky, pro které je zde uvedená podmínka spln na, jsou za azeny do výsledku.Poznámka

Význam podmínky za je podobný podmínce za , s tím rozdílem, že za se omezují jednotlivé ádky ješt p ed jejich p í-padným seskupením podle a za se omezují až ádkysouhrnné.

ORDER BY Set íd ní ádk ve výsledku, postupn podle zadaných kritérií. ádky mo-hou být set íd ny vzestupn nebo sestupn .

UNION, INTERSECT, MINUS Definice tzv. složených dotaz – spojení výsledk více dotaz v jeden se-znam. Podle použitého operátoru se jedná o sjednocení – , pr nik –

, nebo o rozdíl – .

Page 130: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

130 P ÍKAZ SELECT ______________________________________________

�7.2 SELECT – sloupce ve výsledku Bezprost edn za po áte ním slovem uvádíme seznam sloupc , které chceme za adit do výstupu. Jednotlivé sloupce odd lujeme árkou.

7.2.1 Syntaxe

kde

Pozor!þ Je-li v dotazu použita i ást , musíme p i definici seznamu vý-

stupních sloupc dodržet pravidla popsaná v oddíle 7.4.

7.2.2 Výpis sloupc tabulky Nejjednodušší formou seznamu jsou pouhé názvy sloupc odd lené árkou:

V tomto p ípad se z tabulky zam stnanc vyberou pouze t i sloupce – p í-jmení, jméno a výše platu, p estože tabulka m že obsahovat i datum narození zam stnance nebo íslo odd lení, ve kterém pracuje.

Pokud pracujeme s více tabulkami a stejný název sloupce se vyskytuje ve dvou nebo více tabulkách, musíme vždy název sloupce p ed adit názvem tabulky a te kou:

Page 131: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_________________________________ SELECT – SLOUPCE VE VÝSLEDKU 131

�Použití názv tabulek u sloupc , které se vyskytují pouze jednou, není povin-né. Uvedeme-li však název tabulky i v tomto p ípad , m žeme v n kterýchp ípadech zrychlit provád ní dotazu.

7.2.3 Modifikovaný text v záhlaví Názvy sloupc v tabulce jsou v tšinou zkratky (nap . – íslo odd le-ní), navíc by názvy nem ly obsahovat znaky národní abecedy. Proto se setká-me s názvy sloupc , jako místo apod., a m že být vhodné nahradit ve výsledku dotazu názvy sloupc jinými, lépe srozumitel-nými názvy. K tomu slouží nepovinný parametr za klí ovým slovem (z anglického „jako“). Za tímto klí ovým slovem m žeme uvést libovolný text, který se objeví jako záhlaví sloupce ve výsledku dotazu:

Nadpisy sloupc ve výsledku dotazu potom budou odpovídat textu za klí o-vým slovem :

7.2.4 Výpis všech sloupc v tabulce Pro vypsání všech sloupc , které se v tabulce vyskytují, použijeme znak ‘*’ (hv zdi ka):

P íkaz vypíše všechny sloupce a všechny ádky z tabulky zam stnanc .Sloupce jsou vypsány p esn v po adí, ve kterém jsou definovány v tabulce. U dotaz pracujících s více tabulkami m žeme p ed adit hv zdi ku názvem tabulky:

Výsledkem druhého dotazu budou všechny sloupce z tabulky zam stnanc ,plus název odd lení, ve kterém zam stnanec pracuje, z tabulky odd lení.

Page 132: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

132 P ÍKAZ SELECT ______________________________________________

�7.2.5 Výpis modifikovaných údajMísto pouhého názvu sloupce se na libovolném míst seznamu m že objevit jakýkoliv, syntakticky správn zapsaný výraz.

Jméno sloupce je v tšinou shodné se zápisem výrazu, pokud není použito klí ové slovo . V n kterých prost edích (nap . MS Access) se za jméno sloupce dosadí automaticky vygenerovaný unikátní název – nap .nebo .

Výsledek:

Výraz spojí p íjmení a jméno zam stnance do jednoho sloupce. P íjmení a jméno bude odd leno árkou. Výraz

vypo te výši platu po 10% valorizaci.

7.2.6 Modifikátory

7.2.6.1 Modifikátor DISTINCT Ve výsledku nebudou uvedeny duplicitní ádky. Za duplicitní se považují ádky, které mají stejné hodnoty ve vypisovaných sloupcích.

Máme následující tabulku zam stnanc :P íjmení Jméno

Novák Jan Novák Jan Novák Pavel

Jsou-li v tabulce zam stnanc t i s p íjmením Novák a z toho dva se stejným k estním jménem Jan, budou výsledky následující: þ Bez použití modifikátoru :

Výsledek:

Page 133: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_________________________________ SELECT – SLOUPCE VE VÝSLEDKU 133

þ S použitím modifikátoru :

Výsledek:

a

Výsledek:

Všimn me si menšího po tu ádk , které je výsledkem dotaz používají-cích modifikátor . Ve výsledku nejsou žádné dva ádky shodné.

Poznámkaþ Použití modifikátoru m že výrazným zp sobem zpomalit pro-

vád ní dotazu. Každý nalezený ádek se musí porovnávat se všemi již nale-zenými, aby se vylou ila možnost duplicit.

7.2.6.2 Modifikátor DISTINCTROW Ve výsledku nebudou uvedeny duplicitní ádky. Za duplicitní se považují ádky, které mají stejné hodnoty ve všech sloupcích bez ohledu, jestli jsou

aktuáln vypisovány. P i použití stejné tabulky jako v p edchozím p ípadbudou výsledky následující: þ S použitím modifikátoru :

Výsledek:

Page 134: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

134 P ÍKAZ SELECT ______________________________________________

� a

Výsledek:

Výsledkem obou dotaz je stejný po et ádk , protože u modifikátoru není rozhodující, které sloupce jsou zahrnuty do výsledku.

Poznámkaþ Použití modifikátoru m že výrazným zp sobem zpomalit

provád ní dotazu. Každý nalezený ádek se musí porovnávat se všemi již nalezenými, aby se vylou ila možnost duplicit.

7.2.6.3 Modifikátor ALL Ve výsledku budou uvedeny všechny ádky bez ohledu na duplicitní výskyt stejných hodnot. Tento modifikátor se považuje za implicitní a použije se i v p ípad , že za klí ovým slovem nebude žádný modifikátor uveden.

7.2.7 MS JDBE

kde

þ Za klí ovým slovem se text neuzavírá do apostrof ani do uvozovek.

7.2.7.1 Modifikátor TOP P edstavuje omezení po tu ádk ve výsledku. Po et ádk m žeme omezit na daný po et nebo procentem z celkového po tu ádk , které by se jinak objevi-ly ve výstupu. Použijeme-li tento modifikátor, je d ležité, aby výstup byl

Page 135: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_________________________________ SELECT – SLOUPCE VE VÝSLEDKU 135

�set íd n podle ur itého kritéria (nap . podle výše platu). V opa ném p ípadbude náhodn vybráno ‘n’ ádk tak, jak byly postupn zpracovávány.

Vybere deset zam stnanc s nejvyššími platy.

Poznámkaþ Pokud bude mít zam stnanec na jedenácté pozici stejný plat jako ten na

desáté, budou ve výsledku uvedeni oba. I v p ípad , že na dvanácté, t inácté... pozici budou mít zam stnanci stejný plat, budou ve výsledku uvedeni.

Vybere deset procent zam stnanc s nejvyššími platy. Poznámkaþ Op t m že být ve výsledku více než 10 % z celkového po tu zam stnanc ,

pokud bude na konci seznamu více zam stnanc se stejným platem.

7.2.8 Oracle

þ Klí ové slovo je nepovinné. þ Není možné použít modifikátor .

Page 136: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

136 P ÍKAZ SELECT ______________________________________________

�7.3 FROM – seznam vstupních tabulek Klí ové slovo uvozuje sekci, ve které uvádíme všechny tabulky, ze kterých chceme získat požadované informace.

7.3.1 Syntaxe

7.3.1.1 Varianta I V první variant se neuvád jí sloupce, p es které se realizuje spojení více tabulek. Tyto sloupce budou uvedeny pozd ji v podmínce za klí ovým slovem

:

kde

7.3.1.2 Varianta II V této variant definujeme spojení tabulek v etn sloupc , p es které se toto spojení provádí:

kde

Page 137: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________ FROM – SEZNAM VSTUPNÍCH TABULEK 137

�7.3.2 Seznam tabulek bez spojovacího sloupce První varianta sekce p edpokládá, že uvedeme pouhý seznam tabulek (p ípadn vno ených dotaz ) bez jakéhokoliv up esn ní sloupce, pomocí kterého se má provést jejich spojení.

Nejjednodušším p ípadem je p íkaz využívající informace pouze z jedné tabulky:

Pot ebujeme-li najednou zobrazit data z více tabulek – nap íklad údaje o zam stnanci spolu s údaji o odd lení, ve kterém pracuje – musíme uvést tabulku i za klí ovým slovem :

Jednotlivé názvy tabulek se v seznamu odd lují árkou, podobn jako výstup-ní sloupce za klí ovým slovem .

7.3.2.1 Ur ení spojovacích sloupcVšimn me si použití podmínky za klí ovým slovem . Ta zajiš uje, že ke každému zam stnanci se vyhledá v tabulce pouze ádek popisu-jící odd lení, ve kterém pracuje ( 7.8).

Kdybychom tuto podmínku neuvedli, provedl by se tzv. kartézský sou inobou tabulek (a obecn všech tabulek uvedených za klí ovým slovem ). To by v našem p ípad znamenalo, že se ke každému ádku z tabulky zam st-nanc vyhledají všechny ádky z tabulky odd lení. Výsledek dotazu by tedy m l po et ádek rovný po tu zam stnanc krát po et odd lení ( 7.8.7).

7.3.3 Seznam tabulek s ur ením sloupce pro spojení Ve druhé variant sekce se krom názvu tabulek uvádí i zp sob, jakým jsou ob tabulky spojeny. Následující p íkaz tedy op t spojí tabulku zam st-nanc a odd lení pomocí sloupce obsahujícího íslo odd lení:

7.3.3.1 Spojení více tabulek V této variant je navíc možné jako <specifikace_tabulky2> uvést op t celé spojení tabulek pomocí konstrukce a spojovacího sloupce. Toto spojení musí být uzav eno do závorek:

Page 138: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

138 P ÍKAZ SELECT ______________________________________________

7.3.4 Výhody a nevýhody obou variant

7.3.4.1 Varianta I Tím, že spojovací sloupce neuvádíme ihned p i psaní tabulek, m žeme zapo-menout uvést n které spojení za klí ovým slovem . Jsou-li navíc za

další podmínky, které nesouvisejí se spojením tabulek, m že být t žkése v celé sekci zorientovat.

Na druhou stranu je možné za uvést komplikovan jší podmínky pro spojení tabulek.

7.3.4.2 Varianta II Syntaxe nám nedovolí „zapomenout“ na zapsání zp sobuspojení obou tabulek – na sloupce, p es které je spojení provád no.

P i spojování t í a více tabulek musíme vno it jedno spojení do druhého – jak je vid t z p íkladu výše. Je-li tabulek více, p estává být sekce itelná.

V konstrukci je navíc možné použít pouze operátory pro po-rovnávání (=; <>; <; >; <= a =>).

7.3.5 Alternativní pojmenování tabulky Vlastní názvy tabulek mohou být p íliš dlouhé. Pokud se musíme astov r zných ástech p íkazu na tabulku odkazovat, je výhodn jší zvolit pro ni do asné alternativní jméno. To bude platné pouze v rámci tohoto p íka-zu . Alternativní pojmenování se musí použít také v p ípad vno ené-ho dotazu, který musíme n jak pojmenovat. P íkaz bez použití alternativního pojmenování:

A s použitím alternativních názv a pro tabulky:

Page 139: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________ FROM – SEZNAM VSTUPNÍCH TABULEK 139

�7.3.6 MS JDBE

þ Nelze používat vno ené dotazy, ale místo názvu tabulky je možné uvést název uloženého dotazu.

þ Použití klí ového slova p ed je povinné.

7.3.7 Oracle

þ Jako specifikaci tabulky lze zapsat vno ený p íkaz , který musí být uzav en do kulatých závorek:

V tšinou je nutné zadat pro vno ený dotaz alternativní pojmenování (jako zde ).

þ Prost edí neumož uje zapsat sekci ve variant obsahující klí ovéslovo . Podmínka pro spojení tabulek se musí uvést v ásti .

Page 140: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

140 P ÍKAZ SELECT ______________________________________________

�7.4 WHERE – omezení ádkPomocí klí ového slova a následující podmínky ( 10.7) omezujeme ádky ze vstupních tabulek, se kterými se bude dále pracovat. Pouze ádky,

pro které je tato podmínka spln na, jsou dále zpracovávány a následn zahrnu-ty do výsledku.

7.4.1 Syntaxe

kde <podmínka> m že být bu jednoduchá, nebo složená podmínka (pomocí logických spojek , a ) ( 10.7).

7.4.2 Omezení ádk ve výsledku Chceme-li z tabulky zam stnanc vybrat pouze ty, kte í pracují v odd lenííslo 5, použijeme podmínku :

Zajímají-li nás pouze zam stnanci z odd lení íslo 5, kte í zárove mají plat vyšší než 5.000,– K , použijeme složenou podmínku ve tvaru

:

7.4.3 Oracle

7.4.3.1 Kombinace podmínek za WHERE V prost edí Oracle není možné používat p i spojování tabulek konstrukci

. Podmínka pro spojení se musí uvád t za klí ovým slovem , stejn jako podmínka omezující zpracovávané ádky.

Aby byl celý SQL dotaz lépe itelný a srozumitelný, je vhodné opticky od-d lit podmínku pro spojení tabulek od podmínky omezující zpracovávané ádky. Oba druhy podmínek jsou pak spojeny v jednu pomocí logické spojky

(a zárove ):

Page 141: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________ WHERE – OMEZENÍ ÁDK 141

První ást podmínky omezuje zpracovávané ádky pouze na zam stnances platem nad 5.000,– K nebo pat ící do odd lení íslo 1. Druhá pak zajiš uje,že p i spojování tabulky zam stnanc s tabulkou odd lení se spojí pouze ádkyse stejným íslem odd lení.

7.4.3.2 Definice vn jšího spojení – OUTER JOIN I v prost edí Oracle je možné definovat vn jší spojení – spojení pracujících s hodnotou ( 7.8, sekce Oracle).

Page 142: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

142 P ÍKAZ SELECT ______________________________________________

�7.5 GROUP BY – seskupení ádkP i práci s rozsáhlými tabulkami nás v tšinou nezajímají jejich jednotlivé ádky, ale spokojíme se s ur itými souhrnnými údaji za p esn definované

skupiny. Pro analýzu prodeje nám posta í celková tržba za jednotlivé dny, aniž bychom museli znát p esný druh a cenu každého prodaného zboží. Stejntak se m žeme p i sestavování rozpo tu mezd na p íští rok spokojit s údaji o po tu zam stnanc v jednotlivých odd leních a pr m rné výši mzdy v každém odd lení.

K získání t chto souhrnných informací použijeme agrega ní funkce (8.1.5) a sekci v p íkazu .

7.5.1 Syntaxe

Za klí ovým slovem je možné uvést n kolik výraz , podle kterých budou vstupní ádky seskupeny v jeden souhrnný ádek. Všechny vstupní ádky, pro které budou mít postupn <výraz1>, <výraz2> atd. stejnou hodnotu,

budou nahrazeny jedním souhrnným ádkem ve výsledku. Agrega ní funkce – nap . – bude vyhodnocena pro každý takto získaný souhrnný ádek.

Ve výrazech za slovem je možné použít libovolný sloupec z tabulek uvedených v ásti bez ohledu na to, jestli je tento sloupec použit ve výstupním seznamu sloupc .

7.5.1.1 Omezení syntaxe p i použití GROUP BY Je-li v p íkazu použita ást , musíme dodržet ur itá pravi-dla p i definici seznamu výstupních sloupc za klí ovým slovem .Za klí ovým slovem je možné uvést pouze: þ výrazy s agrega ními funkcemi ( 8.1.5); þ výrazy, které jsou konstantní pro všechny ádky v rámci skupiny – tedy

výrazy totožné s t mi, které jsou za klí ovým slovem , nebo jsou od t chto výraz odvozeny;

þ konstanty.

7.5.2 Získání souhrnných dat za skupinu ádkM jme následující tabulku popisující uskute n né prodeje r zných druhzboží:

Page 143: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

___________________________________ GROUP BY – SESKUPENÍ ÁDK 143

Chceme-li získat celkovou výši tržeb – sou et prodejních cen za jednotlivé dny – tedy za skupinu ádk se stejnou hodnotou ve sloupci ,zadáme:

Výsledek:

P i vyhodnocování dotazu jsou nejprve v tabulce nalezeny všechny ádky se stejným datumem prodeje – postupn 10.9., 12.9. a 13. 10. 1998. Ve

výsledku je pak pro každý den pouze jeden ádek a ve sloupci je zobrazen sou et prodejních cen za jednotlivé dny – 10. 9. byla prodán pra kaza 15.000,– K , lednice za 8.000,– K a lampa za 500,– K tedy zboží celkem za 23.500,– K . Dne 12. 9. byly prodány pouze dv lampy – celkem za 1.000,– K . A nakonec 13. 10. byla prodána pouze lednice za 8.000,– K .

Podobným postupem m žeme získat informace o po tu prodaných kusjednotlivých druh zboží. K získání po tu ádk použijme funkci a ádky ve výsledku seskupíme podle druhu zboží:

Výsledek:

Datum prodeje Zboží Cena10.9.1998 Pra ka 1500010.9.1998 Lednice 800010.9.1998 Lampa 50012.9.1998 Lampa 50012.9.1998 Lampa 50013.10.1998 Lednice 8000

Page 144: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

144 P ÍKAZ SELECT ______________________________________________

�7.5.3 Seskupení podle více sloupcZa klí ovým slovem m žeme uvést i více sloupc , podle kterých budou ádky seskupeny. M žeme tak získat podrobn jší p ehled obsahující po et druh jednotlivých zboží prodaných za jednotlivé dny:

Výsledek:

7.5.4 Použití výraz v GROUP BY P i definici seskupování nejsme omezeni pouze na sloupce vstupujících tabu-lek, ale m žeme zadat libovolný výraz ( 10.6). Pro každý ádek ve vstupu-jící tabulce bude tento výraz vyhodnocen a seskupeny budou ty ádky, pro které bude výraz nabývat stejné hodnoty.

Jako p íklad použijeme funkci , která vrátí po adové íslo m síce pro dané datum. Výraz bude nabývat hodnoty 9 pro všechny prodeje v zá í a hodnoty 10 pro prodeje v íjnu. Nyní m žeme velmi jednoduše zjistit celkové tržby za jednotlivé m síce:

Výsledek:

Page 145: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

___________________________________ GROUP BY – SESKUPENÍ ÁDK 145

�7.5.5 Omezení ádk ve skupinPomocí klí ového slova je možné omezit po et ádk ve všech skupi-nách. Zadáním podmínky za budou dále zpracovány a seskupeny pouze ty ádky, pro které bude tato podmínka spln na.

Chceme-li zjistit celkové tržby za jednotlivé dny, ale bez zapo ítání proda-ných lamp, použijeme následující dotaz:

Výsledek:

P ed vlastním seskupením ádk podle dne uskute n ní prodeje byly vy azenyvšechny ádky popisující prodej lampy. Tím jsme dostali odlišné výsledky oproti prvnímu p íkladu v tomto oddíle, kdy podmínka uvedena nebyla.

Page 146: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

146 P ÍKAZ SELECT ______________________________________________

�7.6 HAVING – omezení souhrnných ádkPoužijeme-li v dotazu ást , m žeme pomocí podmínky za klí ovým slovem omezit, které souhrnné ádky budou uvedeny ve výsledku. Pouze souhrnné ádky, pro které je zde uvedená podmínka spln na,jsou za azeny do výsledku.

Poznámkaþ Význam podmínky za je podobný podmínce za s tím rozdí-

lem, že za se omezují jednotlivé ádky ješt p ed jejich p ípadnýmseskupením podle a za se omezují ádky souhrnné.

7.6.1 Syntaxe

kde <agrega ní_podmínka> je podmínka založená na agrega ní funkci (8.1.5).

Poznámkaþ Výraz uvedený v ásti se nemusí vyskytovat v seznamu výstupních

sloupc za klí ovým slovem .

7.6.2 Omezení souhrnných ádk na výstupu Máme následující tabulku popisující uskute n né prodeje r zných druhzboží:

Naším cílem je zjistit dny, ve kterých bylo dosaženo celkové výše tržeb pod 10.000,– K . Jde o dny, kdy sou et cen prodaného zboží byl menší než 10.000,– K . Záznamy o prodeji nejprve seskupíme podle dne prodeje, a potom vybereme pouze ty dny, kdy sou et cen nedosáhl 10.000,– K :

Datum prodeje Zboží Cena10.9.1998 Pra ka 1500010.9.1998 Lednice 800010.9.1998 Lampa 50012.9.1998 Lampa 50012.9.1998 Lampa 50013.10.1998 Lednice 8000

Page 147: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________ HAVING – OMEZENÍ SOUHRNNÝCH ÁDK 147

�Výsledek:

Page 148: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

148 P ÍKAZ SELECT ______________________________________________

�7.7 ORDER BY – set íd ní ádk na výstupu Není-li ást v p íkazu zadána, budou ádky ve výsledku uvedeny v po adí, ve kterém byly zpracovány. Toto po adí nemusí být odvo-zeno od po adí ádk ve vstupujících tabulkách. V n kterých prost edích(nap íklad Oracle) ani není zaru eno, že po adí ádk ve výsledku jednoho dotazu zadaného dvakrát bude totožné.

Zadáním výraz za m žeme zajistit, že ádky ve výsledku dota-zu budou vždy ve stejném po adí a navíc set íd né postupn podle hodnot t chto výraz .

7.7.1 Syntaxe

kde

|

Je-li zadáno více kritérií, je jako primární kritérium použito první a ostatní kritéria jsou použita jako sekundární.

ádky obsahující jako hodnotu pro t íd ní jsou za azeny bu na za-átek, nebo na konec seznamu ádk ve výsledku. Konkrétní umíst ní závisí

na použitém databázovém systému. Kritérium, podle kterého se t ídí, nemusí být zárove uvedeno v seznamu

výstupních sloupc za klí ovým slovem , i když to bývá obvyklé.

7.7.1.1 Omezení syntaxe p i použití ORDER BY Je-li v p íkazu SELECT použita ást , musíme dodržet ur itá pravi-dla p i definici kritérií pro t íd ní.Za klí ovým slovem je možné uvést pouze: þ výrazy s agrega ními funkcemi ( 8.1.5); þ výrazy, které jsou konstantní pro všechny ádky v rámci skupiny – tedy

výrazy totožné s t mi, které jsou za klí ovým slovem , nebo jsou od t chto výraz odvozeny.

Page 149: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________ ORDER BY – SET ÍD NÍ ÁDK NA VÝSTUPU 149

�7.7.2 Vzestupné set íd ní ádk na výstupu Chceme-li set ídit seznam prodaného zboží podle datumu prodeje, použijeme sloupec jako kritérium pro t íd ní.

Výsledek:

7.7.3 Sekundární kritérium t íd níV p edchozím p íkladu se vyskytuje n kolik ádk , které mají shodné datum prodeje. Po adí, ve kterém jsou tyto ádky uvedeny na výstupu, je proto ná-hodné a závisí zcela na zp sobu, kterým aktuáln používaný databázový systém dotaz zpracovává. Chceme-li zajistit pevn dané po adí i u ádk , které mají stejnou hodnotu ve sloupci používaném jako kritérium t íd ní, musíme uvést další, sekundární kritéria. Tímto kritériem m že být nap íklad název prodaného zboží.

Výsledek:

Page 150: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

150 P ÍKAZ SELECT ______________________________________________

�Ve výsledku p edchozího dotazu jsou ádky set íd ny primárn podle datumu prodeje. Je-li toto datum shodné pro dva a více ádk , jsou ádky v rámci tohoto dne set íd ny podle názvu zboží abecedn .

P esto m žeme stále nalézt dva ádky, které jsou nejednozna n set íd ny.Jedná se o dv prodané lampy dne 12. 9. 1998. Abychom byli schopni jedno-zna n set ídit i tyto ádky, musel by v tabulce existovat sloupec, který by jednozna n identifikoval každé zboží – nap íklad výrobní íslo. Tento slou-pec bychom potom mohli použít jako jedno z kritérií t íd ní.

7.7.4 Sestupné set íd ní ádk na výstupu Ze syntaxe je patrné, že dovoluje použití modifikátor a .Názvy modifikátor jsou odvozeny z anglického „ascending“ – vzestupný a „descending“ – sestupný. Jak je nyní z ejmé, m žeme pomocí t chto modifi-kátor ovlivnit vzestupnost nebo sestupnost set íd ní podle zadaného kritéria:

Výsledek:

Pomocí modifikátoru jsme docílili sestupného set íd ní prodej podle datumu prodeje.

Poznámkaþ Pomocí modifikátoru bychom zajistili vzestupné set íd ní. Použití

tohoto modifikátoru je však nepovinné a výstup je vždy set íd n vzestupn ,pokud není žádný modifikátor zadán.

7.7.5 T íd ní podle hodnoty výrazu P i definici kritéria t íd ní nejsme omezeni pouze na názvy sloupc , ale lze použít libovolný výraz. Tento výraz m že být založen na jedno ádkovýchfunkcích, není-li v dotazu ást , nebo na agrega ních funkcích, je-li ást sou ástí dotazu.

Page 151: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________ ORDER BY – SET ÍD NÍ ÁDK NA VÝSTUPU 151

�Chceme-li získat seznam zam stnanc set íd ný podle výše mzdy v etn

prémií zvýšených o 20 %, a to sestupn , použijeme jako kritérium výraz a modifikátor zajiš ující sestupné set íd ní:

Výsledek:

Pro zjišt ní dn s nejnižšími tržbami použijeme jako kritérium sou et cen prodaného zboží SUM(cena):

Výsledek:

7.7.6 Po adí sloupce jako kritérium pro t íd níP i t íd ní podle ur itého kritéria je zvykem zahrnout toto kritérium i do se-znamu výstupních sloupc , aby byl zp sob t íd ní patrný.

V p edchozím p íkladu jsme museli dvakrát uvád t stejný výraz – jednou v seznamu výstupních sloupc za klí ovým slovem a podruhé jako kritérium t íd ní za klí ovým slovem . Toto duplicitní vypisování jednak zdržuje p i psaní a hlavn m že pozd ji vést k velmi t žko odhalitel-ným chybám, když opravíme pouze jeden výskyt výrazu a zapomene opravit výskyt druhý.

Z t chto d vod dovoluje syntaxe jazyka SQL uvést za klí ovým slovem po adí sloupce v seznamu výstupních sloupc jako kritérium

t íd ní. P edchozí p íklady bychom tedy mohli p epsat elegantn ji takto:

Page 152: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

152 P ÍKAZ SELECT ______________________________________________

�a

Výhodou je kratší zápis a také fakt, že nem že dojít k chyb b hem zápisu druhého výskytu výrazu a následn k chybným výsledk m. Nevýhodou je možnost, že budeme m nit po adí sloupc ve výsledku a zapomeneme opravit íslo za .

7.7.7 T íd ní ve složených dotazech Používáme-li t íd ní ve složených dotazech ( 7.7), musí být ástuvedena až za posledním dotazem. Výsledkem je pak set íd ní všech ádksloženého dotazu podle zadaného kritéria.

7.7.8 Oracle þ Jako identifikaci sloupce lze použít i alternativní pojmenování sloupce

uvedené za klí ovým slovem v seznamu výstupních sloupc .þ Ve složených dotazech lze jako kritérium použít pouze po adí sloupc .

Page 153: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_____________________ UNION, INTERSECT, MINUS – SLOŽENÉ DOTAZY 153

�7.8 UNION, INTERSECT, MINUS – složené

dotazyVýsledky více dotaz lze spojit ve výsledek jeden pomocí množino-vých operátor ( 10.5). P i spojování výsledk více dotaz je d ležité, aby všechny dotazy m ly stejnou strukturu sloupc a aby datové typy sloupc na stejné pozici byly shodné. Pouze v tomto p ípad je možné vytvo it složený dotaz.

7.8.1 Syntaxe

7.8.2 Sjednocení výsledk dvou dotazP edstavme si, že máme dv tabulky o stejné struktu e, které obsahují údaje o zam stnancích. V tabulce jsou všichni zam stnanci v pracovním pom rua v tabulce jsou zam stnanci, kte í již z firmy odešli. Na oslavu desátého výro í založení firmy bychom cht li pozvat všechny sou asné i bývalé zam stnance. Jejich seznam získáme složením dotaz do tabulky zam stnanc a do tabulky minulých zam stnanc :

Množinový operátor zajistí, že ve výsledku budou všechny zá-znamy z výsledku prvního i druhé dotazu. Kritérium t íd ní zadané za

set ídí celý výstup abecedn podle p íjmení, resp. podle jmen zam stnanc .

Page 154: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

154 P ÍKAZ SELECT ______________________________________________

�7.9 Spojování tabulek Spojit tabulky (z anglického „join“) pot ebujeme tehdy, pokud v jedné tabulce nejsou všechny námi požadované informace.

Jednotlivé typy spojení si budeme vysv tlovat na následujících dvou tabul-kách p edstavujících zam stnance a odd lení fiktivní firmy:

7.9.1 Jednoduché spojení p es jeden sloupec V tabulce zam stnanc je pouze íslo odd lení, a ne jeho název. Chceme-li vypsat seznam zam stnanc spolu s názvy odd lení, ve kterých pracují, musí-me použít informace z obou tabulek:

nebo

Výsledek:

Poznámkaþ V seznamu za klí ovým slovem se nemusí objevit všechny sloupce

z obou tabulek, ani ty, které jsou použity v podmínce pro spojení. Zde jsou

Prijmeni OddNovák 1 Adámek 2 Ji í ek 3 Bílková 1

Nazev OddPersonální 1 Reklamní 2 Provozní 3

Page 155: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ SPOJOVÁNÍ TABULEK 155

�uvedeny pouze pro zvýrazn ní shodnosti ísla odd lení v tabulce zam st-nanc a v tabulce odd lení v ádcích, které byly navzájem spojeny.

7.9.2 Ur ení podmínky pro spojení tabulek Podmínka zajiš uje, že ve výsledku bude ke každému zam stnanci uveden pouze ádek z tabulky , který obsahu-je název odd lení se stejným íslem, jako má tento zam stnanec.

Kdybychom tuto podmínku neuvedli, provedl by se kartézský sou in (2.1.1) obou tabulek (a obecn všech tabulek uvedených za klí ovým slovem

). To by znamenalo, že ke každému ádku z tabulky zam stnanc se vyhledají všechny ádky z tabulky odd lení. Výsledek dotazu by tedy m lpo et ádek rovný po tu zam stnanc krát po et odd lení:

Výsledek:

Vidíme, že velká v tšina ádk ve výsledku nedává smysl: pan Novák pracuje pouze v odd lení íslo 1. S reklamním a provozním odd lením nemá nic spole ného. Nadbyte né ádky m žeme nalézt i u dalších zam stnanc .Správné jsou pouze ty, ve kterých se shoduje íslo odd lení v tabulce zam st-nanc ( ) s íslem odd lení v tabulce odd lení ( ). Proto zadáváme p i spojování tabulek podmínku, která omezí ádky na ty, které chceme za adit do výsledku.

Zadávaná podmínka nemusí být vždy na rovnost sloupc . Dále v tomto od-díle si ukážeme situaci, kdy jako podmínku použijeme p íslušnost do interva-lu. Ve v tšin p ípad však bude podmínku tvo it rovnost hodnot ve dvou sloupcích.

Page 156: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

156 P ÍKAZ SELECT ______________________________________________

�7.9.3 Pojmenování sloupc za SELECT Za klí ovým slovem m žeme nyní uvést libovolný sloupec ze všech tabulek vypsaných za klí ovým slovem . Pokud však existuje stejnpojmenovaný sloupec ve dvou a více tabulkách, musíme vždy uvést i název tabulky a te ku p ed vlastním názvem sloupce – nap . ( íslo odd le-ní v tabulce zam stnanc ).

7.9.4 Spojení tabulek pomocí více sloupcMáme-li složit jší hierarchii tabulek, setkáme s p ípady, kdy je nutné spojovat tabulky pomocí více než jednoho sloupce. Jedná se o p ípady tzv. složeného klí e. ádek tabulky je jednozna n ur en až tehdy, když známe hodnoty alespo dvou sloupc .

P edstavme si tabulku popisující docházku (po et odpracovaných hodin) za jednotlivé m síce. Každý zam stnanec je identifikován svým rodným íslem a každý m síc dvoj íslím ve tvaru RRRRMM (nap . 199809 – zá í 1998).

V této tabulce je n kolik ádk pro každý m síc – po et ádk je roven po tuzam stnanc zam stnaných v tento m síc. Dále je zde i více ádk pro každé-ho zam stnance – podle po tu m síc , po který je zam stnán. Chceme-li zjistit po et odpracovaných hodin, musíme znát dva údaje – rodné íslo zam stnancea zárove m síc, který nás zajímá. Dvojici {R ; M síc} se íká složený klí .

Máme-li navíc tabulku o stejné struktu e, která však obsahuje zameškaný po et hodin (nap . z d vodu nemoci), musíme p i spojování obou tabulek použít podmínku pro oba sloupce:

nebo

M síc R Hodin199809 6208120153 10 199809 5656021265 15 199809 4810120055 11 199808 6208120153 6 199808 5656021265 20 199808 4810120055 5 199807 6208120153 12 199807 5656021265 8

Page 157: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ SPOJOVÁNÍ TABULEK 157

�Poznámkaþ Druhou hodnotou ve složeném klí i bývá asto as nebo asové období.

7.9.5 Spojení více tabulek Spojujeme-li více tabulek, musíme uvést všechny tabulky v seznamu za klí o-vým slovem a také uvést spojovací podmínku pro všechny tabulky. Není nutné uvád t spojovací podmínku pro spojení každé tabulky s každou, ale m žeme využít tzv. transitivity spojení. To znamená, že pokud je tabulka Aspojena s tabulkou B a zárove tabulka B s tabulkou C, je automaticky spoje-na i tabulka A s tabulkou C.

nebo

Poznámkaþ Spojujeme-li více tabulek, p estává být konstrukce pomocí p ehledná

a bývá lepší použít variantu s podmínkami za .

7.9.6 Spojení tabulky se sebou samou Speciálním p ípadem spojování tabulek je spojení tabulky se sebou samou. Toto, pon kud obtížn pochopitelné spojení, využijeme v p ípad , že jeden sloupec tabulky odkazuje na jiný záznam ve stejné tabulce. Jako p íklad si uvedeme tabulku zam stnanc , ve které je u každého zam stnance uvedeno i osobní íslo jeho bezprost edního na ízeného:

Tabulka s hierarchií záznam

Page 158: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

158 P ÍKAZ SELECT ______________________________________________

Z takto zadané tabulky vidíme, že pan Ji í ek má jako bezprost edn nad íze-ného pana Nováka ( ) a ten má zase jako nad ízeného pana Adámka ( ). Pan Adámek je editelem spole nosti, a proto již nemá nad ízeného ( ). Záznamy v tabulce tvo í hierarchii, jejímž vrcholem je nejvyšší nad ízený (Adámek) a na nejnižší úrovni zam st-nanci bez dalších pod ízených (Ji í ek, Bílková).

Nyní m žeme vypsat seznam zam stnanc spolu se jménem jejich bezpro-st edního nad ízeného. K tomu použijeme spojení tabulky se sebou samou pomocí sloupce :

nebo

Výsledek:

Všimn me si použití alternativního pojmenování tabulky – jednou jako a podruhé jako . Jedin tak m žeme jednozna n ur it, který

sloupec ve výsledném kartézském sou inu máme na mysli. Dále si všimn me, že ve výsledku není uveden pan Adámek. Ten má totiž

ve sloupci hodnotu , ke které se nenalezne žádný odpovídající záznam v tabulce . Chceme-li, aby se ve výsledku objevily i takovéto záznamy, musíme použít tzv. vn jší spojení ( dále).

Cislo Prijmeni SefCis100 Novák 101 101 Adámek NULL 102 Ji í ek 100 103 Bílková 100

Page 159: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ SPOJOVÁNÍ TABULEK 159

�7.9.7 Zvláštní druhy spojení Místo velmi restriktivního omezení na rovnost dvou sloupc , které se však používá nej ast ji, m žeme použít i jiné operátory nebo i složit jší podmínky.

7.9.7.1 Omezení pomocí intervalu P edstavme si tabulku popisující skupiny podle kódu OKE . Tento kód pro ur ení hospodá ské innosti je hierarchický. To znamená, že postupným p idáváním íslic do ty místného kódu zp es ujeme obor innosti. Je-li skupina „Dobývání nerostných surovin“ ozna ena kódem 1 na první pozici, m žeme p idáním další íslice 1 zp esnit obor innosti na „Dobývání ropy, zemního plynu, bitumenních hornin a související innosti“ (OKE = 1100). Chceme-li uvést obor innosti ješt p esn ji, m žeme p idat další íslice – nap . OKE = 1112, což vyjad uje „Dobývání zemního plynu (v . plynu z d lní degazace)“. Máme následující tabulku hlavních skupin kódu OKE :

Hlavní skupiny kódu OKE

Ve sloupcích a je uveden interval ty místného kódu, který pat í celý do p íslušné skupiny.

Dále budeme mít tabulku firem, která bude krom názvu firmy obsahovat i úplný ty místný kód OKE popisující obor innosti firmy:

Nyní bychom pot ebovali vypsat seznam firem spolu s názvem oboru innostipodle hlavních skupin. V tomto p ípad nem žeme použít rovnost kódu OKE v obou tabulkách, protože v tabulce OKE nemáme uvedeny všechny možné varianty ty místného kódu. Známe však interval, který pat í do té které skupiny:

Skupina Od DoZem d lství, myslivost, rybolov 0100 0503 Dobývání nerostných surovin 1000 1459 Zpracovatelský pr mysl 1500 3729 Výroba a rozvod elekt iny, plynu, páry a vody 4000 4199 Výstavba a stavebnictví 4500 4559 Obchod, odbyt, pohostinství a ubytování 5000 5552 Doprava, skladování, cestovní ruch a spoje 6000 6429 Ostatní innosti 7000 9999

Název OKEABC spol. s r. o. 1525 OKD, a.s. 1110

EZ, a.s. 4010

Page 160: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

160 P ÍKAZ SELECT ______________________________________________

�nebo

7.9.7.2 Spojení tabulek bez podmínky – kartézský sou inExistují p ípady, kdy chceme využít vlastností kartézského sou inu – vytvo e-ní všech kombinací ádk z obou tabulek. V tomto p ípad nebudeme zadávat žádnou podmínku pro spojení obou tabulek.

Jedním takovým p ípadem je možnost implementace cyklu s pevným po-tem opakování. P edstavme si tabulku, ve které jsou uvedeny údaje o ro ních

úrocích z vloženého vkladu:

My bychom nyní pot ebovali zjistit pom rnou ást úroku p ipadajícího na jednotlivé m síce roku s ohledem na jejich délku ve dnech. Pom rná ástúroku p ipadajícího na jeden m síc je dána takto:

Poznámkaþ P edpokládáme nep estupný rok – tzn. 365 dní v roce.

Nyní bychom mohli vypo ítat pom rnou ást pro leden – 31 dní, pro únor – 28 dní a tak dále až do prosince. Tento zp sob je však zbyte n pracný a pro v tšímnožství ú t nepoužitelný.

Vytvo íme si tedy pomocnou tabulku obsahující stejný po et záznam , jako je po et m síc v roce – 12. Krom po adového ísla m síce a jeho názvu bude v tabulce ješt sloupec obsahující po et dní v m síci:

Ú et Úrok p.a. v K12345678 550 48789797 100 87654321 800

Page 161: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ SPOJOVÁNÍ TABULEK 161

Spojením tabulky obsahující ú ty s tabulkou m síc (bez použití podmínky) dostaneme tabulku obsahující 3 (po et ú t ) krát 12 (po et m síc ), to je 36 ádk . Ve výsledku budou všechny možné kombinace ísel ú t a m síc –

(12345678; leden), (12345678; únor), …, (48789797; leden), …, (87654321; prosinec).

Na záv r ješt musíme upravit celkový úrok podle po tu dní v m síci a zís-káme námi požadovaný výsledek:

Výsledek:

íslo Název Po et dní 1 leden 31 2 únor 28 3 b ezen 31 4 duben 30 5 kv ten 31 6 erven 30 7 ervenec 31 8 srpen 31 9 zá í 30 10 íjen 31 11 listopad 30 12 prosinec 31

Page 162: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

162 P ÍKAZ SELECT ______________________________________________

7.9.8 Vnit ní a vn jší spojení Do sou asné doby jsme pracovali s tzv. vnit ním spojením tabulek (anglicky INNER JOIN). Do výsledku byly zahrnuty pouze ty ádky z obou tabulek, pro které byla nalezena odpovídající hodnota v druhé tabulce.

Existuje zp sob spojení, který nám umož uje za adit do výsledku i ádky,pro které nebyla nalezena odpovídající hodnota v druhé tabulce. M žeme tak vypsat seznam odd lení a do nich pat ících zam stnanc , ve kterém budou uvedena i odd lení, ve kterých v sou asné dob nikdo nepracuje. Nebo naopak m žeme vypsat seznam všech zam stnanc a odd lení v etn zam stnanc ,kte í nejsou za azení do žádného odd lení.

7.9.8.1 Vnit ní spojení Máme následující tabulky zam stnanc a odd lení:

Page 163: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ SPOJOVÁNÍ TABULEK 163

Podívejme se na výsledek následující dotazu, který použije vnit ní spojení:

nebo

Výsledek:

Do výsledku nebyli zahrnuti zam stnanci, kte í nemají zadané íslo odd lení(Váchová) nebo jejich odd lení neexistuje v tabulce odd lení (Ji í ek). Navíc ve výsledku nejsou ani odd lení, ve kterých není žádný zam stnanec (Provoz-ní) nebo nemají p id lené íslo (Sklad).

Pozor!þ Podmínka není spln na ani v p ípad , kdy

(Váchová) a (Sklad). Výsled-kem porovnání je totiž op t , a ne hodnota ( ).

Poznámkaþ Tento zp sob spojení se použije i v p ípad , že neuvedeme klí ové slovo

p ed .

Prijmeni OddNovák 1 Adámek 2 Váchová NULL Ji í ek 4 Bílková 1

Nazev OddPersonální 1 Reklamní 2 Provozní 3 Sklad NULL

Page 164: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

164 P ÍKAZ SELECT ______________________________________________

�7.9.8.2 Vn jší spojení Ve výsledku budou i ádky, pro které nebyly nalezeny odpovídající hodnoty v druhé tabulce. Pro definici vn jšího spojení se používá v tšinou varianta syntaxe ásti obsahující slovo .

V databázových prost edích, které tuto variantu nepodporují, jsou vn jší spojení ešena pomocí zvláštní syntaxe za klí ovým slovem (7.8.10).

Druhy vn jšího spojení Levé vn jší spojení

Použijeme-li konstrukci , budou ve výsledku zahrnuty všechny ádky z levé (z první) tabulky. Nebyl-li nalezen odpovídající ádek v pravé

tabulce, budou ve výsledku hodnoty ve všech sloupcích použitých z druhé tabulky.

Výsledek:

Pravé vn jší spojení Použijeme-li konstrukci , budou ve výsledku zahrnuty všech-ny ádky z pravé (z druhé) tabulky. Nebyl-li nalezen odpovídají ádekv levé tabulce, budou ve výsledku hodnoty ve všech sloupcích použi-tých z druhé tabulky.

Výsledek:

Page 165: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ SPOJOVÁNÍ TABULEK 165

�7.9.9 Technické detaily spojování tabulek Spojování tabulek je asov velmi náro ná innost. Proto je vhodné se zamys-let nad zp sobem, kterým jsou tabulky spojovány a následn se pokusit vhod-ným zadáním p íkazu zrychlit jeho zpracování.

P i spojování tabulek se jedná obecn o kartézský sou in dvou relací. Vý-sledný po et záznam bude r st exponenciáln s po et ádk ve vstupujících tabulkách.

Naším základním cílem by proto m lo být co nejvíce omezit po et ádkv tabulkách ješt p ed vlastním spojováním. Chceme-li nap íklad zjistit sou-hrnné údaje pouze o prodejnách v regionu ‘Jižní echy’, omezíme nejprve tabulku prodejen pouze na prodejny z jižních ech a teprve výsledek budeme spojovat s tabulkami prodej , p ijatých reklamací apod.

Dále je d ležité, abychom vždy uvád li omezení pro spojovací sloupce (v nebo za ), a tím co nejvíce snížili po et ádk ve výsledku.

K naší radosti se v sou asné dob setkáme pouze s databázovými systémy, které mají zabudovány r zné mechanismy pro zrychlení spojování tabulek. Tyto mechanismy jsou založeny na existenci index nad hodnotami v tabulkách a na statistických informacích, pomocí kterých je vybrán nejvhod-n jší zp sob spojování tabulek. Spojujeme-li nap íklad tabulku obsahující stovky tisíc ádk s tabulkou o velikosti n kolika ádk , je výhodn jší prochá-zet velkou tabulku ádek po ádku a v malé tabulce dohledávat odpovídající ádky. Tato a podobná rozhodnutí uskute uje databázový systém automatic-

ky. Chceme-li zjistit p esný postup vyhodnocování našeho dotazu, použijeme p íkaz .

7.9.10 Oracle

7.9.10.1 Definice vn jších spojení Protože v prost edí Oracle není možné používat variantu ásti obsahující klí ové slovo , musí se vn jší spojení vyzna it p i definici podmínky spojení za klí ovým slovem . K tomu slouží speciální operátor ,který se musí uvést za názvem sloupce, který m že obsahovat hodnotu .U levého vn jšího spojení se uvádí za názvem sloupce pravé tabulky, u pravého vn jšího spojení naopak.

Syntaxe

Levé vn jší spojení

Page 166: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

166 P ÍKAZ SELECT ______________________________________________

�Pravé vn jší spojení

þ Pokud se tabulky spojují p es více sloupc , musí být operátor vn jšíhospojení uveden u všech sloupc .

þ Operátor se uvádí vždy bezprost edn za názvem sloupce, a to i v p ípad , že název sloupce je sou ástí výrazu.

þ Obsahuje-li podmínka za klí ovým slovem operátor , nem žebýt kombinována s další podmínkou pomocí operátoru .

Page 167: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________________________ VNO ENÉ DOTAZY 167

�7.10 Vno ené dotazy Vno eným dotazem rozumíme dotaz , který je sou ástí jiného p íkazujazyka SQL. Výsledek vno eného dotazu je použit p i provád ní nad ízenéhoSQL p íkazu.Vno ené dotazy se mohou také nazývat „poddotazy“ – z anglického „subquery“.

7.10.1 Syntaxe

7.10.2 Možnosti použití vno ený dotaz Vno ené dotazy m žeme použít v t chto p ípadech:þ jako do asn vytvo enou „tabulku“ v ásti nad ízeného dotazu

;þ jako speciální typ výrazu ( 10.6) v p ípad , že výsledkem vno eného

dotazu je práv jedna hodnota; þ jako sou ást podmínky za operátory , , , a (

10.3);

PoznámkaVe všech p edchozích p ípadech musí být vno ený dotaz uzav en do kulatých závorek. Dále lze vno ené dotazy použít (bez uzavírání do závorek): þ pro p idání záznam do tabulky v p íkazech a ;þ p i vytvá ení dynamických pohled v p íkazu .

7.10.3 Použití vno ených dotazVno ené dotazy použijeme v p ípadech, kdy pot ebujeme nejprve získat ur i-tou informaci a tu následn použít v dalším dotazu. Další uplatn ní vno enýchdotaz je v situaci, kdy pro každý zpracovávaný záznam musíme zjistit doda-te nou informaci nutnou pro další zpracování tohoto záznamu.

7.10.4 Vno ený dotaz vracející práv jednu hodnotu Jako první p íklad si uvedeme situaci, kdy chceme zjistit všechny zam stnan-ce, kte í mají v tší než pr m rný plat ve firm . Protože neznáme hodnotu

Page 168: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

168 P ÍKAZ SELECT ______________________________________________

�pr m rného platu ve firm , museli bychom nejprve zadat dotaz na pr m rnýplat ve firm :

a výsledek tohoto dotazu (nap íklad 8.000,– K ) bychom použili p i zadávání následujícího dotazu:

Tento postup by vedl ke správnému výsledku, ale byl by neefektivní. Oba dotazy m žeme totiž spojit v jeden:

Vno ený dotaz zjiš ující pr m rný plat bude vyhodnocen pouze jednou a jeho výsledek bude porovnáván se všemi platy zam stnanc v tabulce .

7.10.5 Vno ený dotaz vracející více hodnot V p edchozím p íkladu nám agrega ní funkce zaru ovala, že výsledkem vno eného dotazu bude práv jedna hodnota bez ohledu na po et ádkv tabulce zam stnanc . P edstavme si situaci, kdy chceme zjistit všechny zam stnance pracující ve stejném odd lení jako pan Novák. K tomu použije-me následující dotaz:

Podmínka zajiš uje, že výsledkem vno eného dotazu bude pouze íslo odd lení, ve kterém pracuje pan Novák.

Co když však bude ve firm pracovat více zam stnanc tohoto jména? A co když bude každý pracovat v jiném odd lení? Výsledkem vno eného dotazu nebude v tomto p ípad pouze jediný ádek a v závislosti na použitém databá-zovém prost edí dojde bu k chyb , nebo k neo ekávaným výsledk m – nap íklad bude vypsáno pouze odd lení nalezené jako první, nebo naopak všechna odd lení apod.

ešením, které zajiš uje správnou funkci dotazu bez ohledu na aktuální hodnoty v tabulkách, je použití n kterého z operátor pro porovnávání (10.3). V tomto p ípad by se pravd podobn hodil nejvíce operátor , který zajistí, že ve výsledku budou uvedeni zam stnanci všech odd lení, ve kterých se vyskytuje n který pan Novák. Správn zapsaný dotaz by pak vypadal takto:

Page 169: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________________________ VNO ENÉ DOTAZY 169

�Druhou možností by bylo zadat podmínku ve vno eném dotazu tak, aby byla naprosto jedine ná z hlediska hodnot v tabulce zam stnanc . K tomu bychom mohli použít nap íklad rodné íslo.

7.10.6 Vno ený dotaz vyhodnocovaný pro každý ádekP edstavme si situaci, kdy chceme vypsat všechny zam stnance, kte í nebyli nikdy nemocní – nemají žádný záznam v tabulce . Jako podmínky tedy použijeme neexistenci ádku v tabulce s rodným íslem zam stnance:

Pro každého zam stnance je prohledána tabulka , jestli neobsahuje jeho rodné íslo. Pouze zam stnanci, pro které je výsledek vno eného dotazu prázdný ( ), jsou za azeni do výsledku.

Poznámkaþ Použití tohoto typu vno ených dotaz je možné v n kterých p ípadech

nahradit vhodn formulovanou podmínkou pro spojení dvou nebo více ta-bulek. Protože je zp sob spojování tabulek ve v tšin databázových pro-st edích vysoce optimalizován, je pravd podobné, že takto zadaný dotaz bude vyhodnocován rychleji než použití vno eného dotazu.

Syntaxe

Obecná syntaxe vno eného dotazu vyhodnocovaného pro každý ádek nad í-zeného dotazu je následující:

Page 170: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

170 P ÍKAZ SELECT ______________________________________________

�Poznámkaþ Všimn me si použití sloupce z tabulky nad ízeného dotazu (<tabul-

ka1>.<sloupec>) v podmínce vno eného dotazu.

Dalším p íkladem tohoto typu vno eného dotazu m že být zjišt ní všech zam stnanc , kte í mají nadpr m rný plat ve svém odd lení. Narozdíl od p íkladu v p edchozím oddíle, kde jsme porovnávali plat zam stnances pr m rným platem v celé firm , musíme nyní po ítat pr m rný plat za odd lení, do kterého aktuáln zpracovávaný zam stnanec pat í:

Používá-li vno ený dotaz stejnou tabulku jako nad ízený dotaz, je nutné použít alternativní pojmenování pro tabulky (nap . a ), abychom mohli jednozna n ur it tabulku, do které sloupec pat í.

Page 171: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

88 Funkce

Kapitola 8

FUNKCE8.1 O funkcích obecn ..................................................................172

8.1.2 Návratová hodnota funkce.................................1728.1.3 Parametry funkce...............................................1728.1.4 Druhy funkcí .....................................................1738.1.5 Množina implementovaných funkcí ..................173

8.2 P ehled funkcí ..........................................................................1748.2.1 Funkce pro práci s ísly.....................................1748.2.2 Funkce pro práci se znaky .................................1808.2.3 Funkce pro typ Datum.......................................1908.2.4 Konverzní funkce ..............................................1958.2.5 Agrega ní funkce ..............................................1998.2.6 Ostatní funkce ...................................................202

Page 172: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

172 FUNKCE _____________________________________________________

8.1 O funkcích obecn�

Funkce slouží pro manipulaci s daty, jejich úpravu a transformaci, abychom získali požadovaný výsledek.

MS AccessV prost edí MS Access a obecn v produktech pod Windows musíme p i psaní parametr funkcí dát pozor na aktuální nastavení regionálních parametr . Je-li nastaveno eské národní prost edí, je nutné jako odd lova parametr použít st edník.

8.1.2 Návratová hodnota funkce Základní vlastností funkce je schopnost vrátit ur itou hodnotu jako výsledek. Funkce pak d líme do skupin podle toho, jakého typu je tato hodnota ( íselnéfunkce, znakové funkce atd.).

8.1.3 Parametry funkceProto, aby funkce mohla vrátit ur itou hodnotu, pot ebuje ve v tšin p ípadjednu nebo více hodnot na vstupu. P íkladem m že být funkce , která vrací absolutní hodnotu z ísla x, které ji p edáme jako vstup. T mto hodno-tám na vstupu se íká parametry nebo argumenty. Funkce m že mít jeden, dva i více parametr . Existují však i funkce, které nemají parametr žádný.

8.1.3.1 Automatická konverze datového typu parametru U každého parametru se o ekává, že bude ur itého datového typu. U d íveuvedené funkce se o ekává, že parametr x bude reálné íslo. Pokud p edáme jako parametr hodnotu jiného datového typu, závisí výsledek na používaném databázovém prost edí. Bu m že dojít k chyb nebo se po ítapokusí p evést hodnotu na správný datový typ. S druhou variantou se setkáme ve v tšin u nás používaných prost edí.

Ukažme si automatickou konverzi na p íkladu. P edpokládejme, že z n jakého d vodu je za parametr x funkce p edán et zec znak

. Protože je zde o ekávána íselná hodnota, pokusí se po íta p evéstet zec na íslo. V tomto p ípad bude úsp šný, protože et zec znak

je syntakticky správn napsané íslo a návratová hodnota funkce bude

Page 173: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ O FUNKCÍCH OBECN 173

íslo 150. Pokud by et zec znak obsahoval nap íklad písmena nebo by byl jinak chybn napsaným íslem, konverze by skon ila chybou. �8.1.4 Druhy funkcíV každém databázovém systému existují dva druhy funkcí – skalární a agre-ga ní: Skalární funkce

Pracují vždy s jednou hodnotou na vstupu a jednou hodnotou na výstupu. Skalární funkce je vyhodnocována pro každý ádek tabulky. P íkladem jefunkce vracející absolutní hodnotu z ísla nebo funkce

vracející délku et zce znak . S tímto typem funkcí se m -žeme setkat i v jiných produktech, jako jsou kompilátory r zných progra-movacích jazyk nebo tabulkové kalkulátory. Skalární funkce m žeme po-užít jako sou ást libovolného výrazu.

Agrega ní funkce Pracují s množinou hodnot na vstupu a jejich výsledkem je jedna hodnota. Množinou hodnot na vstupu jsou bu všechny ádky tabulky nebo, jedna skupina ádk , provádíme-li seskupování ádk pomocí klí ového slova

. P íkladem je funkce , která vrací pr m rnou hodnotu za množinu ádk , nebo funkce , která vrátí po et ádk v množin .

Agrega ní funkce m žeme použít v seznamu výstupních sloupc za klí-ovým slovem nebo v podmínce pro skupinu ádk za klí ovým

slovem ( p íkaz ).

8.1.5 Množina implementovaných funkcí Množina funkcí, která je v daném prost edí implementována, m že být ur i-tým zp sobem modifikována. V žádném prost edí nemohou být implemento-vány všechny možné funkce a ani by to nebylo žádoucí. Tv rci jednotlivých prost edí proto do svých produkt vkládali takové funkce, které považovali za d ležité, aby na druhé stran neimplementovali jiné. V p ípad , že v právpoužívaném prost edí není daná funkce implementována, musíme se pokusit ji odvodit za pomoci funkcí existujících. Zejména u matematických funkcí bývá toto odvození možné.

8.1.5.1 R zné názvy pro stejné funkce P estože byl p vodn návrh SQL zamýšlen jako standard pro databázové produkty, postupn si jednotliví tv rci p idávali do svých produkt r znávylepšení nebo odlišnosti. Tím se cht li odlišit od svých konkurent a získat v tší podíl na trhu. Tento trend se patrn nejvíce projevil u funkcí, kde se velmi asto setkáme s p ípady, kdy jedna funkce má n kolik r zných názv ,podle toho, který produkt používáme.

Page 174: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

174 FUNKCE _____________________________________________________

8.2 P ehled funkcí �

8.2.1 Funkce pro práci s íslyíselné funkce vracejí íselnou hodnotu, stejn tak i jejich parametr nebo

parametry jsou íselné hodnoty. Po et platných íslic, resp. rozsah íselnýchdatových typ se liší produkt od produktu a pro jejich p esné zjišt ní bude t eba nahlédnout do originální dokumentace.

8.2.1.1 Základní a odvozené matematické funkce Každý databázový systém nabízí ur itou množinu matematických funkcí. Mezi jednotlivými systémy pak mohou být rozdíly v rozsahu t chto množin.V tšina produkt , se kterými se setkáme, má však definovány základní mate-matické funkce, pomocí kterých lze zbylé funkce odvodit. V následujícím p ehledu jsou proto uvedeny pouze základní funkce a na záv r je uvedena tabulka popisující odvození dalších funkcí.

ABSAbsolutní hodnota z ísla (jeho neznaménková ást).

ACOS OracleArcus cosinus – odvozená funkce.

ASIN OracleArcus sinus – odvozená funkce.

ATAN OracleATN MS Access

Arcus tangens – arctg – pro první a tvrtý kvadrant. Výsledkem je velikost úhlu v radiánech v intervalu (- /2; /2). Tato funkce je inverzní k funkci tangens – tg – . P evod radián na úhlové stupn provedeme vynáso-bením hodnotou 180/ . Zp t potom vynásobením hodnoty ve stupních hodno-tou /180.

Page 175: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 175

� ATAN2 Oracle

Jako arcus tangens, ale pro všechny kvadranty. Kvadrant je ur en znaménky u parametr x a y. Výsledkem je velikost úhlu v radiánech v intervalu (- ; ).

CEIL Oracle

Nejbližší celé íslo vyšší nebo rovné x.

CINT MS AccessP evod libovolného výrazu na celé íslo. Parametr m že být libovolného íselného typu nebo dokonce et zec znak – nap . . V tomto

p ípad se funkce pokusí nejprve p evést et zec znak na íslo.V p ípad , že výraz je desetinné íslo nebo byl zadán et zec znak repre-

zentující desetinné íslo, musí se provést zaokrouhlení. Zaokrouhlování se ídínásledujícími pravidly: 1. je-li první íslice za desetinnou árkou menší než ‘5’, je íslo zaokrouhleno

na jednotky dol ;2. je-li první íslice za desetinnou árkou v tší než ‘5’, je íslo zaokrouhleno

na jednotky nahoru; 3. je-li první íslice za desetinnou árkou ‘5’ je použito statistické zaokrouh-

lování, kdy se zaokrouhluje na nejbližší sudé íslo – tzn. na ; na atp.

Pozor!þ Pokud se provádí p evod z et zce znak , použijí se parametry z

Místního nastavení (Regional Settings) v panelu Nastavení (Settings).To znamená, že p i nastavení pro eskou republiku musí být dese-tinná ást odd lena árkou apod.

COSCosinus zadaného úhlu (v radiánech). ( funkce ).

COSH OracleHyperbolický cosinus – odvozená funkce

Page 176: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

176 FUNKCE _____________________________________________________

� EXP

ex, kde e = 2.71828183 ...

FIX MS AccessCelá ást z ísla – „od íznutí“ ásti za desetinnou árkou.

FLOOR Oracle

Nejbližší celé íslo nižší nebo rovno x.

INT MS Access

Nejbližší celé íslo nižší nebo rovno x.

LN Oracle

P irozený logaritmus. Hodnota parametru x musí být v tší než 0.

LOG MS Access

P irozený logaritmus. Hodnota parametru x musí být v tší než 0.

LOG Oracle

Logaritmus n o základu m – odvozená funkce

MOD Oracle

Page 177: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 177

Modulo (zbytek po d lení) m / n, kde m a n jsou celá ísla. V p ípad , že n je 0, vrací m. �Poznámkaþ V originální dokumentaci firmy Oracle se uvádí, že tato funkce

vrací odlišné výsledky od matematické definice, když je m záporné íslo. Modulo m/n lze podle správné definice vyjád it jako:

POWER Oracle

xy – odvozená funkce.

Poznámkaþ Když je x záporné, musí být y celé íslo.

RND MS AccessNáhodné íslo. Funkci je možné použít pro získání pseudonáhodného íslav tšího nebo rovného 0 a menšího než 1. Pseudonáhodnost spo ívá ve faktu, že vrácené íslo není zcela náhodné, ale odvozené z aktuáln nastaveného asuv po íta i nebo z posledn vráceného pseudonáhodného ísla.

Chceme-li generátor „náhodných“ ísel použít, musíme jej nejprve zinicia-lizovat pomocí funkce .

ROUND

Oracle

Zaokrouhlí x na n desetinných míst. n je nepovinný parametr. V p ípad , že je vynechán, je x zaokrouhleno na celé íslo. n musí být celé íslo. M že však být záporné, pokud chceme zaokrouhlit na desítky (n= –1), stovky (n= –2) atd.

MS AccessV prost edí MS Access není zvláštní funkce pro zaokrouhlování. Pro zaokrouhlování se používá obecná funkce , která p evede libovolný výraz (i textový, když je správn syntakticky zapsaným íslem) na celé íslo

Page 178: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

178 FUNKCE _____________________________________________________

textový, když je správn syntakticky zapsaným íslem) na celé íslo ( funk-ce ).�SGN MS AccessSIGN Oracle

Znaménková ást ísla x. Návratové hodnoty jsou popsány v následující abulce:t

Návratové hodnoty funkce SIGN, SGN Parametr Výsledek

x > 0 1x < 0 -1x = 0 0

SINSinus zadaného úhlu (v radiánech). ( funkce )

SINH OracleHyperbolický sinus – odvozená funkce.

SQR MS AccessSQRT Oracle

Druhá odmocnina z x. x musí být v tší nebo rovno 0.

TAN

Tangens zadaného úhlu (v radiánech). ( funkce ). Jinak též odvozená funkce.

TANH Hyperbolický tangens – odvozená funkce.

Page 179: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 179

� TRUNC

Zkrácení ísla x na n desetinných míst. n je nepovinný parametr. Není-li uveden, je z x vytvo eno celé íslo. Je-li n záporné, jsou zm n ny na 0 i ísli-ce nalevo od desetinné árky.

8.2.1.2 Seznam odvozených matematických funkcí

exp(x) = ex sgn(x) = 1 x > 0; -1 x < 0; 0 x = 0 sqr(x) = druhá odmocnina z x

Page 180: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

180 FUNKCE _____________________________________________________

�Odvození matematických funkcí

Odvozená funkce Zápis Odvozeníx na y xy exp(ln(x) * y) logaritmus o základu n logn(x) ln(x) / ln(n) tangens tg(x) sin(x) / cos(x)secans sec(x) 1 / cos(x)cosecans cosec(x) 1 / sin(x)cotangens cotan(x) 1 / tan(x)arcussinus arcsin(x) arctg(x / sqr(-x * x + 1)) arcuscosinus arccos(x) arctg(-x / sqr(-x * x + 1)) +

2 * arctg(1)arcussecans arcsec(x) arctg(x / sqr(x * x - 1)) +

sgn((x) -1) * (2 * arctg(1)) arcuscosecans arccosec(x) arctg(x / sqr(x * x - 1)) +

(sgn(x) - 1) * (2 * arctg(1))arcuscotangens arccotan(x) arctg(x) + 2 * arctg(1)

sinus hyperbolický hsin(x) (exp(x) - exp(-x)) / 2cosinus hyperbolický hcos(x) (exp(x) + exp(-x)) / 2tangens hyperbolický htan(x) (exp(x) - exp(-x)) / (exp(x) + exp(-x)) secans hyperbolický hsec(x) 2 / (exp(x) + exp(-x))cosecans hyp. hcosec(x) 2 / (exp(x) - exp(-x))cotangens hyp. hcotan(x) (exp(x) + exp(-x)) / (exp(x) - exp(-x))arcussinus hyp. harcsin(x) ln(x + sqr(x * x + 1)) arcuscosinus hyp. harccos(x) ln(x + sqr(x * x - 1))arcustangens hyp. harctan(x) ln((1 + x) / (1 - x)) / 2 arcussecans hyp. harcsec(x) ln((sqr(-x * x + 1) + 1) / x) arcuscosecans hyp. harccosec(x) ln((sgn(x) * sqr(x * x + 1) +1) / x) arcuscotangens hyp. harccotan(x) ln((x + 1) / (x - 1)) / 2

(P evzato z nápov dy k programu Visual Basic a dopln no)

8.2.2 Funkce pro práci se znakyFunkce pro práci se znaky nebo také znakové funkce o ekávají jako sv jparametr ve v tšin p ípad znak nebo et zec znak . Jejich výsledkem je pak op t znak nebo et zec znak , v n kterých p ípadech celé íslo.

Page 181: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 181

8.2.2.1 Funkce vracející znak nebo et zec znak�Mezi funkcemi vracejícími et zec znak nalezneme funkce pro r zné úpravy

et zc znak jako je jejich spojování, zm na velkých písmen na malá a nao-pak atd. P i práci s t mito funkcemi musíme pamatovat na omezení maximální délky et zce znak . P ekro íme-li tento limit, bude výsledný et zec zkrácen bez varování na maximální možnou délku.

CHR

Vrací znak, jehož po adové íslo v aktuáln nastavené znakové sad je n.Znaky jsou v po íta i reprezentovány pomocí ísel od 0 do 255. Každý znak má p id leno íslo odvozené z jeho po adí ve znakové sad . V sou asnosti je nejpoužívan jší znakovou sadou ASCII. V té je nap . znak ‘A’ na 65 pozici, znak ‘B’ na 66 a znak ‘!’ na 33 pozici. Na pozicích 0 až 31 jsou znaky, které nelze zobrazovat na obrazovce. Pat í mezi n nap íklad znak nového ádku(10), znak tabulátoru (9) nebo znak smazání p edchozího písmena (8). V horní polovin znakové sady (od pozice 128) jsou v závislosti na použitém kódování umíst ny znaky národní abecedy ( funkce ).

MS AccessAktuální znaková sada p ebírá ze systému Windows podle parametrv Nastavení Místní nastavení (Settings Local Settings).

Oracle Aktuální znaková sada je ur ena p i vytvo ení databáze.

Viz též

CONCAT OracleSpojí dva znakové et zce v jeden. Chceme-li spojit více znakových et zc ,musíme použít funkci vícekrát. V prost edí Oracle je tato funkce ekvivalentní s použitím operátoru ‘||’. V ostatních databázových systémech jepro spojování et zc použít operátor ‘+’ (sou et).

P íklad

Page 182: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

182 FUNKCE _____________________________________________________

� CURDIR MS Access

Aktuáln nastavená cesta na disku <název_disku>. Je-li parametr vynechán,vrací aktuáln nastavenou cestu na aktuálním disku.

DATE MS AccessAktuální datum nastavené v systému.

HEX MS Access

Vyjád ení ísla n v šestnáctkové (hexadecimální) soustav .

INITCAP OracleP evede po áte ní písmena každého slova v et zci na velká a ostatní na malá.Za ukon ení slova se považuje znak mezery, tabulátoru nebo jakýkoliv jiný znak, který není písmeno nebo íslo.

LCASE MS AccessLOWER Oracle P evede všechna písmena na malá.

P íklad

LEFT MS Access

Page 183: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 183

Vrací prvních n znak z et zce .

� P íklad

Viz též

LPAD Oracle

Doplní et zec zleva znaky z et zce tak, aby výsledná délka et zce byla n znak . Je-li delší než n znak , je zkrácen. V tomto

p ípad se funkce chová stejn jako funkce . Není-li parametr zadán, dopl uje se zleva mezerami.

P íklad

Viz též

LTRIM

Page 184: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

184 FUNKCE _____________________________________________________

Od ízne z et zce zleva všechny znaky, které jsou zárove uvedeny v . O ezávání kon í v p ípad , že je nalezen znak, který není uveden

v parametru . Není-li parametr uveden, od ezávají se pouze meze-ry.

Viz též

MID MS Access

Vrací n znak z et zce na ínajících na pozici m. Není-li parametr nuveden, vrací všechny znaky až do konce et zce .

Viz též

NLS_INITCAP OracleNLS_LOWER Oracle NLS_UPPER OracleFunkce se stejným významem jako bez p edpony . U t chto funkcí je však možné zadat jako parametr p edpisy popisující zvláštnosti národních abeced.

OCT MS Access

Vyjád ení ísla n v osmi kové (oktalové) soustav .

REPLACE Oracle

Ve výsledném et zci znak odvozeném z et zce je každý výskyt et zce nahrazen et zcem . Není-li zadán, jsou všechny

výskyty et zce z výsledného et zce odstran ny.

Viz též

Page 185: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 185

� RIGHT MS Access

Vrací posledních n znak z et zce .

Viz též

RPAD Oracle

Doplní et zec zprava znaky z et zce tak, aby výsledná délka et zce byla n znak . Je-li delší než n znak , je zkrácen. V tomto

p ípad se funkce chová stejn jako funkce . Není-li parametr zadán, dopl uje se zprava mezerami.

Viz též

RTRIM

Od ízne z et zce zprava všechny znaky, které jsou zárove uvedeny v . O ezávání kon í v p ípad , že je nalezen znak, který není uveden

v parametru . Není-li parametr uveden, od ezávají se pouze meze-ry.

Viz též

SOUNDEX OracleVyhledávání et zc , které se vyslovují podobn . Název funkce by se dal p eložit „zní jako“. Algoritmy používané pro vytvo ení výsledného et zce

Page 186: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

186 FUNKCE _____________________________________________________

jsou založeny na výslovnosti v anglickém jazyce, a proto je v tšinou nem že-me použít v eském prost edí.� SPACE MS Access

Vytvo í et zec znak o délce n, který je složen pouze z mezer.

Viz též

STR MS Access

P evede <výraz> na et zec znak . <výraz> m že být typu íslo, datum nebo logická hodnota . Jako odd lova desetinných míst m že být pouze desetinná te ka.

STRING MS Access

Vytvo í et zec znak o délce n složený ze samých znak .

Viz též

SUBSTR Oracle

Vrací n znak z et zce za ínajících na pozici m. Je-li m kladné, po ítápozici v et zci zleva. Je-li záporné, po ítá pozici zprava. Není-li parametr nuveden, vrací všechny znaky až do konce et zce .

Viz též

Page 187: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 187

� TIME MS AccessSystémový as. Aktuální as nastavený v systému po íta e.

TRANSLATE Oracle

Ve výsledném et zci znak odvozeném z je každý výskyt znaku nahrazen znakem .

Viz též

TRIM MS Access

U íznutí všech mezer zleva i zprava et zce.Shodné s .

UCASE MS AccessUPPER OracleP evede všechna písmena na velká.

P íklad

8.2.2.2 Znakové funkce vracejí íselnou hodnotu Znakových funkcí vracejících íselnou hodnotu není velké množství. Nejd le-žit jší mezi nimi je funkce , která vrací délku et zce znak ve zna-cích.

Page 188: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

188 FUNKCE _____________________________________________________

�ASC MS AccessASCII Oracle

Pozice, kterou má první znak et zce v aktuální znakové sad .

Viz též

INSTR

Oracle

V et zci se pokusí nalézt pod et zec . Je-li pod et zec nalezen, je vrácena jeho pozice v et zci. Jinak funkce vrací hodnotu 0.

Je-li zadán parametr n, prohledává se et zec až od pozice n zleva. Je-li n záporné, prohledává se až od pozice n zprava. Je-li zadán parametr m,ledá se až m-tý výskyt pod et zce.h

Poznámkaþ Vrácená pozice pod et zce je vždy po ítána od za átku et zce, bez

ohledu na parametr n.

MS Access

V et zci se pokusí nalézt pod et zec . Je-li pod et zec nalezen, je vrácena jeho pozice v et zci. Jinak funkce vrací hodnotu 0. Je-li zadán para-metr n, prohledává se et zec až od pozice n zleva.Pomocí parametru p m žeme rozlišit dva zp soby prohledávání:

p = 0 binární porovnávání: oba et zce se porovnávají byte po bytu;

p = 1 textové porovnávání: oba et zce se porovnávají znak po znaku. Jsou rozli-šována velká a malá písmena.

Poznámkaþ Vrácená pozice pod et zce je vždy po ítána od za átku et zce, bez

ohledu na parametr n.

Page 189: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 189

�LEN MS AccessLENGTH Oracle Délka et zce ve znacích.

Pozor!þ Je-li místo et zce znak p edána hodnota , je výsledek také

, a ne hodnota 0!

P íklad

Seznam zam stnanc set íd ný podle délky p íjmení ve znacích od nejdelšího k nejkratšímu.

NLSSORT OracleSlouží pro správné porovnání et zc obsahujících znaky národních abeced. Jako parametr je možné zadat p edpis popisující zvláštnosti národní abecedy.

STRCOMP MS Access

Porovná dva et zce znak a vrátí výsledek podle následující tabulky:

Varianta Výsledekret1 < ret2 -1ret1 = ret2 0ret1 > ret2 1

Parametr <typ_porovnani>:þ 1 – textové porovnávání s ohledem na práv nastavené národní

prost edí v systému;þ 0 – binární porovnání podle kód jednotlivých znak .

Page 190: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

190 FUNKCE _____________________________________________________

8.2.3 Funkce pro typ Datum � Funkce pro práci s typem datum vracejí ve v tšin p ípad hodnotu typu

datum. Jako parametr jim p edáváme op t hodnotu typu datum, p ípadndopln nou o íselný parametr.

ADD_MONTHS Oracle

K parametru <datum> p i te <po et> m síc . Výsledné datum je upraveno tak, aby hodnota dne nep ekro ila po et dní v m síci. Jinak je hodnota dne ponechána.

P íklad

Vypo te datum dne, kdy zam stnanec dosáhl plnoletosti.

CDATE MS Access

P evede <výraz> na hodnotu typu datum. <Výraz> m že být et zec znakreprezentujících datum nebo íslo reprezentujících datum (je v p ípustnémrozsahu). Je-li parametrem desetinné íslo, je ást za desetinnou árkou p eve-dena na as.

Pomocí funkce m žeme zjistit, zda daný výraz m žeme p evéstpomocí funkce na datum i nikoliv.

DATE MS AccessAktuáln nastavené systémové datum.

Pozor!Datum je vráceno jako et zec znak .

DATEADD MS Access

K datumu <datum> p i te/ode te <po et> jednotek asu ur ených parametrem <interval>. Parametr <po et> m že být i záporný, chceme-li získat den p ed-

Page 191: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 191

cházející dni <datum>. P ípustné hodnoty parametru <interval> jsou popsány následující tabulce: �v

Hodnota Významyyyy; rrrr rokq tvrtletím m sícy; r den v roce d denw; t den v týdnu ww; tt týdenh hodinan minutas sekunda

P íklad

Vypo te datum dne, kdy zam stnanec dosáhl plnoletosti.

DATEDIFF MS Access

Po et asových jednotek ur ených parametrem <interval>, které jsou mezi dny <datum1> a <datum2>. P ípustné hodnoty parametru <interval> jsou shodné jako u funkce .

P íklad

Výsledkem je v k zam stnanc v letech.

DATEPART MS Access

Vrátí asovou složku parametru <datum> udanou parametrem <interval>.P ípustné hodnoty parametru <interval> jsou shodné jako u funkce .

Page 192: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

192 FUNKCE _____________________________________________________

P íklad�

Výsledkem jsou roky narození zam stnanc .

DATESERIAL MS Access

Vytvo í hodnotu typu datum pomocí parametr ur ujících rok, m síc a den.

DAY MS Access

Po adové íslo dne v m síci. Složka datumu z parametru <výraz>, který reprezentuje datum.

HOUR MS Access

Hodina z parametru <výraz>, který libovolným zp sobem vyjad uje as.

LAST_DAY Oracle

Datum posledního dne v m síci zadaného parametrem <datum>.

MINUTE MS Access

Minuta z parametru <výraz>, který libovolným zp sobem vyjad uje as.

MONTH MS Access

Po adové íslo m síce v roce. Složka datumu z parametru <výraz>,který reprezentuje datum.

Page 193: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 193

� MONTHS_BETWEEN Oracle

Po et m síc mezi dv ma dny. Je-li <datum1> d íve než <datum2>, je výsle-dek kladný, v opa ném p ípad záporný. P i výpo tu se bere v úvahu i v obou datumech, a proto m že být výsledek i desetinné íslo.

NEW_TIME Oracle

P evede <datum> z asové zóny <zona1> do asové zóny <zona2>. P ípustnéhodnoty parametru <zona1> a <zona2> naleznete v originální dokumentaci k produktu Oracle.

NEXT_DAY Oracle

Datum dne v týdnu daného parametrem následujícího po dni <datum>. musí obsahovat anglický název dne ( ,

…).

P íkladDatum prvního tvrtku po dni splatnosti faktury:

NOW MS AccessAktuální systémový datum a as.

ROUND Oracle

Zaokrouhlí hodnotu <datum> na jednotky dané parametrem <fmt>. Není-liento parametr uveden, zaokrouhluje se na 0:00 hod. nejbližšího dne.t

P ípustné hodnoty parametru <fmt>

Page 194: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

194 FUNKCE _____________________________________________________

Podrobn ji viz originální dokumentace k prost edí Oracle.

Parametr VýznamCC; SCC stoletíSYYYY; YYYY; YEAR; SYEAR; YYY; YY; Y

rok; zaokrouhlí na 1. ervence

Q tvrtletí; zaokrouhlí na 16. den druhého m síce

MONTH; MON; MM; RM m síc; zaokrouhlí na 16. den WW stejný den jako první den v roceW stejný den jako první den v m síciDDD; DD; J denDAY; DY; D první den v týdnu HH; HH12; HH24 hodinaMI minuta

SECOND MS Access

Sekunda z parametru <výraz>, který libovolným zp sobem vyjad uje as.

SYSDATE OracleAktuální datum a as nastavené v systému.

TIME MS AccessAktuální systémový as.

Pozor!þ Systémový as je vrácen pomocí hodnoty typu .

TIMESERIAL MS Access

Vytvo ení hodnoty typu datum pomocí parametr ur ujících hodinu, minutu a sekundu.

TRUNC Oracle

Page 195: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 195

„U ízne“ informaci o datumu a ase v parametru <datum> na jednotky podle parametru <fmt>. Narozdíl od funkce neprovádí zaokrouhlování, ale nalezne nejbližší d ív jší datum/ as. Není-li parametr <fmt> uveden, nastaví se as na 0:00. Podrobn ji o parametru <fmt> u funkce .

WEEKDAY MS Access

Den v týdnu, který p ipadne na den ur ený parametrem <datum>. Standardnmá ned le íslo 1, pond lí íslo 2 atd. Parametrem n m žeme ur it íslo dne,který bude považován za za átek týdne a bude mít íslo 1.

YEAR MS Access

Složka datumu z parametru <výraz>, který reprezentuje datum.

8.2.4 Konverzní funkcePomocí konverzních funkcí m žeme p evést hodnotu jednoho datového typu na typ jiný. asto používanými konverzními funkcemi jsou funkce na p evodet zce znak na íslo a naopak.

Konverzní funkce mají v tšinou podobné názvy, abychom je snáze odlišili od ostatních funkcí. V produktu Oracle za ínají jejich jména p edponou(nap . , ). V produktu MS Access pak ve v tšin p ípadznakem .

Konverzní funkce vrací hodnotu typu, na který chceme p evád t, a jako pa-rametr se jim p edává hodnota typu, ze kterého p evádíme.

ASC MS Access 8.1.2 – Funkce pro práci se znaky.

CBOOL MS Access

P evede <výraz> na logickou hodnotu . Nejprve se pokusí p evést<výraz> na íslo. Je-li toto íslo r zné od 0, vrací hodnotu ( ). Jinak vrací hodnotu ( ).

Page 196: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

196 FUNKCE _____________________________________________________

�CCUR MS Access

P evede <výraz> na hodnotu typu (m na). B hem p evodu jsou využita aktuální nastavení národního prost edí.

CDATE MS Access

P evede <výraz> na hodnotu typu datum. B hem p evodu jsou využita aktuál-ní nastavení národního prost edí ( 8.1.3).

CDBL MS Access

P evede <výraz> na hodnotu typu ( íslo s dvojitou p esností).

CHARTOROWID OracleP evede et zec znak na hodnotu typu .

CHR MS Access 8.1.2 – Funkce pro práci se znaky.

CINT MS Access 8.1.1 – Funkce pro práci s ísly.

CLNG MS Access

P evede výraz na íslo typu (dlouhý celo íselný).

CONVERT Oracle

P evede et zec znak do jiné znakové sady. Podrobn jší popis je v originální dokumentaci k prost edí Oracle.

Page 197: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 197

�CSNG MS Access

P evede <výraz> na íslo typu (jednoduchá p esnost).

CSTR MS Access

P evede <výraz> na et zec znak . Výraz nesmí být .

CVAR MS AccP evede výraz na obecný typ .

HEX MS Access 8.1.2 – Funkce pro práci se znaky.

HEXTORAW OracleP evod et zce znak reprezentujícího hexadecimální íslo na hodnotu typu

(binární hodnota).

OCT MS Access 8.1.2 – Funkce pro práci se znaky.

RAWTOHEX OracleP evod hodnoty typu (binární hodnota) na et zec znak obsahujících hexadecimální íslo.

ROWIDTOCHAR OracleP evod hodnoty typu na et zec znak . Výsledný et zec je vždy 18 znak dlouhý.

STR MS Access 8.1.2 – Funkce pro práci se znaky.

Page 198: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

198 FUNKCE _____________________________________________________

� TO_CHAR Oracle

P evede datum na et zec znak . Výsledný formát datumu (YYYYMMDD, DD-Mon-YY apod.) lze ovliv ovat pomocí parametru <fmt> – formát a <nl-sparams> – národní prost edí. V p ípad , že tyto parametry nejsou uvedeny, je použito nastavení podle aktuálního prost edí nastaveného v databázovém systému Oracle.

P evede íslo na et zec znak . Výsledný formát ísla lze op t ovliv ovatpomocí parametr <fmt> a <nlsparams>. V p ípad , že tyto parametry nejsou uvedeny, je použito nastavení podle aktuálního prost edí nastaveného v systé-mu.

TO_DATE Oracle

P evede et zec znak na hodnotu typu datum. Není-li uveden parametr <fmt>, musí et zec znak reprezentovat datum v p ednastaveném formátu (pozice dne, m síce, roku apod.). Parametr <nlsparams> slouží pro ur enínárodních zvyklostí.

TO_NUMBER Oracle

P evede et zec znak na íslo. Není-li uveden parametr <fmt>, musí et zecznak reprezentovat íslo v p ednastaveném formátu (odd lova desetinných míst apod.). Parametr <nlsparams> slouží pro ur ení národních zvyklostí.

VAL MS Access P evede et zec znak na íslo. Nejprve odstraní z et zce všechny znaky ‘mezera’, ‘tabulátor’ a ‘nový ádek’. Potom na ítá postupn znaky et zcezleva, dokud jsou to íslice, p ípadn desetinná te ka. Pokud funkce narazí na první znak, který není íslice nebo desetinná te ka, p evod se ukon í.

Page 199: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 199

8.2.5 Agrega ní funkce �Pomocí agrega ních nebo též souhrnných funkcí pracujeme najednou s celou

množinou hodnot. Tato množina je ve v tšin p ípad totožná se skupinou hodnot vyskytujících se v jednom sloupci databázové tabulky.

8.2.5.1 Parametr agrega ních funkcí Parametr agrega ní funkce musí obsahovat název sloupce, nad kterým chceme pracovat.

Každá hodnota vyskytující se ve sloupci m že být upravena pomocí mate-matických operátor nebo funkcí pracujících nad jednou hodnotou – nap .

vrátí sou et plat zam stnanc vyd lených tisícem.V tomto p ípad by však bylo lepší zadat , a to zejména kv li rychlosti provád ní výpo tu – výsledek je stejný a operace d lení bude provedena pouze jednou, a ne pro každý ádek.

V parametru se m že vyskytovat i více než jeden název sloupce. Chceme-li nap íklad zjistit celkovou hodnotu zboží na sklad , m žeme použít funkci takto:

kde a jsou názvy sloupc v tabulce .V parametru agrega ní funkce v žádném p ípad nesmí být použita další

agrega ní funkce.

8.2.5.2 Modifikátory agrega ních funkcí U v tšiny agrega ních funkcí m žeme zvolit zp sob, jakým je s jednotlivými hodnotami množiny zacházeno z hlediska duplicity údaj .

Modifikátor DISTINCTZ množiny jsou hodnoty vybrány tak, aby se žádná neopakovala dvakrát nebo vícekrát.

Máme-li tabulku obsahující ve sloupci postupn hodnoty , bude p i použití funkce

– po et hodnot – výsledek roven 3. Kv li modifi-kátoru totiž funkce po ítá pouze po et r zných hodnot ve skupin .

Page 200: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

200 FUNKCE _____________________________________________________

�Modifikátor ALL

Z množiny jsou vybrány všechny hodnoty, bez ohledu na to, jestli se vyskytujívícekrát. V p edchozím p ípad by tedy funkce ve tvaru vrátila jako výsledek hodnotu 6.

Neuvedeme-li u funkce žádný modifikátor, použije se . Proto m žemepsát zkrácen .

8.2.5.3 Agrega ní funkce a hodnota NULL Všechny agrega ní funkce ignorují ádky tabulky obsahující hodnotu ve sloupci, se kterým se pracuje.

Jedinou výjimkou je funkce , která vrátí po et ádk v tabulce, v etn ádku obsahujících hodnotu .

Chceme-li zabránit vynechání sloupc obsahujících hodnotu v agrega ních funkcích, m žeme použít funkce dosazující jinou hodnotu p ispln ní ur ité podmínky – v Oracle, v MS Access apod. ( 8.1.6 nebo 5.1.6).

AVG

Prostý aritmetický pr m r ze všech hodnot v množin – sou et hodnot d lenýpo tem hodnot. Do po tu hodnot se nepo ítají hodnoty . Podle použitého modifikátoru je každá hodnota po ítána pouze jednou ( ), nebo tolikrát, kolikrát se opakuje ( ).

P íkladPr m rný plat za všechny zam stnance:

COUNT

Po et hodnot ve sloupci. Do po tu jsou zahrnuty pouze ty ádky, u kterých není hodnota <výraz> rovna . Podle použitého modifikátoru je každá hodnota po ítána pouze jednou ( ), nebo tolikrát, kolikrát se opakuje ( ).

Speciální význam má použití znaku ‘*’ (hv zdi ka) jako parametru funkce . V tomto p ípad se zjistí po et ádk v tabulce (nebo výsledku dotazu)

Page 201: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 201

v etn ádk obsahujících hodnotu . Použití funkce s parametrem ‘*’ je výrazn rychlejší než s parametrem udávajícím název sloupce. � P íkladPo et zam stnanc (jako po et ádk v tabulce ):

Po et odd lení ve firm (jako po et r zných ísel odd lení v tabulce zam st-nanc ):

MAX

Maximální hodnota z množiny. U této funkce neovliv ují modifikátory hodno-tu výsledku.

P íkladMaximální plat v tabulce zam stnanc :

MIN

Minimální hodnota z množiny hodnot. U této funkce neovliv ují modifikátory hodnotu výsledku.

P íkladDatum narození nejstaršího zam stnance:

STDDEV MS Access STDDEVP MS Access

Page 202: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

202 FUNKCE _____________________________________________________

Velikost sm rodatné odchylky. Podle použitého modifikátoru je každá hodno-ta po ítána pouze jednou ( ), nebo tolikrát, kolikrát se opakuje ( ).� SUM

Sou et hodnot v množin . Podle použitého modifikátoru je každá hodnota po ítána pouze jednou ( ), nebo tolikrát, kolikrát se opakuje ( ).

P íkladCelkové mzdové náklady na všechny zam stnance:

VARIANCE OracleVAR MS AccessVARP MS Access

Rozptyl hodnot v množin . Podle použitého modifikátoru je každá hodnota po ítána pouze jednou ( ), nebo tolikrát, kolikrát se opakuje ( ).

8.2.6 Ostatní funkce

CHOOSE MS Access

Vrací hodnotu, která je na pozici <poradi> v seznamu.

CURDIR MS Access 8.1.2 – Funkce pro práci se znaky.

CURRENTUSER MS AccessJméno aktuálního uživatele.

Page 203: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_______________________________________________ P EHLED FUNKCÍ 203

� GREATEST Oracle

Vybere nejvyšší hodnotu ze všech výraz uvedených v seznamu. Všechny hodnoty jsou automaticky p evedeny na stejný datový typ, jaký má první hodnota.

Viz též

IIF MS Access

Je-li <výraz> pravdivý, vrátí první hodnotu. V opa ném p ípad pak hodnotu druhou. Tuto funkci lze použít pro nahrazení hodnoty nap íklad íslem 0 takto:

ISDATE MS Access Vrací logickou hodnotu ( ), je-li možné hodnotu p edaného paramet-ru interpretovat jako datum.

ISNULL MS Access Vrací logickou hodnotu ( ), je-li hodnota p edaného parametru .

ISNUMERIC MS AccessVrací logickou hodnotu ( ), je-li možné hodnotu p edaného paramet-ru interpretovat jako íslo.

LEAST Oracle

Vybere nejnižší hodnotu ze všech výraz uvedených v seznamu. Všechny hodnoty jsou automaticky p evedeny na stejný datový typ jako má první hodnota.

Page 204: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

204 FUNKCE _____________________________________________________

�Viz též

NVL Oracle

Pokud je výsledkem prvního výrazu hodnota , je nahrazena hodnotou druhého výrazu. V opa ném p ípad je výsledek shodný s hodnotou prvního výrazu. Pot ebujeme-li nahradit hodnotu nap íklad íslem 0, zadáme:

SWITCH MS Access

Postupn vyhodnocuje výrazy odleva (nejprve <výraz1>, pak <výraz2> atd.). Po nalezení prvního výrazu, jehož výsledkem je logická hodnota ( ), je vrácena hodnota následující za tímto výrazem.

UID OracleUnikátní identifika ní íslo aktuálního uživatele.

USER OracleJméno aktuálního uživatele.

Page 205: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

99 Datové typy, pojmenování objekt , konstanty

Kapitola 9

DATOVÉ TYPY,POJMENOVÁNÍ OBJEKT ,KONSTANTY

9.1 Standardní datové typy SQL ..................................................2069.1.1 íselné datové typy ...........................................2069.1.2 Znakové datové typy .........................................2079.1.3 Datové typy pro datum a as .............................2089.1.4 Ostatní datové typy............................................2099.1.5 MS Access.........................................................2099.1.6 Oracle ................................................................210

9.2 Specifické datové typy............................................................2119.2.1 MS Access.........................................................2119.2.2 Oracle ................................................................212

9.3 Pojmenovávání objekt ..........................................................2139.3.1 Pravidla pojmenování objekt ...........................2139.3.2 Používání názv objekt ....................................2169.3.3 Pseudosloupce ...................................................217

9.4 Konstanty .................................................................................2189.4.1 Znakové literály.................................................2189.4.2 íselné literály...................................................2189.4.3 Literály typu datum ...........................................2199.4.4 Hodnota NULL .................................................219

Page 206: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

206 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

�9.1 Standardní datové typy SQL V definici standardu SQL jsou definované základní datové typy. V r znýchdatabázových systémech jsou však pojmenovány odlišn , což st žuje možnost p enosu SQL p íkaz , zejména ze skupiny DDL (definice dat), mezi r znýmisystémy. Dále se m žeme setkat s dalšími datovými typy, které se vyskytují pouze v n kterých databázových systémech.

V této kapitole si uvedeme p ehled základních datových typ a jejich pou-žití. Zárove zde nalezneme pojmenování t chto datových typ v n kterýchdatabázových prost edích.

9.1.1 íselné datové typy

DECIMAL

Popis

Definice desetinného ísla s celkovým po tem <celé_ íslo1> íslic a s po tem<celé_ íslo2> platných íslic za desetinnou árkou.

P íklad

DOUBLE PRECISION

Popis

Desetinné íslo s plovoucí desetinnou árkou. Parametr udává po et platných íslic – maximáln však 38.

INTEGER

Page 207: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ STANDARDNÍ DATOVÉ TYPY SQL 207

� Popis

Celé íslo v rozsahu –2 147 483 648 až 2 147 483 647

NUMERIC

Jako .

REAL

Popis

Desetinné íslo s plovoucí desetinnou árkou. Parametr udává po et platných íslic – maximáln však 18.

SMALLINT

Popis

Celé íslo v rozsahu –32 768 až 32 767

9.1.2 Znakové datové typy

CHAR

Popis

et zec znak pevn definované délky <celé_ íslo> znak . Maximální délka bývá 255 znak .

P íklad

Page 208: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

208 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

� CHAR VARYING

Popis

et zec znak prom nlivé délky. Maximální délka et zce m že být <ce-lé_ íslo> znak . Nejvyšší možná maximální délka bývá v tší než u datového typu .

P íklad

9.1.3 Datové typy pro datum a as

DATE

Popis

Datum. Vyjád ení datumu prost ednictvím roku, m síce a dne v m síci.

TIME

Popis

as. Vyjád ení asu prost ednictvím hodin, minut a sekund.

TIMESTAMP

Popis

Struktura obsahující datum a as. Délka intervalu, ve kterém je možné zadávat datum a as do prom nné tohoto typu závisí na databázovém prost edí.

Page 209: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ STANDARDNÍ DATOVÉ TYPY SQL 209

�9.1.4 Ostatní datové typy

BIT

Popis

Binární data o maximální délce <celé_ íslo> byt . Velikost bývá omezena na 255 byt .

P íklad

9.1.5 MS Access

9.1.5.1 íselné datové typy Není definován typ . Ostatní íselné datové typy mají bu stejný název jako ve standardu ANSI SQL, nebo je pro n definováno synonymum jako ve standardu ANSI SQL.

9.1.5.2 Znakové datové typy Jsou definována synonyma umož ující používat stejné názvy jako podle standardu ANSI SQL. Typ je zde však ekvivalentní s typem , a proto m že mít maximální délku pouze 255 znak . Chceme-li pracovat s et zci znak o v tší délce, musíme použít datový typ .

9.1.5.3 Datum a asPro datové typy , a je definovaný jediný datový typ

. Tento datový typ uchovává v ásti p ed desetinnou árkou datum a v desetinné ásti as vyjád ený jako pom rná ást dne (24 hodin). Hodnota 0 byla stanovena na 30. 12. 1899.

9.1.5.4 Ostatní datové typy Pro uchovávání kratších binárních dat je definován datový typ . Další datový typ – – dovoluje uložit data až do délky 1,2 GB.

Page 210: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

210 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

�Pozor!þ Datový typ má v prost edí MS Access zcela odlišný význam – uchová-

vá logické hodnoty .

9.1.6 Oracle

9.1.6.1 íselné datové typy Existují pouze dva typy pro uchovávání íselných hodnot – a .Ostatní datové typy m žeme vytvo it pomocí typu nebo vhod-ným zadáním celkového po tu íslic a po tu platných míst za desetinnou árkou.

9.1.6.2 Znakové datové typy Typ není vhodné z d vod úprav v dalších verzích systému Oraclepoužívat. Místo n j je k dispozici typ . U tohoto typu je omezena maximální možná délka na 2 000 znak . Dojde-li nap íklad p i spojování et zc k p ekro ení této délky, bude výsledný et zec zkrácen na délku 2 000

znak bez jakéhokoliv varování. Chceme-li pracovat se znakovými et zci o v tší délce, musíme použít datový typ .

9.1.6.3 Datum a asPro datové typy , a je definovaný jediný datový typ

. Tento datový typ uchovává v asti p ed desetinnou árkou datum a v desetinné ásti as vyjád ený jako pom rná ást dne (24 hodin).

9.1.6.4 Ostatní datové typy Datový typ pro uchovávání binárních dat je p ejmenován na . Pro definici datového typu binárních hodnot tedy používáme klí ová slova a

.

Page 211: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________ SPECIFICKÉ DATOVÉ TYPY 211

�9.2 Specifické datové typy V každém databázovém systému se m žeme setkat s dalšími datovými typy, které tv rci považovali za d ležité. V následujícím p ehledu jsou uvedeny n které z nich pro vybraná databázová prost edí.

9.2.1 MS Access

BIT, BOOLEAN, LOGICAL

Popis

Umož uje uchovávat logickou hodnotu .

BYTE

Popis

Celé íslo v rozmezí 0 až 255.

COUNTER

Popis

Automaticky vygeneruje íslo p i p idávání nového záznamu do tabulky. Pomocí sloupce tohoto typu lze vytvá et jedine né hodnoty do primárního klí e. Tento datový typ nahrazuje v prost edí MS Access sekvence. Rozsah datového typu je shodný jako u datového typu .

CURRENCY

Page 212: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

212 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

� Popis

Uchování hodnot vyjad ující ástku v domácí m n . ástka m že být v rozmezí –922 337 203 685 477, 5808 K až 922 337 203 685 477,5807 K .

LONGTEXT

Popis

Jako ( ), ale umož uje uchovávat et zce až do maximální délky 230–1 znak .

9.2.2 Oracle

LONG

Popis

Jako , ale umož uje uchovávat et zce až do maximální délky 231 –1 znak .

Page 213: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________ POJMENOVÁVÁNÍ OBJEKT 213

�9.3 Pojmenovávání objektV databázovém prost edí je velké množstvím (databázových) objekt r znéhodruhu. M žeme se setkat s následujícími pojmy: þ tabulka;

sloupec tabulky; omezení sloupce; omezení tabulky;

þ index;þ pohled;þ sekvence;þ uživatel;þ a dalšími podle používaného databázového prost edí.

9.3.1 Pravidla pojmenování objektVšechny databázové objekty musí být pojmenovány. P i jejich pojmenování musíme dodržet následující zásady: þ Název m že obsahovat pouze písmena, ísla a znaky ‘_’ (podtržítko).

V n kterých databázových systémech je možné použít v názvu i další spe-ciální znaky, ale pro jednodušší p enositelnost do jiného databázového pro-st edí není vhodné tyto znaky používat. Totéž platí o použití písmen národ-ní abecedy v názvech objekt . P estože mnohé systémy jejich použití umož ují, m že v n kterých p ípadech dojít k odmítnutí takového názvu jako neexistujícího (nap . p i pozd jším použití názvu objektu v p íkazechSQL). Použitím znak národní abecedy m žeme také znemožnit pozd jší p enos do jiného databázového prost edí.

þ Název objektu musí za ínat písmenem. þ Názvy mají omezenou délku podle používaného databázového systému.

Délka do 20 znak bývá podporována vždy. V prost edí Oracle lze použít až 30 znak , v systému MS JDBE až 64 znak .

þ Názvy objekt musí být v rámci jedné databáze jedine né. Nem žeme tedy vytvo it dv tabulky s názvem ‘zam’ apod. Existují výjimky z tohoto pravi-dla v p ípad , že použitím stejného názvu nem že dojít k zám n obou ob-jekt . Nap íklad jako název indexu m že být použit již existující název ta-bulky. P estože jsou tato duplicitní pojmenování umožn na, není vhodné pojmenovat více objekt stejným názvem. Jedinou výjimkou jsou názvy sloupc v r zných tabulkách. Zde bývá žádoucí použít stejného názvu v p ípad , že se jedná o cizí klí .

þ Název objektu nem že být shodný s klí ovým slovem jazyka SQL nebo s jiným rezervovaným slovem podle používaného databázového prost edí.

Page 214: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

214 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

�V následující tabulce je uveden p ehled klí ových slov podle standardu SQL92. V každém databázovém prost edí jsou další klí ová slova, která jsou používána pro popis specifických vlastností tohoto prost edí:

Rezervovaná slova podle standardu SQL92:

ABSOLUTE CYCLE* IN OR SOME ACTION DATA* INDEX ORDER SQL ADD DATE INDICATOR OTHERS* SQLCODE AFTER* DAY INITIALLY OUTER SQLERROR ALIAS* DEALLOCATE INNER OUTPUT SQLEXCEPTION*ALL DEC INPUT OVERLAPS SQLSTATE ALLOCATE DECIMAL INSENSITIVE PARAMETERS* SQLWARNING* ALTER DECLARE INSERT PARTIAL STRUCTURE* AND DEFAULT INT PENDANT* SUBSTRING ANY DEFERRABLE INTEGER PLAN SUM ARE DEFERRED INTERSECT POSITION SYSTEM AS DELETE INTERVAL PRECISION SYSTEM_USER ASC DEPTH* INTO PREORDER* TABLE ASSERTION DESC IS PREPARE TEMPORARY ASYNC* DESCRIBE ISOLATION PRESERVE TEST* AT DESCRIPTOR JOIN PRIMARY THEN AUTHORIZATION DIAGNOSTICS KEY PRIOR THERE* AVG DICTIONARY* LANGUAGE PRIVATE* TIME BEFORE* DISCONNECT LAST PRIVILEGES TIMESTAMP BEGIN DISTINCT LEADING PROCEDURE TIMEZONE_

HOURBETWEEN DOMAIN LEAVE* PROTECTED* TIMEZONE_

MINUTEBIT DOUBLE LEFT PUBLIC TO BIT_LENGTH DROP LESS* READ TRAILING BOOLEAN* EACH* LEVEL REAL TRANSACTION BOTH ELSE LIKE RECURSIVE* TRANSLATE BREADTH* ELSEIF* LIMIT* REF* TRANSLATION BY END LOCAL REFERENCES TRIGGER*

Page 215: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________ POJMENOVÁVÁNÍ OBJEKT 215

�CALL* END-EXEC LOOP* REFERENCING* TRIM CASCADE EQUALS* LOWER RELATIVE TRUE CASCADED ESCAPE MATCH RENAME TYPE* CASE EXCEPT MAX REPLACE* UNDER* CAST EXCEPTION MIN RESIGNAL* UNION CATALOG EXEC MINUTE RESTRICT UNIQUE CHAR EXECUTE MODIFY* RETURN* UNKNOWN CHAR_LENGTH EXISTS MODULE RETURNS* UPDATE CHARACTER EXPLAIN MONTH REVOKE UPPER CHARACTER_LENGTH

EXTERNAL NAMES RIGHT USAGE

CHECK EXTRACT NATIONAL ROLE* USER CLOSE FALSE NATURAL ROLLBACK USING COALESCE FETCH NCHAR ROUTINE* VALUE COLLATE FIRST NEW* ROW* VALUES COLLATION FLOAT NEXT ROWID VARCHAR COLUMN FOR NO ROWNUM VARIABLE* COMMIT FOREIGN NONE* ROWS VARYING COMPLETION* FOUND NOT SAVEPOINT* VIEW CONNECT FROM NULL SCHEMA VIRTUAL* CONNECTION FULL NULLIF SCROLL VISIBLE* CONSTRAINT GENERAL* NUMERIC SEARCH* WAIT* CONSTRAINTS GET OBJECT* SECOND WHEN CONTINUE GLOBAL OCTET_

LENGTHSECTION WHENEVER

CONVERT GO OF SELECT WHERE CORRESPONDING GOTO OFF* SENSITIVE* WHILE* COUNT GRANT OID* SEQUENCE* WITH CREATE GROUP OLD* SESSION WITHOUT* CROSS HAVING ON SESSION_USER WORK CURRENT_DATE

HOUR ONLY SET WRITE

CURRENT_TIME

IDENTITY OPEN SIGNAL* YEAR

Page 216: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

216 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

�CURRENT_TIMESTAMP

IF* OPERATION* SIMILAR* ZONE

CURRENT_USER

IGNORE* OPERATORS* SIZE

CURSOR IMMEDIATE OPTION SMALLINT

P evzato ze SOLID Server Administrator’s Guide *) Potencionální rezervovaná slova

9.3.1.1 Tvorba názv objektPro pojmenování objekt si musíme zvolit vlastní konvence, abychom co nejvíce zjednodušili práci s databází. P i tvorb názv objekt je vhodné dodržovat následující pravidla: þ Pojmenování objektu by m lo být co nejp esn jší, aby bylo z ejmé, co daný

objekt obsahuje nebo p edstavuje. Název tabulky zam stnanc je tedy vhodné pojmenovat nap íklad jako nebo místo

.þ Sloupec tvo ící cizí klí nazýváme stejn jako sloupec v odkazované tabul-

ce, aby bylo z ejmé, p es které sloupce je nutné tabulky spojovat. þ Nepojmenováváme více objekt stejn , i když je to v používaném databá-

zovém prost edí možné.

9.3.2 Používání názv objektNa objekt se prost ednictvím jeho názvu odkazujeme v r zných ástech p íka-z jazyka SQL. Podle syntaxe p íkazu m žeme uvést odkaz pouze na ur itýdruh databázového objektu – nap . v p íkazu musíme uvést název tabulky, u které chceme zm nit její strukturu. V p íkazunem žeme uvést název indexu nebo jiného objektu, pouze název tabulky.

Odlišný zp sob zacházení mají sloupce tabulky, které se mohou stát sou-ástí libovolného výrazu. Název sloupce m žeme použít všude tam, kde lze

uvést výraz. Název sloupce je možné p ed adit názvem tabulky, do které pat í:

P ed azení názvem tabulky je povinné v p ípad , že spojujeme n kolik tabu-lek, ve kterých je více sloupc se stejným názvem.

Oracle

Název objektu je možné p ed adit názvem schématu, do kterého pat í. Název schématu je ve v tšin p ípad totožný s názvem uživatele:

Page 217: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________ POJMENOVÁVÁNÍ OBJEKT 217

�9.3.3 Pseudosloupce Krom sloupc , které uvedeme p i vytvá ení tabulky, obsahuje tabulka i n které další sloupce. Nejedná se však o sloupce ve smyslu, jak jsme je chápa-li doposud, protože u t chto sloupc nelze m nit jejich hodnoty – proto hovo-íme o tzv. pseudosloupcích. Tyto pseudosloupce je však možné použít v SQL

p íkazech na místech, kde lze použít názvy sloupc normálních. ROWID

Jedine ný identifikátor ádku tabulky. Jedná se o íslo s velkým po tem ci-fer, které je v tšinou odvozeno z fyzické pozice ádku tabulky na pevném disku po íta e. V p ípad , že dojde ke zkopírování ádku tabulky na jiné místo, dojde i ke zm n . Název pseudosloupce je nutné uvést za klí-ovým slovem i v p ípad , že vypisujeme všechny sloupce tabul-

ky:

ROWNUM Do asná hodnota ur ující po adí ádku v aktuálním výsledku dotazu. Tento pseudosloupec se používá pro omezení po tu ádk ve výsledku dotazu. Následující dotaz vybere deset zam stnanc s nejvyššími platy ve firm :

Nezapome me použít klí ové slovo pro set íd ní ádk ve vý-sledku podle požadovaného kritéria – zde sestupn podle výše platu. V opa ném p ípad by bylo „náhodn “ vybráno prvních deset ádkv po adí, v jakém byly zpracovávány.

m žeme zárove použít pro o íslování ádk výstupu od jed-ni ky:

Page 218: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

218 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

�9.4 Konstanty Konstantami rozumíme data, která se nemohou zm nit. Existují dva druhy konstant, které m žeme použít p i zadávání dotaz :þ P eddefinované konstanty

nap .þ Konstanty vlastní – t m se obvykle íká „literály“.

nap . nebo Literály mohou být bu et zcem znak (jako ), íslem (jako

), nebo datumem (jako ).

9.4.1 Znakové literály Znakový literál je libovolný et zec znak . et zec znak uzavíráme do apostrof , aby bylo z ejmé, že se nejedná o název n kterého databázového objektu nebo o klí ové slovo. V rámci et zce znak m že být použit libovol-ný znak. Chceme-li zadat znak ‘ (apostrof), který jinak znamená ukon eníet zce znak , musíme znak apostrofu zdvojit.

P íklad

MS JDBE

et zec znak se uzavírá do uvozovek – , apod.

9.4.2 íselné literály Reprezentují íslo, a to jak celé, tak desetinné. íslo m že být p ed azenéznakem ‘–’ (minus). íselné literály se neuzavírají do žádných znak .

Pozor!þ Podle aktuálního mezinárodního nastavení m že být odd lova em desetin-

ných míst bu znak ‘.’ (te ka), nebo znak ‘,’ ( árka).

P íklad

Page 219: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

___________________________________________________ KONSTANTY 219

� MS Access

Pomocí prefixu m žeme zadat hexadecimální íslo. Nap íklad je hexadecimální íslo vyjad ující hodnotu 16 dekadicky.

9.4.3 Literály typu datum Konstanty typu datum se ve v tšin p ípad zadávají stejn jako textové, tedy vložené do apostrof . U hodnot typu datum se nejvíce projeví aktuální mezi-národní nastavení. P i jejich zadávání musíme dbát na to, abychom dodrželi aktuáln nastavený zp sob zadávání datum – po adí zadávání dne, m síce a roku, je-li m síc zadáván textovou zkratkou apod.

P íklad

MS Access

Konstanty typu datum a as se uzavírají do znak ‘#’ („hashmark“), nap .

9.4.4 Hodnota NULL Mezi konstantami má hodnota speciální význam. Slouží pro ozna eníneznámé i nezadané hodnoty nebo v situaci, kdy zadání konkrétní hodnoty nemá v daném p ípad smysl. Hodnota není žádného datového typu, a proto ji m žeme použít v libovolném sloupci tabulky bez ohledu na jeho konkrétní datový typ. Hodnotu však nem žeme použít ve sloupci, který je sou ástí primárního klí e, a také ve sloupcích, u kterých je p i definici tabulky explicitn uvedeno, že nesm jí hodnotu obsahovat.

Pozor!þ V žádném p ípad nezam ujme hodnotu a íslo 0. Teplota 0° Celsia

je rozhodn n co jiného než neznámá teplota v daný den. Ta totiž m že být 20° C nebo také -15° C!

9.4.4.1 Aritmetické výrazy Výsledkem libovolného výrazu obsahujícího neznámou hodnotu je op tneznámá hodnota .Výsledkem operace je tedy op t .

Page 220: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

220 DATOVÉ TYPY, POJMENOVÁNÍ OBJEKT , KONSTANTY ____________________

�Jedinou výjimkou je s ítání znakových et zc . S ítáme-li více znakových

et zc , z nichž n který má hodnotu , považuje se za prázdný et zec a tento et zec se nebere v úvahu.

9.4.4.2 Agrega ní funkce Vyskytne-li se hodnota v agrega ních funkcích, je ve v tšin p ípadignorována.Nap íklad pr m rná hodnota ve sloupci, který obsahuje hodnoty

, bude vypo tena jako (200+ 100+ 300) / 3 = 200.

9.4.4.3 Porovnávání Chceme-li zjistit, zda je ur itý výraz roven hodnot , musíme použít speciální operátor (p eloženo „je NULL“) resp. (p eloženo „není NULL“).

9.4.4.4 Podmínky Vyskytne-li se hodnota jako výsledek výrazu v podmínce, bude pod-mínka vyhodnocena jako nespln ná, tedy shodn jako v p ípad hodnoty ( ).

Pozor!þ Nezapome me, že jakákoliv další operace nad výrazem, jehož hodnota je

, bude op t !

Page 221: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

1010 Operátory, výrazy a podmínky

Kapitola 10

OPERÁTORY, VÝRAZY A PODMÍNKY

10.1 Rozd lení operátor ..........................................................22210.2 Aritmetické operátory .......................................................22510.3 Operátory pro znaky a znakové et zce..........................22610.4 Operátory pro porovnávání ..............................................22710.5 Logické operátory .............................................................23310.6 Množinové operátory ........................................................23610.7 Výrazy .................................................................................239

10.7.2 Tvorba výraz .................................................23910.7.3 Použití výraz v SQL p íkazech......................241

10.8 Podmínky ...........................................................................24210.8.1 Tvorba podmínek ............................................24210.8.2 Použití podmínek v SQL p íkazech.................243

Page 222: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

222 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

10.1 Rozd lení operátor�

Operátory používáme pro manipulaci s daty. Operátor provede s datyur itou operaci a vrátí výsledek. P íkladem operátoru je sou et (ozna-ovaný znakem ‘+’), který se te dv ísla a výsledek vrátí pro další

zpracování.

10.1.1.1 Ozna ení operátorPro ozna ování operátor slouží speciální znaky (jako ‘+’, ‘-’, ‘/’ apod.) nebo vyhrazená klí ová slova ( , , apod.).

10.1.1.2 Obor hodnot operátoru Každý operátor má definován obor hodnot, nad kterým lze použít. Operátor násobení, ozna ovaný znakem ‘*’ (hv zdi ka), je definován pouze pro reálná ísla. Nem žeme ho použít nap íklad pro et zceznak nebo datumy. Podobn m žeme operátor použít pouze s logickou hodnotou typu (nebo s výrazem, jehož výsledek jehodnota typu ). M žeme však nalézt operátory, které jsoudefinovány pro více datových typ . Takovým operátorem je sou et(‘+’), který je možné použít jak pro se tení dvou reálných ísel, tak i dvou znakových et zc . Dokonce jej v n kterých prost edích m že-me použít pro p i tení ur itého po tu dní k hodnot typu datum.

10.1.1.3 Po et operand operátor – unární a binární operátory Operátory m žeme d lit podle po tu operand (parametr ) jim p edá-vaných.þ Unární operátory pracují pouze s jedním operandem. P íkladem

unárních operátor jsou operátory a unární minus (‘–’).Syntaxe pro použití unárního operátoru je operátor operand.

apod. þ Binární operátory pracují se dv ma operandy. Mezi binární operáto-

ry pat í v tšina operátor , které známe z hodin matematiky – ‘+’, ‘*’ (krát), ‘<’ (menší než) apod. Syntaxe binárních operátor je operand1 operátor operand2.

apod.

Page 223: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

__________________________________________ ROZD LENÍ OPERÁTOR 223

þ Mohou se vyskytovat i ternární (t i operandy) a n-ární operátory,které však mají speciální syntaxe pro zadávání a v tšinou jepovažujeme spíše za funk �ce.

10.1.1.4 Precedence operátorP i vyhodnocování výraz obsahujících více operátor je d ležitájejich precedence neboli priorita vyhodnocování.

Vezmeme-li jako p íklad výraz , je d ležité v jakémpo adí budou jednotlivé operátory vyhodnoceny. Pokud by neexisto-vala priorita a výraz by byl postupn vyhodnocován zleva doprava, dostali bychom jako výsledek íslo 20 ( 3 plus 5 je 8, krát 2 je 16, plus 4 je 20). Ze základní školy však víme, že násobení má p ed s ítáním„p ednost“ (má vyšší prioritu), a proto bude výsledek p edchozíhovýrazu íslo 17 (5 krát 2 je 10, plus 3 je 13, plus 4 je 17). Pokud bys ítání m lo vyšší prioritu než násobení, byl by výsledek 64 (8 krát 8).

Z uvedeného p íkladu jasn vyplývá d ležitost znalosti priorityoperátor . Protože se však m žeme snadno splést, dochází právv p edpokládaném a skute ném zp sobu vyhodnocování k velkémupo tu chyb, které se navíc velmi špatn odhalují. Chceme-li si tedyušet it nep íjemný as strávený hledáním chyby v „zaru en “ správnnapsaném SQL dotazu, používejme d sledn závorky tak, aby bylzp sob vyhodnocování zcela jednozna ný.

10.1.1.5 Pravidla pro vyhodnocování výraz :1. Nejprve se vyhodnocují ásti výrazu uzav ené v závorkách. 2. Operátory s vyšší prioritou se vyhodnocují p ed t mi s prioritou

nižší.3. Operátory se stejnou prioritou se vyhodnocují zleva doprava, tak

jak jsou zapsány ve výrazu.

V následující tabulce jsou uvedeny základní operátory od nejvyššípriority (unární + a –) až po nejnižší (logické OR). Operátory na jednéádce mají stejnou prioritu.

Page 224: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

224 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

� Priorita operátorOperátorUnární + a – * (krát); / (d leno)Binární + a – =, <, >, <>, <=, >=, BETWEENlogické NOT logické AND logické OR

Poznámkaþ V SQL se m žeme ješt setkat s množinovými operátory ( ,

a ). Tyto operátory pracují s množinou ádk vra-cených p íkazem a všechny mají stejnou prioritu.

Page 225: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

________________________________________ ARITMETICKÉ OPERÁTORY 225

10.2 Aritmetické operátory �

Aritmetické operátory používáme pro práci s íselnými hodnotami.ako výsledek dostaneme op t íselnou hodnotu. J

P ehled aritmetických operátor

Aritmetické operátory použitelné p i práci s hodnotou typu datum

Operátor Význam P íkladunární – a + vytvo ení negativní nebo

pozitivní hodnoty výrazu

* a / násobení / d lení

binární + a – se tení / ode tení dvou hodnot

Operátor Význam P íkladbinární + p i tení po tu dní

k datumu

binární – ode tení po tu dní od datumu;zjišt ní po tu dní mezidv ma datumy

Page 226: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

226 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

10.3 Operátory pro znaky a znakové et zce�

Jediným operátorem pro práci se znaky a znakovými et zci je operá-tor pro jejich spojení. Obvykle bývá reprezentován stejným znakemako aritmetický sou et (‘+’).j

Operátory pro et zce znakOperátor Význam P íkladbinární +; || (Oracle)

spojení znakových et zcv jeden

Oracle Pro spojení et zc je nutné použít dvojznak ‘||’:

Page 227: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ OPERÁTORY PRO POROVNÁVÁNÍ 227

10.4 Operátory pro porovnávání�

Tato skupina operátor nám umož uje porovnat dv hodnoty vzhle-dem k jejich definovanému po adí. M žeme tedy porovnávat ísla,datumy, ale i znakové et zce, u kterých p edpokládáme azení podle abecedy. Výsledkem porovnávání je logická hodnota ( ) nebo

( ). Vyskytne-li se ve výrazu na libovolné stran operátoru hodnota , je výsledkem porovnání rovn ž hodnota .

Operátory pro porovnávání použijeme zejména p i psaní podmínekSQL p íkazech v ásti za klí ovým slovem .v

Poznámkaþ Porovnáváme-li znakové et zce, používá po íta azení písmen

v abeced . Problémy nastanou, vyskytnou-li se v et zci znaky es-ké abecedy („ “, „ “ apod.). Aby i tyto znakové et zce byly po-rovnány správn , musí být nastavena lokální kódovací stránka na eštinu. V prost edí MS Windows se nastavuje v nabídce Nastavení

Místní nastavení (Settings Regional Settings). N která databázo-vá prost edí používají toto nastavení i pro porovnávání, v jiných se musí správná kódovací stránka nastavit explicitn .

Operátory pro porovnávání Operátor Význam P íklad= rovnost

<>; != nerovnost

>; < v tší než; menší než

Page 228: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

228 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

� >=; <= v tší nebo rovno; menšínebo rovno

[NOT]BETWEEN x AND y

[Není] v tší nebo rovno x a menší nebo rovno y

[NOT] IN [Ne]pat í do množiny.Výraz je pravdivý, kdyžje hodnota obsažena v množin .

ANY nebo SOME

Porovnání hodnotys každou hodnotou v seznamu nebo ádkemvno eného dotazu. Musí být dopln n jednímz operátor ‘=‘, ‘<>‘, ‘<‘, ‘>‘, ‘<=‘, ‘>=‘. Výraz jepravdivý, pokud je prav-divý alespo pro jednupoložku seznamu nebo ádek vno eného dotazu.

ALL Porovnání hodnotys každou hodnotou v seznamu nebo ádkemvno eného dotazu. Musí být dopln n jednímz operátor ‘=‘, ‘<>‘, ‘<‘, ‘>‘, ‘<=‘, ‘>=‘. Výraz jepravdivý, pokud je prav-divý pro všechny položkyseznamu nebo ádky

Page 229: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ OPERÁTORY PRO POROVNÁVÁNÍ 229

�vno eného dotazu.

EXISTS Ve vno eném dotazu jevrácen alespo jedenádek.

IS [NOT]NULL

Test na rovnost [nerov-nost] s hodnotou NULL.

x [NOT]LIKE y [ESCAPEz’]

Porovnání et zce znak x s maskou y obsahujícízástupné znaky ( dále).

Poznámkaþ N které operátory se mohou navzájem zam ovat:

je totožné s ; je totožné s ;

je totožné s .

Z toho také vyplývá, že ne všechny tyto operátory jsou v databázovémprost edí, které používáme, skute n implementovány.

10.4.1.1 Operátor ANYþ Provede porovnání hodnoty s každou hodnotou v seznamu nebo

s každým ádkem výsledku vno eného dotazu.þ Musí být dopln n jedním z operátor ‘=‘, ‘<>‘, ‘<‘, ‘>‘, ‘<=‘, ‘>=‘.þ Výraz je pravdivý, pokud je pravdivý alespo pro jednu položku

seznamu nebo ádek ve výsledku vno eného dotazu.

Chceme-li zjistit jméno a v k všech zam stnanc , kte í dosáhnou letos ur itého životního jubilea, m žeme použít následující dotaz:

Tento dotaz vypíše p íjmení a v k zam stnanc , jejichž v k je 60, 70, 80 nebo 90 let.

Máme-li tabulku obsahující ve sloupci hodnoty život-ních jubileí (60, 70, 80 …), m žeme vypsat všechny zam stnance,

Page 230: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

230 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

kte í dosáhnou letos n kterého z t chto jubileí pomocí upraveného dotazu:�

Pokud by výsledek vno eného dotazu neobsahoval žádný ádek, nebyla by

podmínka spln na pro žádného zam stnance.

10.4.1.2 Operátor ALLþ Provede porovnání hodnoty s každou hodnotou v seznamu nebo s

ádkem ve výsledku vno eného dotazu.þ Musí být dopln n jedním z operátor ‘=‘, ‘<>‘, ‘<‘, ‘>‘, ‘<=‘, ‘>=‘.þ Výraz je potom pravdivý, pokud je pravdivý pro všechny položky

seznamu nebo pro všechny ádky ve výsledku vno eného dotazu.

Pot ebujeme-li zjistit zam stnance s nejvyšším v kem, m žeme použít následující dotaz:

‘ ’

Operátor zaru í, že v k zam stnance, který bude vybrán, bude v tší nebo roven v ku všech zam stnanc .Neostrou nerovnost jsme museli použít ze dvou d vod :1. Ve výsledku vno eného dotazu bude i

ádek s v kem práv porovnávaného zam stnance. Kdyby zde bylanerovnost ostrá, nebyl by nikdy vybrán žádný zam stnanec, protože nikdy nem že platit .

2. V tabulce m že existovat více zam stnanc se stejným v kem,který je zárove nejvyšším. V takovém p ípad náš dotaz správnvypíše více jmen.

Pozor!þ Operátor se od liší ješt v jednom p ípad . Pokud je porov-

návání provád no nad množinou ádk získaných z vno eného do-tazu a tato množina je prázdná, je výsledkem vždy logická hodnota

( ).

Page 231: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________ OPERÁTORY PRO POROVNÁVÁNÍ 231

10.4.1.3 Operátor LIKE�þ Slouží pro porovnání et zce znak s maskou obsahující zástupné

znaky.Zástupné znaky ozna ují pozice v et zci, kde m že být libovolný znak resp. skupina znak . Obvykle bývá jeden znak nap . ‘_’ (podtr-žítko) vyhrazen pro ozna ení práv jednoho libovolného znaku a znak ‘%’ (procento) pro skupinu znak libovolné délky (i nulové). V n kterých databázových systémech (nap . MS JDBE) se m žemeetkat s použitím jiných znak jako zástupných. s

Zástupné znaky v operátoru LIKE

Zástupné znaky MS JDBE

Znak Význam% 0 nebo více znak_ práv jeden libovolný znak

Znak Význam* 0 nebo více znak? práv jeden libovolný znak # práv jedna íslice 0 až 9 [] ozna ení množiny p ípustných znak na dané pozi-

ci

Chceme-li nap íklad zjistit p íjmení všech zam stnanc za ínající na ‘N’ zadáme následující dotaz:

Operátor zajistí, že ve výsledku se objeví pouze p íjmení majícíprvní písmeno ‘N’ a po n m libovolnou kombinaci znak o libovolné délce – ‘Novák’, ‘Nádeník’, ‘Nosek’, ‘Neveselá’, ale i ‘No’ a ‘N’.

Kdybychom místo znaku ‘%’ cht li použít ‘_’ museli bychom zadat p esnou délku jména ve znacích, tedy nap íklad . Ve vybraných p íjmeních by pak byli uvedeni pouze zam stnanci majícípráv p t písmen v p íjmení – ‘Novák’, ‘Nosek’ apod. – ale nenašli bychom zde nap íklad jméno ‘Nový’, p estože by mezi našimi za-m stnanci existoval.

Složit jší masku musíme použít tehdy, pokud chceme zjistit názvyvýrobk , které mají výrobní íslo za ínající na ‘V’, na druhé pozici

Page 232: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

232 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

libovolný znak, na t etí pozici ‘1’ a dále již libovolnou kombinaciznak . Dotaz bude nyní vypadat takto: �

10.4.1.4 Zm na významu zástupných znakP edstavme si, že samotné výrobní íslo obsahuje na druhé pozici buznak ‘_’, nebo ‘-‘ a my bychom pot ebovali vybrat ty výrobky, u kterých je na druhém míst znak ‘_’. Protože víme, že ‘_’ slouží jakozástupný znak pro práv jeden libovolný znak na dané pozici, nem -žeme zadat masku takto: ‘__%’. Musíme ur itým zp sobem vyjád it,že znak ‘_’ na druhé pozici není znakem zástupným. K tomu námslouží nepovinný modifikátor . Ten umož uje ur it znak, jehožp ed azením p ed znak ‘_’ nebo ‘%’ zrušíme speciální význam, který by jinak znak ‘_’ nebo ‘%’ m l. Správn zadaný dotaz tedy bude vypadat (p i použití znaku ‘\’ v ásti ):

MS JDBEV prost edí MS JDBE používáme pro zrušení funkce zástupného zna-ku jeho p ímé uzav ení do hranatých závorek. Maska pro výrobní ísloobsahující znak ‘*’ na druhé pozici bude tedy vypadat ‘?[*]*’.

Page 233: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ LOGICKÉ OPERÁTORY 233

10.5 Logické operátory��

Logické operátory slouží pro práci s logickými hodnotami a p ípadn nebo s výrazy, jejichž výsledkem je také logická hodnota. Podle použitého operátoru je ze dvou logických hodnot (v p ípad operátoru pouze z jedné) vytvo ena jediná logická

odnota, a to zp sobem, který popisuje následující tabulka. hLogické operátory

Operátor Popis P íkladAND „a zárove “

Vrací ANO, když oba operandy jsou záro-ve ANO.

OR „nebo“Vrací ANO, kdyžalespo jeden operand je ANO.

NOT „není pravda, že“Vrací ANO, kdyžnásledující operand jeNE a naopak.

Poznámkaþ Všimn me si d sledného používání závorek kolem operand . P es-

tože bychom je n kdy nemuseli používat (operátor porovnání mávyšší prioritu než nebo ), jejich použitím zamezíme možnéšpatné interpretaci zvlášt ve složit jších výrazech.

Page 234: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

234 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

�� Pravdivostní tabulky logických operátorPravdivostní tabulka operátoru AND

První operand Druhý operand Výsledek AND ANO ANO ANOANO NE NENE ANO NENE NE NEANO NULL NULLNE NULL NENULL ANO NULLNULL NE NENULL NULL NULL

U operátoru je možné, že výsledek je známý i v p ípad , že jedenz operand je . Pokud je totiž jeden operand , nem že být podle definice operátoru již výsledek jiný než . V tomto p ípadtedy nezáleží na hodnot druhého operandu, který tak m že být ,

, ale i .Pravdivostní tabulka operátoru OR

První operand Druhý operand Výsledek OR ANO ANO ANOANO NE ANONE ANO ANONE NE NEANO NULL ANONE NULL NULLNULL ANO ANONULL NE NULLNULL NULL NULL

Page 235: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________ LOGICKÉ OPERÁTORY 235

I v p ípad operátoru m že být výsledek známý i v p ípad , že jeden z operand je . Pokud je jeden operand , nem že být iný výsledek než . ��j

Pravdivostní tabulka operátoru NOT Operand Výsledek NOT ANO NENE ANONULL NULL

Page 236: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

236 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

10.6 Množinové operátory��

þ Množinové operátory se používají ke spojování výsledk dvou dotaz .

þ Výsledkem dotazu je vždy množina ádk (která m že být i prázd-ná). Pomocí množinových operátor m žeme tyto množiny sjedno-covat, d lat jejich pr nik apod.

P edstavme si, že máme dva dotazy a každý z nich vrací následujícímnožinu ádk jako výsledek:

Výsledek:

a

Výsledek:

Kdybychom nyní cht li získat sjednocení obou t chto výsledk , pou-žijme operátor :

Výsledek:

Page 237: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

_________________________________________ MNOŽINOVÉ OPERÁTORY 237

Množinové operátory

��Operátor Význam P íkladUNION Sjednocení množin;

do výsledku jsouza azeny ádkyz obou dotaz . Ve výsledku však nejsouduplicitní ádky.

UNION ALL Jako UNION, ale ve výsledku mohou být duplicitní ádky.

INTERSECT Pr nik množin; do výsledku jsou za aze-ny ádky, které se vyskytly v obou dota-zech.

MINUS;EXCEPT

Rozdíl množin; do výsledku jsou za aze-ny ádky, které se vyskytly ve výsledku prvního dotazu a nejsou ve výsledku druhého dotazu.

Poznámkaþ N která databázová prost edí umož ují použití modifikátoru se

stejným významem jako u i u ostatní operátor .

10.6.1.1 Omezení pro použití množinových operátorP i použití množinových operátor je podstatné, že ob množiny ádkmají stejný formát. To znamená, že se skládají ze stejného po tusloupc , z nichž každý je stejného datového typu jako jeho prot jšekve druhé množin .

Chceme-li p esto použít množinový operátor nad výsledkem dvou podobných dotaz , které však nejsou zcela totožné, musíme p idat

Page 238: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

238 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

prázdné sloupce tam, kde se v druhém dotazu vyskytuje hodnota na-víc:��

Výsledek pak bude vypadat nap íklad takto:

P i použití jiných datových typ , než je et zec znak – (nap íkladdatum), m že být v n kterých databázových prost edích nutné použít speciální funkce pro p etypování hodnoty na tento typ. Nap íkladv prost edí Oracle by se pro p evod na typ datum musela použít funk-ce . Sjednocení dvou dotaz , z nichž jeden obsahuje sloupec typu datum, by pak vypadalo takto:

Page 239: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________________________________ VÝRAZY 239

10.7 Výrazy ��

Výraz je skupina konstant, prom nných a funkcí spojených pomocíoperátor , která spl uje ur itá pravidla – má správnou syntaxi. Jako prom nné se v SQL p íkazech používají názvy sloupc , které zastupu-jí všechny hodnoty, které se v daném sloupci vyskytují.

Výsledkem výrazu je hodnota, kterou získáme tak, že výraz vypo -teme. Datový typ výrazu je odvozen z datových typ jednotlivýchprvk vyskytujících se ve výrazu. Vynásobíme-li dv ísla, získámeop t íslo. Sou tem dvou et zc znak je op t et zec znak .

10.7.1.1 Automatická konverze datových typPodle použitého databázového prost edí m že p i vyhodnocovánívýrazu docházet k automatickým konverzím datových typ , aby bylomožné výraz vyhodnotit. Zadáme-li nap . v prost edí MS JDBE k vyhodnocení výraz , dojde k automatické konverzi dru-hého operandu z et zce znak na íslo a výsledkem bude ísel-ná hodnota 3.

10.7.1.2 Použití výrazVýrazy používáme jako parametry funkcí, sou ásti podmínek nebo p ímo v SQL p íkazech.

10.7.2 Tvorba výrazZákladními stavebními prvky výraz jsou:

Výraz P íkladsloupec identifikovaný jehonázvem, p ípadn p ed azenýnázvem tabulky, pokud není název jednozna nýtextová konstanta íselná konstanta

výsledek funkce hodnota ‘NULL’

Page 240: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

240 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

Jako ást výrazu lze použít i název pseudosloupce – nebo , pokud se v daném prost edí vyskytují.��

Základní prvky výrazu i nov vytvo ené výrazy m žeme dále kombi-ovat do složit jších výraz :n

Úprava Syntaxe P íkladuzav ení do závorek <výraz>unární minus;unární plus

výrazvýraz

binární operátory výraz1 operátorvýraz2

P i vytvá ení výraz musíme dbát na to, abychom kombinovali pouze prvky a funkce stejného (nebo vzájemn p evoditelného) datového typu. Dále nesmíme použít agrega ní funkci v parametru jiné agrega -ní funkce.

10.7.2.1 Vno ený dotaz jako speciální typ výrazu Samotný dotaz m že být za jistých podmínek považován za výraz nabývající ur ité hodnoty ( 7.9). Musíme však zaru it, že výsledkem tohoto dotazu bude pouze jediná hodnota. V seznamuvýstupních sloupc m že být proto pouze jediný sloupec, který bude navíc obsahovat agrega ní funkci ( 8.1.5). Jako p íklad si m žemeuvést následující vno ený dotaz:

Hodnotou tohoto výrazu je pr m rná výše platu v tabulce zam stnan-c . Výsledek tohoto dotazu m žeme použít p i zadávání dotazu zjiš u-jícího p íjmení zam stnanc s platy vyššími než pr m r:

Nejprve bude vyhodnocen vno ený dotaz. (Všimn me si uzav enívno eného dotazu v kulatých závorkách.) Potom bude pro každého zam stnance v tabulce zam stnanc porovnáván jeho plat s pr m rným platem ve firm . P íjmení zam stnanc , kte í budou mítplat vyšší než pr m rný, budou vypsána na obrazovku.

Page 241: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

______________________________________________________ VÝRAZY 241

10.7.3 Použití výraz v SQL p íkazech��P i tvorb SQL p íkaz m žeme výrazy použít:

þ za klí ovým slovem v ásti definující seznam výstupních hodnot v p íkazu ;

þ jako ást podmínky v r zných SQL p íkazech;þ jako klí pro t íd ní za klí ovým slovem v p íkazu

;þ p i definici vkládaných hodnot za klí ovým slovem

v p íkazu ;þ p i definici nové hodnoty za klí ovým slovem v p íkazu

.

Page 242: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

242 OPERÁTORY, VÝRAZY A PODMÍNKY _________________________________

10.8 Podmínky ��

Pomocí podmínek m žeme omezit množinu ádk tabulky, se kterýmichceme pracovat. Pouze ádky, které vyhovují dané podmínce budou použity p i dalších výpo tech. Podmínka je spln na, pokud byla vy-hodnocena jako ( ). Pokud je výsledná hodnota ( )nebo (neur itá hodnota), není podmínka považována za spln -nou.

Chceme-li zjistit pr m rnou výši platu v odd lení íslo 5, m žeme,jak uvidíme dále, použít podmínku ve tvaru . Tato podmínka zajistí, že do množiny ádk , se kterými pracuje funkce – aritmetický pr m r – budou zahrnuty pouze hodnoty plat pracovní-k z odd lení íslo 5:

10.8.1 Tvorba podmínekZa podmínku m žeme považovat libovolný výraz, jehož výsledkem jelogická hodnota . Ke konstrukci takovýchto výraz nám budou sloužit zejména operátory pro porovnávání – ‘=’, ‘<=’, ,

apod. P íklady jednoduchých podmínek

Podmínka Poznámkapodmínka platící vždyplat musí být vyšší než 5.000 jméno za íná na písmeno N

Takto vytvo ené výrazy m žeme dále kombinovat pomocí logických spojek , a , p ípadn pomocí dalších, které nabízí pro práci s logickými hodnotami databázové prost edí, které práv používáme.

Page 243: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove

____________________________________________________ PODMÍNKY 243

��P íklady složených podmínek

Podmínka Poznámkaplat vyšší než 5.000 v odd lení íslo 5 plat menší než 5.000 nebo nepracuje v odd lení íslo 5 není žádný ádek v tabulce výpov dí

10.8.2 Použití podmínek v SQL p íkazechP i tvorb SQL p íkaz m žeme podmínky použít: þ za klí ovým slovem v ásti omezující množinu ádk , se

kterými se pracuje, a to v p íkazech , a ;þ za konstrukcí v ásti definující zp sob propojení dvou

tabulek v p íkazu ;þ za klí ovým slovem v ásti omezující celou skupinu ádk

v p íkazu .Poznámka

Jednotlivá prost edí mohou díky svým rozší ením jazyka SQL umož ovat použití podmínky i v dalších p ípadech. Nap íkladv prost edí Oracle se podmínka m že také vyskytovat za klí o-vými slovy a definujícími hierarchic-kou strukturu dotazu.

Page 244: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 245: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 246: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 247: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 248: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove
Page 249: 002 Hlavni.Crop - vse.cznb.vse.cz/~simunek/files/KKP_SQL.pdfpatrné, zabývá se zejména jazykem SQL, pomocí kterého získáváme z relaþních databází požadovaná data. Zárove