databázové systémy - dbs

51
Databázové systémy - DBS 6. Přednáška Načítání dat z tabulek SELECT

Upload: norman-bradford

Post on 03-Jan-2016

67 views

Category:

Documents


0 download

DESCRIPTION

Databázové systémy - DBS. Načítání dat z tabulek SELECT. 6. Přednáška. DBS – Databázové systémy . MS SQL Server – SELECT a Funkce. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Databázové systémy - DBS

Databázové systémy - DBS6. Přednáška

Načítání dat z tabulek

SELECT

Page 2: Databázové systémy - DBS

MS SQL Server – SELECT a Funkce

DBS – Databázové systémy

Funkce jsou bloky kódu, které na základě zadaných parametrů vykonají požadovanou operaci (statistickou, matematickou, apod…) a vrátí nějaký výsledek.

Rozlišujeme: Agregační funkce – pracují nad množinou řádků a vrací jeden

výsledek pro celou vstupní množinu údajů Jednořádkové funkce – pracují s jedním řádkem a pro každý vrací

jednu hodnotu

Funkce pracují s hodnotami numerickými, řetězci, datumovými a časovými hodnotami, nebo se používají pro konverzi údajů.

Page 3: Databázové systémy - DBS

SELECT – jednořádkové funkce, matematické

DBS – Databázové systémy

Jednořádková funkce se aplikuje na jeden řádek a vrací jednu hodnotu – nebo skončí chybou. Funkce může mít libovolný počet parametrů.

Příklad jednořádkové funkce: select 1+1 as "Výsledek" select sin(pi()+4), (2+8)*10

Výsledky: 2 0,756802495307928 100

Page 4: Databázové systémy - DBS

SELECT – jednořádkové funkce, matematické

DBS – Databázové systémy

SQL Server má implementovanou řadu matematických funkcí, které se často používají pro ukládání a práci s vědeckotechnickými údaji. Následující přehled představuje pouze ty nejzákladnější. Na SQL Serverech různých výrobců se syntaxe může výrazně lišit.

1. Absolutní hodnota – vrací absolutní hodnotu čísla n:select abs(-10) as 'Výsledek‘

Výsledek:

10

Page 5: Databázové systémy - DBS

SELECT – jednořádkové funkce, matematické

DBS – Databázové systémy

2. Funkce Ceiling(n) – vrací nejmenší celé číslo, které je větší než parametr n:

select ceiling(3.156987)as 'Výsledek’

Výsledek:

4

3. Funkce Floor(n) – vrací největší celé číslo, které je menší než parametr n:

select floor(3.156987) as ‘Výsledek’

Výsledek:

3

Page 6: Databázové systémy - DBS

SELECT – jednořádkové funkce, matematické

DBS – Databázové systémy

4. Funkce Log(n) – vrací hodnotu přirozeného logaritmu parametru n:

select log(10000) as ‘Výsledek’

Výsledek:

9,21034037197618

5. Funkce log10(n) – vrací hodnotu dekadického logaritmu parametru n:

select log10(10000) as ‘Výsledek’

Výsledek:

4

Page 7: Databázové systémy - DBS

SELECT – jednořádkové funkce, matematické

DBS – Databázové systémy

6. Funkce Power(m,n) – vrací hodnotu m-té mocniny čísla n:

select power(2,10) as ‘Výsledek’

Výsledek:

1024

7. Funkce Round(n,m) – vrací hodnotu čísla n zaokrouhlenou na požadovaný počet desetinných míst. Parametr m udává počet platných míst. Když je m záporné, klesá počet platných číslic i před desetinnou tečkou.:

select round(31564.12345,-2) ‘Výsledek’

Výsledek:

31600.00000

Page 8: Databázové systémy - DBS

SELECT – jednořádkové funkce, textové

DBS – Databázové systémy

Tyto funkce pracují s textovými řetězci. Parametry i výsledky těchto funkcí mohou být řetězce, ale i číselné hodnoty.

8. Funkce Lower(řetězec) – překonvertuje všechna písmena řetězce na malá písmena abecedy – číslice a jiné znaky zůstanou beze změny

select lower('Fakulta podnikatelská, Kolejní 2906/4')

as ‘Výsledek’

Výsledek:

fakulta podnikatelská, kolejní 2906/4

Page 9: Databázové systémy - DBS

