Databázové systémy Přednáška č. 6
Jazyk SQL Databázový jazyk by měl uživateli umožnit: Vytvoření struktury databáze Vkládání, modifikaci a odstranění dat z databáze Realizaci dotazů Musí realizovat tyto úkoly s minimální námahou pro uživatele
Jazyk SQL Structured Query Language (SQL) Je neprocedurální jazyk – specifikuje pouze co potřebujeme získat a ne jak to získat Má 2 hlavní komponenty: DDL pro definování datové struktury DML pro vyhledávání a úpravu dat Neobsahuje řídící příkazy – ty musí být implementovány v rámci programovacího jazyka nebo interaktivně uživatelem
Jazyk SQL Historie jazyka SQL 1974 – D. Chamberlin definoval jazyka zvaný „Structured English Query Language“ or SEQUEL 1976 – definována revidovaná verze SEQUEL/2 – jméno se změnilo na SQL IBM implementovala prototyp DBMS – System R, založený na SEQUEL/2 Konec 70tých let – ORACLE s prvním komerčním RDBMS založeným na SQL
Jazyk SQL 1987 – ANSI a ISO – první standard SQL 1989 – ISO publikoval dodatek, který definoval ‘Integrity Enhancement Feature’ 1992 – první velká revize ISO standardu – SQL2 resp. SQL/92 SQL is Federal Information Processing Standard (FIPS) – všechny databáze pro federální vládu musí splňovat standard SQL
Zaměstnanec N 1 N kontroluje Pracuje v Garantuje N N N viděl 1 N Nemovitost Klient N Má pronajatu Pobočka 1 N N 1 Vlastní Nabízí 1 Vlastník
Jazyk SQL – příkaz SELECT SELECT [DISTINCT | ALL] {* | seznam_výstupních_sloupců [AS nové_jméno]} FROM seznam_tabulek [alias] [...] [WHERE podmínka_řádku] [GROUP BY seznam_výrazů_seskupení] [HAVING podmínka_skupiny] [ORDER BY seznam_kritérií_třídění ASC |DESC]
Jazyk SQL – příkaz SELECT definice sloupců ve výsledku pomocí AS se specifikuje název záhlaví sloupců podle použitého modifikátoru budou z výsledku vyloučeny duplicitní řádky (DISTINCT), nebo jsou vybrány všechny (ALL)
Jazyk SQL – příkaz SELECT FROM seznam tabulek, ze kterých jsou získávány požadované informace při definici dotazu není možné použít sloupce z jiných než ze zde uvedených tabulek pomocí klíčového slova ALIAS (nepovinné) lze pojmenovat vyjmenované tabulky zástupným jménem, na které se potom odkazujeme v dalším zpracování
Jazyk SQL – příkaz SELECT WHERE omezení zpracovávaných řádků pomocí podmínky (tj. filtrace řádků) pouze řádky, pro které je tato podmínky splněna jsou dále zpracovávány GROUP BY definice výrazů, podle kterých jsou řádky seskupeny vytváří skupiny řádků se stejnou hodnotou v daném sloupci
Jazyk SQL – příkaz SELECT HAVING omezení souhrnných řádků definovaných pomocí GROUP BY ve výsledku – pouze souhrnné řádky, pro které je zde uvedená podmínky splněna jsou zařazeny do výsledku filtruje skupiny podle dané podmínky
Jazyk SQL – příkaz SELECT ORDER BY setřídění řádků ve výsledku řádky mohou být setříděny vzestupně (ASC) nebo sestupně (DESC) implicitně jsou řádky setříděny vzestupně (ASC se nemusí zadávat)
Jazyk SQL – příkaz SELECT Všechny příklady se vztahují k databázi realitní kanceláře uvedené na snímku 6 Zobraz všechny informace o všech zaměstnancích: SELECT c_zam, jmeno, prijmeni, adresa, tel_c, prac_zar, rod_c, c_pob, plat FROM zaměstnanec nebo alternativně SELECT * FROM zaměstnanec znak * se používá jako zkratka pro ‘všechny sloupce’
Jazyk SQL – příkaz SELECT Zobrazte seznam pracovníků a jejich platy: SELECT jmeno, prijmeni, plat FROM zamestnanec Zobrazte čísla nemovitostí, které si některý klient prohlédl: SELECT c_nem FROM prohlidka SELECT DISTINCT(c_nem) FROM prohlidka DISTINCT eliminuje duplicity
Jazyk SQL – příkaz SELECT Vypište seznam pracovníků a pro každého uveďte výši ročního platu: SELECT jmeno, prijmeni, plat*12 AS rocni_plat FROM zamestnanec Vypište všechny informace o zaměstnancích s platem větším jak 10000 Kč: SELECT * FROM zamestnanec WHERE plat > 10000
Jazyk SQL – příkaz SELECT Zobraz údaje o pobočkách se sídlem v Praze nebo v Brně: SELECT * FROM pobocka WHERE mesto=‘Praha’ OR mesto=‘Brno’
Jazyk SQL – příkaz SELECT Zobrazte údaje o zaměstnancích s platem v rozmezí 9000 – 12000 Kč: SELECT * FROM zamestnanec WHERE plat BETWEEN 9000 AND 12000 BETWEEN zahrnuje i krajní body intervalu, lze používat i negaci NOT BETWENN. BETWEEN lze vyjádřit následovně: WHERE plat>=9000 AND plat <=12000
Jazyk SQL – příkaz SELECT Zobraz údaje o všech managerech a tajemnících: SELECT * FROM zamestnanec WHERE prac_zar IN (‘manager’, ‘tajemnik’) Je možno použít i negaci (NOT IN). IN lze vyjádřit následovně: WHERE prac_zar=‘manager’ OR prac_zar=‘tajemnik’
Jazyk SQL – příkaz SELECT Najdi zaměstnance, kteří mají v adrese Ostravu: SELECT * FROM zamestnanec WHERE adresa LIKE ‘%Ostrava%’ SQL má dva speciální symboly: % : posloupnost nula nebo více znaků _ : libovolný jeden znak LIKE ‘%Ostrava%’ znamená posloupnost znaků libovolné délky, která obsahuje řetězec “Ostrava”
Jazyk SQL – příkaz SELECT Zobraz detaily všech prohlídek, kde není zaznamenána žádná poznámka: SELECT * FROM prohlidka WHERE poznamka IS NULL Zobraz seznam zaměstnanců dle výše platu, od nejvyššího: SELECT jmeno, prijmeni, plat FROM zamestnanec ORDER BY plat DESC
Jazyk SQL – příkaz SELECT Seřaď nemovitosti dle typu a výše nájmu: SELECT * FROM nemovitost ORDER BY typ, nájem