510 likes | 642 Views
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.
E N D
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 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ů.
DBS – Databázové systémy SELECT – jednořádkové funkce, matematické 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
DBS – Databázové systémy SELECT – jednořádkové funkce, matematické 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
DBS – Databázové systémy SELECT – jednořádkové funkce, matematické 2. Funkce Ceiling(n) – vrací nejmenší celé číslo, které je větší než parametr n: selectceiling(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
DBS – Databázové systémy SELECT – jednořádkové funkce, matematické 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
DBS – Databázové systémy SELECT – jednořádkové funkce, matematické 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
DBS – Databázové systémy SELECT – jednořádkové funkce, textové 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
DBS – Databázové systémy SELECT – jednořádkové funkce, textové 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 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' Výsledek: kriz@fbm.vutbr.cz
DBS – Databázové systémy SELECT – jednořádkové funkce, textové 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á
DBS – Databázové systémy SELECT – jednořádkové funkce, textové 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říklad select right(rtrim ('Lenka Smolíková Niebauerová '),11); as ‘Výsledek’ Výsledek Niebauerová
DBS – Databázové systémy SELECT – jednořádkové funkce, textové 15. Funkce Replace(řetězec1, řetězec2, řetězec3) – vrátí nový řetězecvytvoř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ýsledek Studenti ŘEP čekali
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas 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. Year Quarter Month Dayofyear Day Week Weekday Hour Minute Second Millisecond
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas Pro manipulaci s datem a časem se používají speciální funkce • 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
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas 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
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas 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
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas 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
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas 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
DBS – Databázové systémy SELECT – jednořádkové funkce, datum a čas
DBS – Databázové systémy SELECT SELECT - základní syntaxe příkazu Zá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.Syntaxe SELECT (názvy sloupců) FROM (název tabulky) Příklad 1: SELECT * FROM Ucitel
DBS – Databázové systémy SELECT SELECT - výpis vybraných sloupců tabulky Zá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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT SELECT - podmínky, operátory Podmí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 < 300 Syntaxe: 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
DBS – Databázové systémy SELECT • Operátory • Pod 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)
DBS – Databázové systémy SELECT SELECT - aritmetické operátory Aritmetické 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
DBS – Databázové systémy SELECT SELECT - aritmetické operátory Operá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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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'
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT SELECT - znakové operátory Př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%‚
DBS – Databázové systémy SELECT 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 ' _ '.
DBS – Databázové systémy SELECT 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.
DBS – Databázové systémy SELECT SELECT - logické operátory Logické 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.
DBS – Databázové systémy SELECT 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.
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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.
DBS – Databázové systémy SELECT 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.
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT SELECT – množinové operátory Pokud dotaz přepíšeme na tvar: SELECT Prijmeni FROM Ucitel_fpUNION ALL SELECT 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ů.
DBS – Databázové systémy SELECT 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
DBS – Databázové systémy SELECT 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)