SELECT – jednořádkové funkce, textové

DBS – Databázové systémy

10. Funkce char(číslo) – překonvertuje binární reprezentaci znaku na znak

Select char(107)+char(114)+char(105) +char(122) +char(64);

+'fbm.vutbr.cz'

9. Funkce Upper(řetězec) – překonvertuje všechna písmena řetězce na velká písmena abecedy – číslice a jiné znaky zůstanou beze změny

select upper('Fakulta podnikatelská, Kolejní 2906/4')

as ‘Výsledek’

Výsledek:

FAKULTA PODNIKATELSKÁ, KOLEJNÍ 2906/4

Výsledek:[email protected]

Page 10: Databázové systémy - DBS

SELECT – jednořádkové funkce, textové

DBS – Databázové systémy

11. Funkce Left(řetězec, délka) – vrátí daný počet znaků (parametrem délka) zleva

select left ('Lenka Smolíková Niebauerová',5) as ‘Výsledek’

Výsledek:

Lenka

12. Funkce Right(řetězec, délka) – vrátí daný počet znaků (parametrem délka) zprava

select right ('Lenka Smolíková Niebauerová',11) as ‘Výsledek’

Výsledek:

Niebauerová

Page 11: Databázové systémy - DBS

SELECT – jednořádkové funkce, textové

DBS – Databázové systémy

13. Funkce Ltrim(řetězec) – odstraní všechny mezery zleva

14. Funkce Rtrim(řetězec) – odstraní všechny mezery zprava

Příklad

select rtrim ('Lenka Smolíková Niebauerová ‚) as ‘Výsledek’

Výsledek

Lenka Smolíková Niebauerová

Příkladselect right(rtrim ('Lenka Smolíková Niebauerová '),11);as ‘Výsledek’VýsledekNiebauerová

Page 12: Databázové systémy - DBS

SELECT – jednořádkové funkce, textové

DBS – Databázové systémy

15. Funkce Replace(řetězec1, řetězec2, řetězec3) – vrátí nový řetězec vytvořený z řetězce1, kdy nahradí všechny výskyty řetězce2 v řetězc1 řetězcem3.

select replace('Studenti FP čekali','Studenti FP','Studenti ŘEP');

as "Výsledek„

VýsledekStudenti ŘEP čekali

Page 13: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

Pro uložení data a času se v databázích používají speciální datové typy. Datum a čas se dále rozděluje na části začínající rokem a končící milisekundou, se kterými se dále pracuje.

YearQuarterMonthDayofyearDayWeekWeekday

HourMinuteSecondMillisecond

Page 14: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

Pro manipulaci s datem a časem se používají speciální funkce

1. getdate() – vrací aktuální hodnotu data a času

Select getdate()

Výsledek:

2009-03-03 14:55:01.630

2. getutcdate() – vrací aktuální hodnotu data a času pro UCT (GMT-nultý poledník, mezinárodně akceptovaný čas)

Select getutcdate()

Výsledek:

2009-03-03 13:55:01.630

Page 15: Databázové systémy - DBS

DBS – Databázové systémy

Page 16: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

3. dateadd(část_datumu, číslo, datum) – vrací novou hodnotu data a času, vygenerovanou z původní hodnoty, kterou udává parametr datum

select dateadd(day,7,getdate()) (spuštěno 3.3.2009)

Výsledek:

2009-03-10 19:31:26.090

select dateadd(day,-5,getdate()) (spuštěno 3.3.2009)

Výsledek:

2009-02-26 19:33:29.530

Page 17: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

4. datediff(část_datumu, datum1, datum2) – vrací počet sekund, dní,…, roků podle parametru část_datumu mezi dvěma zadanými daty.

select datediff(day,'1.1.2007','1.1.2008')

Výsledek:

365

select datediff(month,'1.1.2007','1.1.2008')

Výsledek:

12

Page 18: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

4. datename(část_datumu, datum) – vrací část data zadanou prvním parametrem pro datum zadané v druhém parametru

select datename(month, getdate()) (spuštěno v březnu)

Výsledek:

March

5. datepart(část_datumu, datum) – vrací číselnou část data zadanou prvním parametrem pro datum zadané v druhém parametru

select datepart(month, getdate()) (spuštěno v březnu)

Výsledek:

3

Page 19: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

6. year, mont, day(datum) – vrací pořadové číslo roku, číselnou hodnotu měsíce nebo číselnou hodnotu dne ze zadaného data.

select year('07.12.2006')

Výsledek: 2006

select month('07.12.2006')

Výsledek: 7

select day('07.12.2006')

Výsledek: 12

Page 20: Databázové systémy - DBS

SELECT – jednořádkové funkce, datum a čas

DBS – Databázové systémy

ID_Time Datum_Cas Rok Ctvrtleti Mesic

1 4.7.1996 0:00 1996 3 7

2 5.7.1996 0:00 1996 3 7

3 8.7.1996 0:00 1996 3 7

4 9.7.1996 0:00 1996 3 7

5 1.10.1996 0:00 1996 4 10

6 2.10.1996 0:00 1996 4 10

7 3.10.1996 0:00 1996 4 10

8 4.10.1996 0:00 1996 4 10

9 7.10.1996 0:00 1996 4 10

10 8.10.1996 0:00 1996 4 10

11 9.10.1996 0:00 1996 4 10

12 1.1.1997 0:00 1997 1 1

13 2.1.1997 0:00 1997 1 1

14 3.1.1997 0:00 1997 1 1

15 6.1.1997 0:00 1997 1 1

16 7.1.1997 0:00 1997 1 1

17 8.1.1997 0:00 1997 1 1

18 9.1.1997 0:00 1997 1 1

Page 21: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - základní syntaxe příkazuZákladní syntaxe je ve tvaru SELECT (názvy sloupců) FROM (název tabulky). V tomto příkazu pak (názvy sloupců) nahradíme seznamem sloupců, které chceme vypsat ve výsledku dotazu a (název tabulky) nahradíme konkrétním jménem tabulky, ze které se mají sloupce vypsat. Místo seznamu sloupců můžeme v dotazu použít znak *, který dosadí do výsledku dotazu všechny sloupce z tabulky.

SyntaxeSELECT (názvy sloupců) FROM (název tabulky)

Příklad 1:SELECT * FROM Ucitel

Page 22: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - výpis vybraných sloupců tabulkyZákladní syntaxe je ve tvaru: SELECT (sloupec1, sloupec2, sloupec3) FROM (název tabulky). V tomto příkazu pak (sloupec1, sloupec2, sloupec3) nahradíme výčtem sloupců, které chceme vypsat ve výsledku dotazu a (název tabulky) nahradíme konkrétním jménem tabulky, ze které se mají sloupce vypsat. V tomto případě nepoužíváme u názvů sloupců znak *.

Syntaxe:SELECT (sloupec1, sloupec2) FROM (název tabulky)

Příklad 2:SELECT Jmeno, Prijmeni FROM Ucitel

Page 23: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - změna textu v záhlaví sloupcůV předchozích příkladech se nám ve výsledku dotazů zobrazili názvy sloupců tak, jak jsou uvedeny fyzicky v tabulce. Ve většině případů jsou názvy sloupců uvedeny ve zkráceném tvaru např: ID_u nebo R_uvazek. Pokud bychom vypsali uživateli tabulku s těmito názvy sloupců nemusí se v ní vždy přesně orientovat. Proto je vhodné použít ve výpisu modifikované názvy, ve kterých můžeme přesněji popsat význam jednotlivých sloupců. Id_učitele nebo Roční úvazek mají zajisté větší vypovídací schopnost než uvedení Id_u či R_uvazek.

Syntaxe:SELECT (název sloupce) as "Text1", (název sloupce) as "Text2" FROM (název tabulky), kde Text1, Text2 jsou libovolné názvy sloupců.  Příklad 3:SELECT Id_u as "ID Učitele", R_uvazek as "Roční úvazek" FROM Ucitel

Page 24: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - odstranění duplicitních (opakujících se) záznamůPři ukládání dat v tabulkách se nevyhneme případům, že tabulka obsahuje v některém sloupci opakující se záznamy. Jako příklad si můžeme uvést tabulku studentů, ve které udržujeme přehled o vyplacených stipendiích např. za letní semestr. Je  pravděpodobné, že ve sloupci stipendium se nám mohou objevit stejné vyplacené částky pro různé studenty. V případě, že chceme zjistit kolik různých  částek stipendií bylo vyplaceno, musíme uvést v syntaxi dotazu klíčové slovo DISTINCT. To má za důsledek skutečnost, že ve vráceném výsledku dotazu se nám objeví vždy pouze jedna instance opakujících se záznamů.

Syntaxe:SELECT DISTINCT (název sloupce) FROM (název tabulky)

Příklad 4:SELECT DISTINCT Stipendium FROM Student

Page 25: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - podmínky, operátoryPodmínky zapisujeme do příkazu SELECT a zadávají se za klauzuli WHERE. Podmínka je logický výraz, který v závislosti na podmínce vyjádřené operátorem např. (=), vrací buď pravdivou (True) nebo nepravdivou (False) hodnotu výrazu. Výraz tedy vrací hodnotu - není to vždy pouze hodnota (True) nebo (False) - to se týká pouze logických výrazů, ale výraz pracuje s různými datovými typy, jako je např. Varchar (řetězec), Integer (číslo).  Jako příklad jednoduché logické podmínky si můžeme uvést například podmínku: Prijmeni = 'Ondrák'.Jako další příklad, když budeme chtít vypsat z tabulky každého učitele, který má úvazek nižší než 300 hodin, pak podmínka bude zapsaná ve tvaru: R_uvazek < 300Syntaxe:SELECT (názvy sloupců) FROM (název tabulky) WHERE (podmínka)

Příklad 5:SELECT * FROM Ucitel WHERE Prijmeni=’Ondrák’

SELECT Prijmeni, Jmeno FROM Ucitel WHERE R_uvazek <500

Page 26: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

OperátoryPod pojmem operátory si můžeme představit prvky, které se v dotazu používají pro definování podmínky za účelem získání požadovaných údajů z tabulky. Operátory se dají rozdělit do několika skupin. Rozlišujeme potom operátory:

- aritmetické (plus, mínus, násobení, dělení a modulo)

- porovnávací (True, False, rovná se, nerovná se, větší než, větší než nebo rovná se, menší než, menší než nebo rovná se)

- znakové (LIKE, _ , % )

- logické (AND, OR, NOT)

- množinové (UNION, UNION ALL, INTERSECT)

- ostatní (IN, BETWEEN)

Page 27: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátoryAritmetické operátory jsou +, -, *, / a modulo (%). Funkce prvních čtyř je dostatečně známá, operátor modulo vrací zbytek čísla po dělení. Operátor modulo nepoužíváme u datových typů, které mají desetinná čísla.

např: 6 % 3 = 0 nebo 7 % 2 = 1

Aritmetické operátory jsou v dotazu vyhodnocovány v pořadí *, /, %, +, -. Prioritu vyhodnocování lze vhodně upravit využitím závorek.        

Operátor +

V tabulce Student je u každého studenta uvedena výše jeho stipendia. Směrnicí bude určeno, že výška stipendia se každému studentu zvedne o 100,-Kč. Uvedený příklad zobrazí příjmení studenta, současné stipendium a nové stipendium.

SELECT Prijmeni, Stipendium, Stipendium+100 FROM Student

SELECT Prijmeni, Stipendium, Stipendium+100 as ‘Nové stipendium’ FROM Student

Page 28: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátoryOperátor + můžeme využít také pro spojování hodnot uložených v textových sloupcích. V případě, že potřebujeme vypsat jméno a příjmení studenta do jednoho sloupce použijeme dotaz ve tvaru:

SELECT Jmeno+' '+Prijmeni as ‘Jméno studenta’ FROM Student

(' ', tato klauzule v dotazu znamená, že mezi jméno a příjmení vložíme prázdný znak a s použitím operátoru + spojíme jméno, prázdný znak a příjmení do jednoho sloupce.

SELECT rtrim(Jmeno)+' '+ltrim(Prijmeni) as 'Jméno studenta' FROM Student

Page 29: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátory

Operátor –Operátor mínus v uvedeném dotazu změní znaménka u číselných položek na znaménka opačná. Uvedený dotaz zobrazí příjmení studentů, jejich stipendium a vložením sloupce (-Stipendium) se ve výsledku dotazu zobrazí nový sloupec s názvem (Změna znaménka), ve kterém se převedou kladné hodnoty na záporné.

SELECT Prijmeni, Stipendium, -Stipendium as ‘Změna znaménka’ FROM Student

Page 30: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátory

Operátor –V tomto dotazu je znaménko mínus použito již klasickým způsobem pro odečítání dvou hodnot. Můžeme odečíst hodnoty uložené ve dvou různých sloupcích tabulky, nebo od konstanty odečíst hodnoty uložené v tabulce. V uvedeném dotazu je konstanta ve výši 6000 a udává maximální výši stipendia. Od této hodnoty odečteme hodnoty uložené v tabulce studenti ve sloupci stipendium a obdržíme tak výsledek, kolik chybí každému studentovi pro dosažení maximálního stipendia.

SELECT Prijmeni, 6000-Stipendium as ‘Chybí do max.stipendia’ FROM Student

Page 31: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátory

Operátor /V tomto dotazu použijeme operátor dělení pro snížení stipendií z řádu tisíců na stovky (jinými slovy vydělíme stipendia číslem 10).

SELECT Prijmeni, Stipendium, Stipendium/10 as ‘Po snížení’ FROM Student 

Page 32: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátory

V tomto dotazu použijeme operátor * pro plošné 10% snížení stipendia u všech studentů.

SELECT Prijmeni, Stipendium, Stipendium*0.9 as "Po 10% snížení" FROM Student

 

Page 33: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - aritmetické operátory

Operátor =

V klauzuli WHERE se operátor = používá pro výběr konkrétní hodnoty. Uvedený dotaz vypíše za předpokladu, že příjmení Kolář existuje jako hodnota ve sloupci Prijmeni v tabulce Student hodnoty, které splňují podmínku za klauzuli WHERE.  

SELECT Prijmeni, Stipendium FROM Student WHERE Prijmeni='Kolář'

SELECT * FROM Student WHERE Stipendium=5200

Page 34: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - porovnávací operátory

Operátor větší než > nebo větší než nebo rovná se >=

Operátory používáme v případě, že potřebujeme zobrazit hodnoty, které jsou větší eventuelně větší nebo rovny podmínce uvedené za klauzulí WHERE. Potřebujeme zjistit, kteří studenti pobírají stipendium vyšší než 3900.

SELECT Prijmeni, Stipendium FROM Student WHERE Stipendium > 3900

SELECT Prijmeni, Stipendium FROM Student WHERE Stipendium >= 3600

Page 35: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - porovnávací operátory

Operátor menší než < nebo menší než nebo rovná se <=

Operátory používáme v případě, že potřebujeme zobrazit hodnoty, které jsou menší eventuelně menší nebo rovny podmínce uvedené za klauzulí WHERE. Potřebujeme zjistit, kteří studenti pobírají stipendium menší než 3900.

SELECT Prijmeni, Stipendium FROM Student WHERE Stipendium < 3900

SELECT Prijmeni, Stipendium FROM Student WHERE Stipendium <= 3600

Page 36: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - porovnávací operátory

Operátory >, >=, <, <= můžeme použít i pro zobrazení hodnot z textových sloupců. Vyzkoušejte si nejprve dotaz SELECT * FROM Student

a potom níže uvedené dotazy. Porovnejte rozdíly ve výsledku těchto dotazů, kdy operátory aplikujeme na textové sloupce.

SELECT * FROM Student WHERE Jmeno > 'Jaroslav'SELECT * FROM Student WHERE Jmeno >= 'Jaroslav'SELECT * FROM Student WHERE Jmeno <  'Jaroslav'SELECT * FROM Student WHERE Jmeno <= 'Jaroslav'

Page 37: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - porovnávací operátory

Operátor nerovná se <>

Operátor používáme v případě, že potřebujeme zobrazit všechny hodnoty z tabulky, ale do výsledku dotazu nechceme zahrnout hodnoty, které splňují nějaké kritérium. Například potřebujeme vypsat názvy předmětů,  ale pouze těch, které mají počet kreditů jiný než 7.

SELECT * FROM Predmety WHERE Kredity<>7

Page 38: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - porovnávací operátory

Operátor nerovná se <>

Operátor používáme v případě, že potřebujeme zobrazit všechny hodnoty z tabulky, ale do výsledku dotazu nechceme zahrnout hodnoty, které splňují nějaké kritérium. Například potřebujeme vypsat názvy předmětů,  ale pouze těch, které mají počet kreditů jiný než 7.

SELECT * FROM Predmety WHERE Kredity<>7

Page 39: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

SELECT - znakové operátoryPři práci s databází bývá také častým případem situace, kdy potřebujeme v dotazu specifikovat nějaké údaje, ale neznáme úplně jejich obsah nebo nevíme v jakém formátu jsou v tabulce uložena. Pro tento případ můžeme použít operátor LIKE společně se zástupnými znaky:

%    nahrazuje libovolné množství znaků

_    nahrazuje jeden znak

V databázi máme v tabulce Ucitel uložená jména vyučujících. Naším úkolem bude například vyhledat učitele na jehož celé příjmení si nemůžeme vzpomenout, ale víme, že začíná na písmeno K. Dotaz v tomto případě můžeme zapsat ve tvaru:   

SELECT Jmeno, Prijmeni FROM Ucitel WHERE Prijmeni LIKE 'K%‚

Page 40: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

V následujícím  dotazu potřebujeme vypsat příjmení učitelů, u kterých se kdekoliv v příjmení (na libovolné pozici) vyskytuje znak ' á '.

SELECT Jmeno, Prijmeni FROM Ucitel WHERE Prijmeni LIKE '%á%'

eventuelně pokud známe přesně pozici výskytu můžeme dotaz přepsat na

SELECT Jmeno, Prijmeni FROM Ucitel WHERE Prijmeni LIKE '____á%‚

(Poznámka: výraz '____á' značí, že písmeno ' á ' se vyskytuje na páté pozici, před znak ' á ' napíšeme čtyřikrát znak ' _ '. 

Page 41: Databázové systémy - DBS

SELECT

DBS – Databázové systémy

Jiná varianta dotazu nám vypíše jméno a příjmení učitelů, kteří mají úvazek v rozmezí 300 - 309 hodin.

SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek LIKE '30%'

eventuelně dotaz ve tvaru

SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek LIKE '3%%'

nám vypíše učitele, kteří mají úvazek v rozsahu 300-399 hodin.

Page 42: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT - logické operátoryLogické operátory používáme v případě, že potřebujeme oddělit dvě nebo více podmínek v klauzuli WHERE.V předchozí kapitole jsme s využitím znakového operátoru LIKE vypisovali učitele, kteří mají úvazek v rozsahu 300-399 hodin. Stejného výsledku dosáhneme i s využitím logického operátoru AND. Dotaz pak zapíšeme ve tvaru: SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek >=300 AND R_uvazek < 400

Logický operátor AND vyžaduje, aby výrazy na obou stranách vracely hodnotu True, tedy aby výrazy na obou stranách byly pravdivé. Pokud je některý z výrazů nepravdivý, vrací operátor AND hodnotu False. Pokud bychom váše uvedený dotaz přepsali například takto:

SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek >=300 AND R_uvazek =400

ve výsledku dotazu neobdržíme žádný záznam, protože druhý výraz (R_uvazek=400) vrátí hodnotu False. Jinými slovy řečeno v tabulce neexistuje učitel, který má úvazek přesně 400 hodin.

Page 43: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT - logické operátory

Logický operátor OR vrátí hodnotu True v případě, že je jakýkoliv výraz pravdivý. To znamená, že v našem případě stačí, aby jeden z výrazů na obou stranách byl pravdivý a operátor OR vrátí hodnotu True. Pro demonstraci použijeme předchozí dotaz a jedinou změnou v něm bude to, že operátor AND nahradíme operátorem OR.

SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek >=300 OR R_uvazek =400

V tomto případě již výsledek obdržíme i přesto, že v tabulce neexistuje učitel s úvazkem rovným 400 hodinám, ale protože v tabulce existují učitelé, kteří mají úvazek větší nebo roven 300 hodinám operátor OR vrátí hodnotu True a zobrazí výsledek dotazu.

Page 44: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT - logické operátory

Logický operátor NOT označuje negaci. V případě, že je vyhodnocovaná podmínka pravdivá, operátor ji změní na nepravdivou (True se změní na False), je-li vyhodnocovaná podmínka nepravdivá, změní se na pravdivou (False na True). Pro demonstraci použijeme opět druhý dotaz z tohoto příkladu (SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek >=300 AND R_uvazek =400), který nám vrátil hodnotu False a nevypsal žádný výsledek. Jediná změna, kterou v tomto dotazu provedeme bude za operátorem AND kam vložíme operátor NOT a tím znegujeme hodnotu False na hodnotu True a dotaz nám vrátí výsledek.

SELECT Jmeno, Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek >=300 AND NOT R_uvazek =400

Page 45: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – kombinace operátorů

Příklad trochu složitějšího dotazu, který kombinuje aritmetické, znakové a logické operátory.

SELECT Jmeno, Prijmeni, R_uvazek*5 - 100 AS "Úvazek za pět let" FROM Ucitel WHERE R_uvazek*5-100 > 1200 AND Prijmeni LIKE 'K%‘

Výsledkem dotazu jsou učitelé, kteří mají úvazek za posledních pět let, po odečtu 100 hodin za konzultace, větší než 1200 hodin a jejich příjmení začíná na K.

Page 46: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – množinové operátory

Dotazovací jazyk SQL vychází z teorie množin. Množinové operátory umožňují slučovat různé množiny dat do jedné výsledné množiny dat.

Pro demonstraci množinových operátorů máme v databázi uloženy dvě tabulky. Jedna je nazvaná Ucitele_fp a udržuje data o učitelích, kteří vyučují na fakultě podnikatelské a tabulku Ucitele_fsi, která udržuje data o učitelích na fakultě strojního inženýrství a současně obsahuje i učitele z fakulty podnikatelské, kteří vyučují nějaké předměty na FSI.

Page 47: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – množinové operátory

V případě dvou nezávislých tabulek je vhodné pro výpis údajů do jednoho výpisu použít množinové operátory. Stejného výsledku například průsečík (průnik) dvou tabulek můžeme použít i vnořený dotaz.

Představme si situaci, že potřebujeme z tabulek vypsat kolik různých učitelů učí na fakultě podnikatelské a fakultě strojního inženýrství. Dotaz pak zapíšeme ve tvaru:   

SELECT Prijmeni FROM Ucitel_fpUNIONSELECT Prijmeni FROM Ucitel_fsi

Prijmeni

Doskočil

Dostál

Jordánová

Kotas

Kropáč

Kučera

Luhan

Mezník

Nedorost

Rais

Svirák

Šimberová

Page 48: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – množinové operátory

Pokud dotaz přepíšeme na tvar:  

SELECT Prijmeni FROM Ucitel_fpUNION ALLSELECT Prijmeni FROM Ucitel_fsi

V případě, že použijeme operátor UNION ALL, obdržíme výsledek, který nám vypíše všechny jména z obou dvou tabulek včetně duplicitních záznamů.

Page 49: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – množinové operátory

V případě, že potřebujeme zjistit jména učitelů, kteří vyučují na obou fakultách nemůžeme již použít operátor UNION či UNION ALL, ale musíme použít operátor INTERSECT.

Operátor INTERSECT, jak vyplývá z předchozího odstavce, tedy vrací průnik obou dvou tavulek. Dotaz zapíšeme ve tvaru:

SELECT Prijmeni FROM Ucitel_fpINTERSECTSELECT Prijmeni FROM Ucitel_fsi

Prijmeni

Dostál

Rais

Svirák

Šimberová

Page 50: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – ostatní

Představme si situaci, že potřebujeme z tabulky Ucitel vypsat všechny učitele, kteří mají úvazek roven 300,304,305,306,307,308,309,310,400 hodinám. Samozřejmě, že dotaz můžeme bez problémů sestrojit s využitím operátoru OR, nebo můžeme použít kratší konstrukci zápisu s využitím operátoru IN. Dotaz pak zapíšeme ve tvaru: 

SELECT Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek IN(301,330,401,420)

Page 51: Databázové systémy - DBS

SELECTDBS – Databázové systémy

SELECT – ostatní

V případě, že budeme potřebovat vypsat jména učitelů, kteří mají úvazek v nějakém rozsahu hodin např. 250-310 včetně, můžeme místo operátoru AND použít operátor BETWEEN. Dotaz pak zapíšeme ve tvaru:

SELECT Prijmeni, R_uvazek FROM Ucitel WHERE R_uvazek BETWEEN 250 AND 310

Další ukázka konstrukce příkazů s operátory IN a BETWEEN:

SELECT Titul, Prijmeni FROM Ucitel WHERE Titul IN ('Doc.','Prof.')