Materiál ke cvičením - SQL



Podobné dokumenty
Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databázové systémy. Cvičení 6: SQL

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Databáze I. Přednáška 4

KIV/ZIS cvičení 5. Tomáš Potužák

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

6. SQL složitější dotazy, QBE

MS Access Dotazy SQL

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy I

Databázové systémy Cvičení 5.2

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Databázové systémy Cvičení 5.3

Kapitola 4: SQL. Základní struktura

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databáze SQL SELECT. David Hoksza

KIV/ZIS - SELECT, opakování

Úvod do databázových systémů

Informační systémy ve zdravotnictví. 10. cvičení

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

- sloupcové integritní omezení

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databázových systémů 3. cvičení

Úvod do databázových systémů

Jazyk SQL databáze SQLite. připravil ing. petr polách

Databázové systémy Cvičení 5

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databáze I. Přednáška 6

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

KIV/ZIS cvičení 6. Tomáš Potužák

Úvod do databázových systémů

Jazyk SQL slajdy k přednášce NDBI001

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Jazyk SQL 3 - DML, DDL, TCL, DCL

1. Relační databázový model

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Databázové systémy a SQL

6. blok část B Vnořené dotazy

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Dotazování v relačním modelu a SQL

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Structured Query Language SQL

PG 9.5 novinky ve vývoji aplikací

Úvod do databázových systémů

Databázové systémy I

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Databázové systémy a SQL

Transformace konceptuálního modelu na relační

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Základní přehled SQL příkazů

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Semestrální práce z DAS2 a WWW

Konceptuální modelování a SQL

Řešené příklady STUDENT(RČ, JMÉNO, SPECIALIZACE) PŘEDMĚT(KÓD, NÁZEV, SYLLABUS, GARANT) ZÁPIS(RČ, KÓD, SEMESTR, ZNÁMKA)

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Databázové systémy a SQL

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Sada 1 - PHP. 14. Úvod do jazyka SQL

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Text úlohy. Systémový katalog (DICTIONARY):

DATABÁZE TABULKY. Nastavení aktivní databáze. Výpis seznamu tabulek v databázi. Vytvoření tabulky. Výpis popisu tabulky.

Operátory ROLLUP a CUBE

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

5. blok Souhrnné a skupinové dotazy

Jazyk S Q L základy, příkazy pro práci s daty

4IT218 Databáze. 4IT218 Databáze

8.2 Používání a tvorba databází

Informační systémy ve zdravotnictví. 6. cvičení

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Internetová filmová databáze IFDB

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Databáze I. Přednáška 7

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

12. blok Pokročilé konstrukce SQL dotazů - část II

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

MySQL manuál. Copyright: Adam Jun Stránky manuálu:

DB1 cvičení 4 spojení tabulek a složitější dotazy

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Oracle XML DB. Tomáš Nykodým

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Databáze I. 1. přednáška. Helena Palovská

Úvod do databázových systémů

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Transkript:

Materiál ke cvičením - 1. Stručná syntaxe vybraných příkazů jazyka (detailní syntaxe příkazů je uvedena on-line manuálech přístupných z prostředí sítě VŠE) SELECT výběr a zobrazení hodnot z databáze: SELECT [ALL DISTINCT] {* {název sloupce výraz } [AS název] [,název sloupce [AS název],...] } FROM klausule [WHERE klausule] [GROUP BY klausule] [HAVING klausule] [ORDER BY klausule] FROM: název tabulky resp. view (tabulek) pro výběr klausule = {název-relace [alias-název]} [,..] WHERE: jedna či více výběrových podmínek spojených logickými operátory AND resp. OR : klausule = výraz1 relační-operátor výraz2 test (ne)rovnosti hodnoty výrazu1 a výrazu2 = výraz1 [NOT] BETWEEN výraz2 AND výraz3 test na interval vymezený hodnotami výrazů 2 a 3 = název-sloupce IS [NOT] NULL test na (ne)určenou hodnotu = název-atributu [NOT] LIKE "řetězec" [ESCAPE "znak"] test (ne)existence řetězce = výraz [NOT] IN {výčet-hodnot vnořený příkaz SELECT} test (ne)rovnosti výrazu s hodnotami z výčtu-hodnot či hodnotami vrácenými vnořeným příkazem SELECT, hodnoty ve výčtu oddělit čárkou, znakové hodnoty uvést v apostrofech - GROUP BY: určení skupiny a případné výběrové podmínky pro skupinu klausule = výčet-sloupců [HAVING výběrová podmínka] - ORDER BY: určení kritéria pro řazení řádků výstupní tabulky klausule = {{výčet-sloupců poř.číslo} [ASC DESC]} [,...] Agregační funkce - odvození agregovaných hodnot: AVG ([DISTINCT] x) průměr hodnot výrazu x MAX ([DISTINCT] x) maximální hodnota výrazu x MIN ([DISTINCT] x) miminální hodnota výrazu x SUM ([DISTINCT] x) součet hodnot výrazu x COUNT (DISTINCT x) počet různých hodnot atributu x COUNT(*) počet všech hodnot klausule DISTINCT eliminuje před odvozením duplicitní hodnoty výrazu x KIT VŠE 1

Syntaxe vnořených příkazů SELECT:...WHERE výraz [NOT] IN (vnořený SELECT příkaz)...where [NOT] EXISTS (vnořený SELECT příkaz)...where výraz operátor {ALL ANY SOME} (vnořený SELECT příkaz) Syntaxe příkazu SELECT pro sjednocení (UNION): SELECT příkaz UNION [ALL] SELECT příkaz... ORDER BY celé číslo [ASC DESC] INSERT vložení nového řádku do definované tabulky: INSERT INTO název-tabulky [(výčet-sloupců)] {{VALUES (výčet-hodnot)} SELECTpříkaz} UPDATE aktualizace hodnot v řádcích: UPDATE název-tabulky SET název-sloupce = výraz [,...] [WHERE klausule] 1) 1) viz klausule Where v popisu syntaxe SELECT příkazu DELETE zrušení řádků v tabulce: DELETE FROM název-tabulky [WHERE klausule] CREATE TABLE definice struktury tabulky: CREATE TABLE název-tabulky ({název-sloupce datový-typ [NOT NULL [UNIQUE] ] }[,...]) Přípustné datové typy v databázovém systému ORACLE: CHAR (n) Řetězec znaků o pevné délce n VARCHAR2(n) Řetězec znaků o proměnlivé délce. Maximální délka je n. NUMBER(m,n) LONG DATE RAW (n) LONGRAW ROWID Číslo s m číslicemi celkem a n číslicemi po desetinné tečce Řetězec znaků proměnné délky Údaj pevné délky obsahující datum a čas Binární data proměnné délky se zadanou maximální délkou a, vážící se k jednomu řádku tabulky Binární data proměnné délky vážící se k jednomu řádku tabulky (bez deklarace omezení délky) Binární údaj představující adresu řádku Mapování datových typů databázového systému ORACLE na datové typy definované ANSI ANSI CHARACTER (n), CHAR (n) NUMERIC(m,n), DECIMAL(m,n), DEC(m,n) INTEGER, INT, SMALLINT FLOAT(n), REAL, DOUBLE PRECISION CHARACTER VARYING(n), CHAR VARYING(n) ORACLE CHAR (n) NUMBER(m,n) NUMBER(38) NUMBER VARCHAR2(n) KIT VŠE 2

ALTER TABLE změna struktury tabulky (přidání či zrušení sloupce) ALTER TABLE název-tabulky {ADD COLUMN název-sloupce datový_typ [NOT NULL [UNIQUE]] DROP COLUMN název-sloupce} DROP TABLE zrušení tabulky: DROP TABLE název-tabulky GRANT přidělení přístupového práva pro práci s tabulkou: GRANT {ALL [PRIVILEGES] {SELECT INSERT DELETE {UPDATE [(výčet-sloupců)]} }[,..]} ON název-tabulky TO {výčet-uživatelů PUBLIC} [WITH GRANT OPTION] REVOKE odejmutí přístupového práva pro práci s tabulkou: REVOKE {ALL [PRIVILEGES] {SELECT INSERT DELETE {UPDATE [(výčetsloupců)]} }[,..]} ON název-tabulky FROM {výčet-uživatelů PUBLIC} CREATE INDEX definice indexu: CREATE [UNIQUE] INDEX název-indexu ON název-tabulky (výčet-sloupců) DROP INDEX zrušení indexu DROP INDEX název-indexu 2. Způsob přihlášení V Menu na ploše složka ORACLE / Oracle - OraHome92/ Application Development /program Worksheet Uživatelské jméno: heslo: Service: student sql oracle9 KIT VŠE 3

3. Zadání příkladů k procvičení jazyka : Provádějte "simulaci" zadávaných dotazů. Zobrazený výsledek každého dotazu porovnejte s výsledkem, který si sami odvodíte z výpisu obsahu cvičné databáze v tomto materiálu. Jen tak se přesvědčíte, že jste dotaz formulovali správně! Select* from zam; Select* from oddel; Select distinct titul from zam; select distinct os_cis, 'pan/paní', titul, jmeno from zam; 1. Zjistěte, zda obsah všech definovaných tabulek koresponduje s předloženým výpisem. Případné odchylky si ve výpisu opravte. 2. Provedťe kartézský součin tabulek zaměstnanců a úkolů (nemá vypovídací schopnost). Zjistěte: 4. Jména a funkce všech zaměstnanců. 5. Názvy oddělení dané firmy. 6. Popisy všech uložených úkolů. 7. V jakých možných funkcích pracují zaměstnanci dané firmy (vypište tak, aby se funkce ve výpisu neopakovaly). 8. Jaké se vyskytují tituly zaměstnanců (vyypište tak, aby se tituly ve výpisu neopakovaly). 9. Pro každého zaměstnance měsíční a roční výši platu. 1. Výši platu každého zaměstnance v případě odměny ve výši 6,- 11. Pro každého zaměstnance stávající výši platu a výši platu v případě 2% valorizace. 12. Vypište obsah tabulky zaměstnanců tak, aby měl následující formu: Pan TITUL JMENO pracuje v oddělení č.cislo ODDELENI 13. Pro všechny zaměstnance výši denní mzdy (počítejte s 22 pracovními dny). 14. Výši ročního platu každého ze zaměstnanců, v případě, že dostane každý měsíc valorizaci 1,- Kčs. 15. Výši ročního platu každého ze zaměstnanců, v případě, že dostane 13. plat ve výši 5,- Kčs. 16. Platy vyplácené v jednotlivých odděleních (tak, aby se ve výpisu neopakovaly). Select distinct plat, cis_odd from zam order by cis_odd; 17. Pro každého zaměstnance název oddělení, ve kterém pracuje. Select os_cis, jmeno, oddel.nazev from zam, oddel where zam.cis_odd=oddel.cis_odd; 18. Pro každý úkol jméno zaměstnance jemuž byl uložen včetně čísla oddělení. Select ukoly.popis, zam.jmeno, zam.cis_odd from ukoly, zam where zam.os_cis=ukoly.os_cis; 19. Pro každé oddělení jméno jeho vedoucího (šéfa). Select oddel.nazev, zam.jmeno from zam, oddel where oddel.sef=zam.os_cis;-blbe Select oddel.nazev, zam.jmeno, zam.cisl from oddel left outer join zam on where oddel.sef=zam.os_cis; 2. Pro každý úkol název oddělení, jehož zaměstnanci byl zadán. Select popis, nazev from ukoly, oddel,zam where ((ukoly.os_cis=zam.os_cis) and (zam.cis_odd=oddel.cis_odd)); 21. Pro každého zaměstnance popisy úkolů které mu byly zadány. Select zam.jmeno, ukoly.popis from zam, ukoly where zam.os_cis=ukoly.os_cis; 22. Pro každé oddělení (název) popisy úkolů které byly uloženy jeho zaměstnancům. Select oddel.nazev,ukoly.popis from oddel,ukoly,zam where oddel.cis_odd=zam.cis_odd and zam.os_cis=ukoly.os_cis; KIT VŠE 4

Select oddel.cis_odd, nazev, popis From oddel, (Select zam.os_cis, zam.cis_odd, popis From zam, ukoly Where zam.os_cis=ukoly.os_cis) prac Where oddel.cis_odd=prac.cis_odd (+); Select oddel.cis_odd, nazev, popis From oddel left outer Join (select zam.os_cis, zam.cis_odd, popis from zam, ukoly where zam.os_cis=ukoly.os.cis) prac on oddel.cis_odd=prac.cis_odd; 23. Pro každý uložený úkol jméno zaměstnance, jemuž byl uložen a název oddělení, ve kterém pracuje. Select oddel.nazev,ukoly.popis from oddel,ukoly,zam where oddel.cis_odd=zam.cis_odd and zam.os_cis=ukoly.os_cis; 24. Jména zaměstnanců, kteří mají uložený nějaký úkol. Select zam.jmeno,ukoly.popis from zam,ukoly where zam.os_cis=ukoly.os_cis; 25. Názvy oddělení, do kterých byl přidělen nějaký úkol. Select oddel.nazev, 'který úkol přidělen', ukoly.popis from oddel,zam,ukoly where zam.cis_odd=oddel.cis_odd and ukoly.os_cis=zam.os_cis; 26. Popisy úkolů, které byly přiděleny pracovníkovi č.1. Select ukoly.popis,zam.jmeno from ukoly,zam where ukoly.os_cis=1 and zam.os_cis=ukoly.os_cis; 27. V kterém oddělení (číslo) a jako co (funkce) pracuje STRNAD. Select zam.cis_odd, oddel.nazev, zam.fce from zam, oddel where zam.jmeno='strnad' and zam.cis_odd=oddel.cis_odd; 28. Jména zaměstnanců, kteří zastávají funkci BOSS nebo REDITEL. Select zam.jmeno from zam where zam.fce='boss' or zam.fce='reditel'; 29. Čísla a jména zaměstnanců z 2. a 4. oddělení. select zam.os_cis, zam.jmeno from zam where zam.cis_odd = 2 or zam.cis_odd = 4; 3. Přehled všech zaměstnanců, kteří nezastávají funkci BOSS. select jmeno from zam where fce not like 'BOSS'; 31. Jména zaměstnanců ze 3. oddělení s platem nad 6,-. select jmeno from zam where cis_odd = 3 and plat > 6; 32. Jména zaměstnanců s titulem ING z 2 a 6 oddělení. select jmeno from zam where (cis_odd = 2 or cis_odd = 6) and titul like 'ING'; 33. Čísla a jména zaměstnanců, kteří mají plat pod 72,- resp. zastávají funkci BOSS a mají plat pod 9. select zam.os_cis, zam.jmeno from zam where zam.plat < 72 or (zam.fce = 'BOSS' and zam.plat <9); 34. Jména a funkce zaměstnanců s platem v rozmezí 9-12,- Kčs. select zam.jmeno, zam.fce from zam where zam.plat between 9 and 12; 35. Jména zaměstnanců z oddělení 2,3,4,5,6,7. Select jmeno, cis_odd from zam where cis_odd between 2 and 7; 36. Jména zaměstnanců z oddělení 2,4,6,8,1. Select jmeno, cis_odd from zam where cis_odd in (2,4,6,8,1); 37. Jména zaměstnanců zastávajících funkci MATEMATIK, TECHNIK, PROJEKTANT nebo SEF TECHNIK. select zam.jmeno from zam where zam.fce = 'MATEMATIK' OR zam.fce = 'TECHNIK' OR zam.fce = 'PROJEKTANT' OR zam.fce = 'SEF TECHNIK'; 38. Jména a platy zaměstnanců, kteří mají titul. KIT VŠE 5

select zam.jmeno, zam.plat from zam where zam.titul is not null; 39. Jakou funkci zastávají zaměstnanci s příjmením končícím na -OVA. select zam.fce from zam where zam.jmeno like '%OVA'; 4. Čísla pracovníků, kterým byl přidělen nějaký úkol související s programem. Select zam.os_cis, zam.jmeno, ukoly.popis from zam, ukoly where ukoly.os_cis=zam.os_cis and ukoly.popis like '%PROGRAM%'; 41. Jména zaměstnanců, jejichž roční plat bude po 1% valorizaci vyšší než 9,-. Select zam.jmeno from zam where zam.plat*1.1>9; 42. Jména zaměstnanců z oddělení PROJEKCE. Select zam.jmeno from zam, oddel where zam.cis_odd=oddel.cis_odd and oddel.nazev='projekce'; 43. Popisy úkolů, které byly přiděleny zaměstnancům s titulem. Select ukoly.popis from zam, ukoly where ukoly.os_cis=zam.os_cis and zam.titul is not null; 44. Jména zaměstnanců z oddělení PROGRAMOVANI, kterým byl přidělen nějaký úkol. Select zam.jmeno from ukoly, oddel, zam where zam.cis_odd=oddel.cis_odd and oddel.nazev='programovani' and zam.os_cis=ukoly.os_cis and ukoly.os_cis is not null; 45. Jméno vedoucího oddělení PROVOZ POCITACE. Select distinct zam.os_cis, zam.jmeno from ukoly, oddel, zam where oddel.nazev='provoz POCITACE' and oddel.sef=zam.os_cis; Pořiďte přehled: 46. Zaměstnanců seřazených abecedně podle jména. Select zam.jmeno from zam order by jmeno; 47. Zaměstnanců (osobní číslo, jméno, titul) seřazených dle titulů. Select zam.os_cis, zam.jmeno, zam.titul from zam order by titul; 48. Zaměstnanců (číslo oddělení, plat, jméno) seřazený podle oddělení vzestupně a v rámci oddělení dle platu sestupně. Select zam.cis_odd, zam.plat, zam.jmeno from zam order by cis_odd asc, zam.plat desc; 49. Zaměstnanců (jméno, plat po 1% valorizaci) z 3. oddělení seřazený podle valorizovaného platu sestupně. Select zam.jmeno, zam.plat*1.1 from zam where zam.cis_odd=3 order by plat*1.1 desc; 5. Úkolů (číslo úkolu, popis, jméno zaměstnance) seřazený dle názvů oddělení do kterých byly přiděleny. Select ukoly.cis_uk, ukoly.popis, zam.jmeno from ukoly, oddel, zam where zam.os_cis=ukoly.os_cis and zam.cis_odd=oddel.cis_odd order by oddel.nazev; 51. Maximální a minimální výši platu. Select min(plat), max(plat) from zam; 52. Celkový počet zaměstnanců a celkovou částku vyplácenou na platech měsíčně a ročně. Select count(*), sum (plat)*12 from zam; 53. Průměrný měsíční a roční plat na jednoho zaměstnance. Select avg(plat), 12*avg(plat) from zam; 54. Počet oddělení (pokuste se jednou zjistit z tabulky oddělení, po druhé z tabulky zaměstnanců). Select count(distinct cis_odd) from zam; Select count(*) from oddel; 55. Průměrný plat zaměstnanců z 3. oddělení. Select avg(plat) from zam where cis_odd=3; 56. Počet zaměstnanců ve 2. oddělení a roční částku jim vyplácenou po1% valorizaci platů. select count(os_cis),sum(zam.plat*1.1)*12 from zam where zam.cis_odd=2; 57. Kolik zaměstnanců má plat nad 12. select count(zam.os_cis) from zam where zam.plat <12; 58. Maximální plat ve 3. oddělení. select max(plat) from zam where cis_odd =3; 59. Kolik je ve druhém oddělení inženýrů. KIT VŠE 6

select count(os_cis) from zam where cis_odd = 2 and titul = 'ING'; 6. Kolik je zaměstnanců s příjmením od K. select count(os_cis) from zam where jmeno like 'K%'; 61. Kolik zaměstnanců vykonává funkci boss a jaký je minimální plat v této funkci. select count(os_cis), min(plat) from zam where fce = 'BOSS'; 62. Kolik zaměstnanců má nějaký titul. select count(os_cis) from zam where titul is not null; 63. Počet programátorů ve 3. oddělení. select count(os_cis) from zam where fce = 'PROGRAMATOR' and cis_odd = 3; 64. Nejnižší plat v oddělení Projekce. select min(zam.plat) from zam,oddel where oddel.nazev = 'PROJEKCE'; select min(zam.plat) from zam join oddel on oddel.nazev like 65. Počet úkolů přidělených zaměstnanci Cervenému (víme, že je jediný toho jména). Select count (cis_uk) from ukoly, zam where zam.jmeno='cerveny' and zam.os_cis=ukoly.os_cis; 66. Pro každé oddělení (číslo) počet zaměstnanců. select oddel.cis_odd, count(os_cis) from oddel left outer join zam on oddel.cis_odd = zam.cis_oddd group by oddel.cis_odd; 67. Pro každé oddělení (číslo) průměrný měsíční a roční plat. select oddel.cis_odd, avg(zam.plat), avg(zam.plat)*12 from oddel left outer join zam on oddel.cis_odd = zam.cis_odd group by oddel.cis_odd; 68. Pro každé oddělení (číslo) počet inženýrů. select oddel.cis_odd, count(zam.os_cis) from oddel left outer join zam on oddel.cis_odd = zam.cis_odd and zam.titul = 'ING' group by oddel.cis_odd; 69. Pro každé oddělení (číslo) počet zaměstnanců bez titulu. select oddel.cis_odd, count(zam.os_cis) from oddel left outer join zam on oddel.cis_odd = zam.cis_odd and zam.titul is null group by oddel.cis_odd; 7. Pro každé oddělení (číslo) počet zaměstnanců vykonávajících jednotlivé funkce (název). Select cis_odd, fce, count(os_cis) from zam group by cis_odd, fce; 71. Maximální výši platu v jednotlivých funkcích (název) v rámci jednotlivých oddělení (číslo). Select cis_odd, fce, max(plat) from zam group by cis_odd, fce; 72. Pro každé oddělení maximální plat. Výstup seřaďte dle zjištěného max. platu sestupně. Select cis_odd, max(plat) from zam group by cis_odd order by max(plat) desc; Pokud za order by dam cislo, znamena to cislo sloupecku, nemusim uvadet cele jmeno, jen poradove cislo sloupce Nebo ho muzu přejmenovat cis_odd as oddil group by oddil desc; 73. Průměrné platy v jednotlivých funkcích (název). Seřaďte vzestupně. Select fce, avg(plat) from zam group by fce order by 2; 74. Počet zaměstnanců s platem nad 9 v každém oddělení. Seřaďte dle tohoto počtu sestupně. Select cis_odd, count(os_cis) from zam where plat>9 group by cis_odd order by 2; 75. Pro každé oddělení (číslo) počet zaměstnanců s titulem, kteří mají plat pod 12,-. Přehled seřaďte dle zjištěného počtu sestupně. Select cis_odd, count(os_cis) from zam where plat<12 and titul is not null group by cis_odd order by count(os_cis); 76. Jména zaměstnanců s názvem oddělení a jménem vedoucího oddělení. Select zam.os_cis, zam.jmeno, oddel.nazev, sef.jmeno from zam, zam sef, oddel where sef.os_cis=oddel.sef and zam.cis_odd=oddel.cis_odd order by zam.os_cis; 77. Jména zaměstnanců se jménem bezprostředně nadřízeného. Select zam.os_cis, zam.jmeno, oddel.nazev, nadriz.jmeno from zam, zam nadriz, oddel where zam.nadr=nadriz.os_cis and zam.cis_odd=oddel.cis_odd order by zam.os_cis; 78. Jména zaměstnanců s platem stejným jako má zaměstnanec DLOUHY. Select zam.jmeno, zam.plat from zam, zam Dlouhy where Dlouhy.plat=zam.plat and Dlouhy.jmeno='DLOUHY'; 79. Jména zaměstnanců s platem vyšším než má jejich bezprostředně nadřízený. KIT VŠE 7

Select zam.jmeno, zam.plat from zam, zam Nadr where zam.nadr=nadr.os_cis and Nadr.plat<zam.plat; 8. Jména zaměstnanců se jménem bezprostředně nadřízeného a jménem vedoucího oddělení ve kterém pracují. Select zam.os_cis, zam.jmeno, nadr.jmeno, sef.jmeno from zam, zam nadr, zam sef, oddel where zam.nadr=nadr.os_cis and zam.cis_odd=oddel.cis_odd and sef.os_cis=oddel.sef order by zam.os_cis; 81. Průměrné platy pro jednotlivá oddělení (číslo, název). Výpis seřaď te dle výše platu sestupně. Select oddel.cis_odd, oddel.nazev, avg(zam.plat) from zam, oddel where zam.cis_odd=oddel.cis_odd group by oddel.cis_odd, oddel.nazev order by avg(zam.plat) desc; 82. Pro každé oddělení (název) počet zaměstnanců s titulem, kteří mají plat pod 12,-. Seřaďte dle zjištěného počtu. Select oddel.nazev, count(os_cis) as počet from oddel left outer join zam on zam.cis_odd=oddel.cis_odd and titul is not null and zam.plat<12 group by oddel.nazev order by count(os_cis); 83. Průměrné platy pro každou funkci každého oddělení (číslo,název). Seřaďte abecedně dle názvu oddělení. Select oddel.nazev, oddel.cis_odd, zam.fce, avg(zam.plat), count(zam.os_cis) from oddel left outer join zam on zam.cis_odd=oddel.cis_odd group by oddel.nazev, oddel.cis_odd, zam.fce order by oddel.nazev; 84. Jména zaměstnanců s počtem přidělených úkolů. Seřaďte abecedně. Select zam.os_cis, zam.jmeno, count(cis_uk) from zam left outer join ukoly on zam.os_cis=ukoly.os_cis group by zam.os_cis, zam.jmeno order by zam.jmeno; 85. Přehled funkcí (název) vykonávaných v jednotlivých odděleních (číslo,název) s počtem zaměstnanců, kteří je vykonávají. Select zam.fce, oddel.cis_odd, oddel.nazev, count(os_cis) from zam left join oddel on oddel.cis_odd=zam.cis_odd group by zam.fce, oddel.cis_odd, oddel.nazev order by oddel.cis_odd; 86. Názvy oddělení s počtem přidělených úkolů. select oddel.nazev, count(zam.os_cis) from oddel left outer join (zam left outer join ukoly on ukoly.os_cis = zam.os_cis) on oddel.cis_odd = zam.cis_odd group by oddel.nazev; 87. Počty zaměstnanců bezprostředně podřízených jednotlivým zaměstnancům (jméno). Seřaďte abecedně. Select zam.os_cis, zam.jmeno, count(zam.os_cis) as PocetPodrizenych from zam left join zam nadr on zam.os_cis=nadr.nadr group by zam.os_cis, zam.jmeno order by zam.os_cis; 88. Jména vedoucích jednotlivých oddělení (název) s počtem pracovníků v oddělení. select sef.jmeno, oddel.nazev, count(zam.os_cis) from zam, oddel, zam sef where oddel.sef = sef.os_cis and zam.cis_odd = sef.cis_oddgroup by oddel.nazev, sef.jmeno; 89. Počty inženýrů v jednotlivých odděleních (název, jméno vedoucího). select oddel.nazev, sef.jmeno, count(zam.os_cis) from zam, oddel, zam sef where oddel.cis_odd = zam.cis_odd and oddel.sef = sef.os_cis and zam.titul = 'ING' group by oddel.nazev, sef.jmeno; 9. Počet zaměstnanců bezprostředně podřízených Zlatuskovi. Kolika inženýrům šéfuje Kocour? select count(zam.os_cis) from zam, zam sef where zam.nadr = sef.os_cis and sef.jmeno like 'ZLATUSKA'; select count(zam.os_cis) from zam, zam sef where zam.nadr = sef.os_cis and sef.jmeno like 'KOCOUR' and zam.titul like 'ING'; 91. Počet zaměstnanců pracujících v bufetu. Select count(zam.os_cis) from oddel left join zam on zam.cis_odd=oddel.cis_odd and oddel.nazev like 'BUFET'; 92. Čísla oddělení s více jak 5 zaměstnanci. Select oddel.cis_odd from oddel left join zam on oddel.cis_odd=zam.cis_odd group by oddel.cis_odd having count(zam.os_cis)>5; KIT VŠE 8

93. Oddělení, ve kterých se vyplácí měsíčně na platech přes 36,-. select oddel.nazev from oddel, zam where zam.cis_odd = oddel.cis_odd group by oddel.nazev having sum(zam.plat)>36; 94. Funkce, ve kterých je průměrný plat větší než 9,-. select zam.fce from zam group by zam.fce having avg(plat)>9; 95. Názvy oddělení, ve kterých je maximální plat menší než 12,-. select oddel.nazev from oddel, zam where oddel.cis_odd = zam.cis_odd group by oddel.nazev having max(zam.plat)<12; 96. Jména zaměstnanců, kteří mají přidělené alespoň dva úkoly. Select zam.os_cis, jmeno, count(cis_uk) as Pocet from zam, ukoly where zam.os_cis=ukoly.os_cis group by zam.os_cis, jmeno having count(cis_uk)>1; 97. Které funkce vykonávají více jak tři zaměstnanci. select zam.fce from zam group by zam.fce having count(zam.fce)>3; 98. Kteří zaměstnanci (jméno, funkce) mají alespoň tři bezprostředně podřízené zaměstnance. select zam.os_cis, zam.jmeno, zam.fce from zam, zam podr where podr.nadr = zam.os_cis group by zam.os_cis, zam.jmeno, zam.fce having count(zam.os_cis)>2; 99. Názvy oddělení, v kterých je více jak jeden BOSS. select oddel.nazev from oddel, zam where zam.cis_odd = oddel.cis_odd and zam.fce like 'BOSS' group by oddel.nazev having count(zam.fce) > 1; 1. Maximální plat v oddělení projekce select max(zam.plat) as maxim_plat from zam, oddel where zam.cis_odd = oddel.cis_odd and oddel.nazev like 'PROJEKCE';. 11. Názvy oddělení, ve kterých jsou alespoň dva lidé s titulem. select oddel.nazev from oddel, zam where oddel.cis_odd = zam.cis_odd and zam.titul is not null group by oddel.nazev having count(zam.fce) > 1; 12. Názvy oddělení, ve kterých jsou alespoň dva zaměstnanci s platem pod 9,-. select nazev from oddel, zam where oddel.cis_odd = zam.cis_odd and zam.plat <9 group by oddel.nazev having count(zam.plat) >1; 13. Názvy oddělení, ve kterých roční objem mezd překračuje 6,-. select nazev from oddel, zam where zam.cis_odd = oddel.cis_odd group by oddel.nazev having sum(zam.plat*12)>6; 14. Které funkce vykonává alespoň jeden inženýr. select fce from zam where zam.titul like 'ING' group by zam.fce having count(zam.titul)>1; 15. Čísla oddělení včetně jména vedoucího, ve kterých pracuje alespoň jeden inženýr. SELECT ODDEL.CIS_ODD, SEF.JMENO FROM ZAM, ZAM SEF, ODDEL WHERE SEF.OS_CIS = ODDEL.SEF AND ZAM.CIS_ODD = SEF.CIS_ODD AND ZAM.TITUL LIKE 'ING' GROUP BY ODDEL.CIS_ODD, SEF.JMENO HAVING COUNT(ZAM.OS_CIS)>1; 16. V kterých funkcích je průměrný plat zaměstnanců s titulem menší než 99,-. select zam.fce from zam where titul is not null group by zam.fce having avg(zam.plat)<99; 17. Funkce zaměstnanců, kterým byl přidělen více jak jeden úkol. select zam.fce,zam.os_cis from zam, ukoly where zam.os_cis = ukoly.os_cis group by zam.fce,zam.os_cis having count(ukoly.os_cis)>1; 18. Jména vedoucích, kteří mají do oddělení přidělen více jak jeden úkol. select zam.jmeno, zam.os_cis from zam, ukoly, oddel where oddel.sef = zam.os_cis and oddel.cis_odd = zam.cis_odd group by zam.jmeno,zam.os_cis having count(ukoly.os_cis)>1; 19. Kteří vedoucí (jméno) šéfují oddělení alespoň se 4 zaměstnanci. select sef.jmeno from zam, zam sef, oddel where sef.os_cis = oddel.sef and (sef.cis_odd = any (select zam.cis_odd from zam)) group by sef.jmeno having count(zam.os_cis)>3; 11. Kteří zaměstnanci mají bezprostředně podřízeného alespoň jednoho inženýra? select sef.jmeno, sef.os_cis from zam, zam sef where sef.os_cis = zam.nadr and sef.cis_odd = zam.cis_odd and zam.titul = 'ING' group by sef.jmeno, sef.os_cis having count(zam.os_cis)>; 111. Který zaměstnanec bez titulu má bezprostředně podřízené alespoň 3 zaměstnance? KIT VŠE 9

select sef.jmeno from zam, zam sef where zam.nadr = sef.os_cis and sef.cis_odd = zam.cis_odd and sef.titul is null group by sef.jmeno having count(zam.os_cis)>2; 113. Jména zaměstnanců z oddělení PROGRAMOVANI. select zam.jmeno from zam, oddel where zam.cis_odd = oddel.cis_odd and oddel.nazev = 'PROGRAMOVANI'; 114. Název oddělení, ve kterém pracuje zaměstnanec Obrovsky. select oddel.nazev from zam, oddel where oddel.cis_odd = zam.cis_odd and zam.jmeno = 'OBROVSKY'; 115. Jména zaměstnanců bezprostředně podřízených zaměstnanci Cechovi. select zam.jmeno from zam, zam sef where zam.nadr = sef.os_cis and sef.cis_odd = zam.cis_odd and sef.jmeno = 'CECH'; 116. Jména zaměstnanců ze 4. oddělení, kteří mají plat větší než Kadrnozkova. select zam.jmeno from zam where zam.cis_odd = 4 and zam.plat > (select plat from zam where zam.jmeno = 'KADRNOZKOVA'); 117. Jména zaměstnanců, jejichž plat je menší než plat průměrný. select zam.jmeno from zam where zam.plat < (select avg(plat) from zam); 118. Jméno zaměstnance s nejmenším platem. select zam.jmeno from zam where zam.plat = (select min(plat) from zam); 119. Oddělení, které má stejný počet zaměstnanců jako oddělení PROJEKCE. 12. Počet zaměstnanců s platem menším je plat průměrný. select count(zam.os_cis) from zam where zam.plat < (select avg(zam.plat) from zam); 121. Počet inženýrů, jejichž plat je menší než průměrný plat všech inženýrů. select count(os_cis) from zam where titul = 'ING' and plat < (select avg(plat) from zam where titul = 'ING'); 122. Seznam (jméno, oddělení, titul) zaměstnanců, kteří nemají titul a zaměstnanců BUFETu. select zam.jmeno, oddel.nazev, zam.titul from zam, oddel where zam.cis_odd = oddel.cis_odd and (titul is null or oddel.nazev = 'BUFET'); select jmeno, nazev, titul from zam join oddel using (cis_odd) where titul is null union select jmeno, nazev, titul from zam join oddel using (cis_odd) where nazev like 'BUFET'; 123. Seznam (jméno, plat, titul) zaměstnanců s titulem a všech s platem vyšším než celostátní průměr (duplicitní řádky nechte ve výsledku), výstup setřiďte dle osobního čísla zaměstnance. select zam.jmeno, zam.plat, zam.titul from zam where titul is not null or plat > (select avg(plat) from zam) order by os_cis; 124. Vypište seznam všech oddělení (číslo a název) a k nim počty zaměstnanců. Ve výstupu se musí objevit i oddělení s nulovým počtem zaměstnanců. select oddel.cis_odd, oddel.nazev, count(zam.os_cis) from oddel left outer join zam on zam.cis_odd = oddel.cis_odd group by oddel.cis_odd, oddel.nazev; 125. Vypište seznam všech zaměstnanců (osobní číslo a jméno) a k nim počet přidělených úkolů select zam.os_cis, zam.jmeno, count(ukoly.os_cis) from zam, ukoly where zam.os_cis = ukoly.os_cis group by zam.os_cis, zam.jmeno; 126. Vypište seznam zaměstnanců podřízených zaměstnanci s číslem 14 s uvedením úrovně jejich postavení v řídící hierarchii (ve výstupu uveďte osobní číslo, jméno, číslo nadřízeného, úroveň hierarchie). Výstup seřaďte dle úrovně hierarchie. select os_cis, jmeno, nadr, level from zam connect by prior os_cis = nadr start with nadr = 14 order by level; 127. Vypište údaje o a) všech systémových tabulkách (v katalogu), select * from sys.catalog; b) uživateli "student" přístupných tabulkách, select * from sys.catalog where tabletype like 'TABLE'; KIT VŠE 1

c) všech přiřazených přístupových právech. 128-DU. Vypište všechna oddělení a jejich název, v kterém nepracuje žádný docent. Select cis_odd, nazev from oddel where cis_odd not in (select distinct cis_odd from zam where titul like 'DOC'); 129. Zjistěte čísla a jména zaměstnanců, kteří nemají přidělený žádný úkol a mají plat větší než vedoucí jejich oddělení select zam.os_cis, zam.jmeno from zam, oddel, zam ved where zam.os_cis not in (select os_cis from ukoly) and zam.cis_odd = oddel.cis_odd and sef = ved.os_cis and zam.plat > ved.plat select zam.os_cis, zam.jmeno from zam join oddel on zam.cis_odd =oddel.cis_odd join zam ved on sef = ved.os_cis where zam.os_cis not in (select os_cis from ukol) and zam.plat > ved.plat NE!! select zam.os_cis, zam.jmeno from zam, ukoly where zam.os_cis = ukoly.os_cis and zam.plat > any (select zam.plat from zam, oddel where oddel.sef = zam.os_cis); Connect by konec, či následováník říká, odkud se má rozbalovat 13. Vypište čísla a jména zaměstnanců, kteří mají plat větší než je průměrný plat v jejich oddělení. select zam.os_cis, zam.jmeno from zam where zam.plat > (select avg(plat) from zam); 131. Vypište čísla a jména zaměstnanců, kteří neřeší žádný úkol. Select zam.os_cis, zam.jmeno from zam where zam.os_cis not in (select zam.os_cis from ukoly, zam where zam.os_cis=ukoly.os_cis); select os_cis, jmeno from zam where os_cis not in (select distinct os_cis from ukoly) 132. Čísla a jména zaměstnanců, kteří nemají podřízené. Select zam.os_cis, zam.jmeno from zam where zam.os_cis not in (select nadr from zam); Alter table nazev add constraint fk_ukolz_prideleni_zam foreign key( os_cis ) References zam( os_cis ) Constraint PK_ukoly primary key ( cis_uk ) KIT VŠE 11

4. Příklady na manipulaci s daty Přihlaste se pod uživatelem student1, heslo: sql, service: oracle9: 1. Vložte do tabulky zaměstnanců alespoň jeden řádek insert into zam values (65,'NOVAK','BOSS',54,'',1,6); 2. Zaktualizujte vložený řádek update zam set plat = plat*1.5 where zam.os_cis = 65; 3. Zrušte vložený a zaktualizovaný řádek delete zam where zam.os_cis = 65; 4. Vytvořte jedno aktualizovatelné view (pro konstrukci názvu použijte vaši emailovou adresu) create view xmarm33 as select * from zam; select* from xmarm33; 5. Vytvořte další view, které bude obsahovat čísla a jména zaměstnanců s názvy oddělení, ve kterých pracují a údaje o jim přidělených úkolech create view xmarm33_1 as select zam.os_cis,zam.jmeno,oddel.cis_odd, ukoly.os_cis as ukol from zam, oddel,ukoly where zam.cis_odd = oddel.cis_odd and zam.os_cis=ukoly.os_cis; 6. Nadefinujte práva pro update na view z úkolu 4 pro uživatele: student. Ověřte možnost aktualizace dat pod uživatelem student. grant update on zam to student; 7. Zrušte všechna vámi nadefinovaná view update xmarm33 set plat = plat*1.5 where XMARM33.fce='BOSS'; drop view xmarm33; 8. Vytvořte malou datovou základnu a prověřte možnosti DDL pro definici integritních omezení: a. Nakreslete datový model se dvěma entitami spojenými alespoň jedním vztahem 1:N. b. Vytvořte dvě nové základní tabulky (pro konstrukci názvu použijte vaši emailovou adresu), nadefinujte je tak, aby odpovídaly zachycené vazbě v datovém modelu. Nadefinujte příslušná integritní omezení vyplývající z modelu create table xmarm33podnik ("Zavod" integer, "Nazev_Zavodu" varchar(5), constraint PK_xmarm33podnik primary key ("Zavod") ); create table xmarm33vyrobek ("cislo_vyrobku" integer, "cislo_zavodu" integer, "nazev_vyrobku" varchar(5), constraint PK_xmarm33vyrobek primary key ("cislo_vyrobku") ); c. Vložte do každé tabulky alespoň 2 řádky. `insert into xmarm33podnik values (2,'Produkce_z_Kovu'); insert into xmarm33podnik values (4,'Vyroba skla'); d. Ověřte funkčnost nadefinovaných integritních omezení 9. Zrušte všechny vámi vytvořené relační tabulky a view (data i definici). 5. Obsah cvičné databáze: Relace ODDEL: CIS_ODD NAZEV SEF 1 PROJEKCE 6 2 KNIHOVNA 12 3 PROGRAMOVANI 2 4 BUFET 31 6 SKLAD 41 7 STB 8 PROVOZ POCITACE 51 KIT VŠE 12

1 REDITELSTVI 77 Význam atributů relace ODDEL: CIS_OD identifikační číslo oddělení D NAZEV název oddělení SEF osobní číslo pracovníka, který je vedoucím daného oddělení cizí klíč Relace UKOLY: CIS-UK POPIS OS-CIS DATUM 11 PRINEST POSTU 1 2/1/92 12 ZAPLATIT SLOZENKY 1 2/1/92 15 POSTAVIT PODRIZENE DO LATE 21 2/1/92 16 ROZDELIT PRACI NA PROJEKTU FIS 21 2/1/92 17 ROZDELIT PRACI NA PROJEKTU KIS 7 2/1/92 18 DOJIT PRO SALAM A PIVKO 3 2/1/92 19 SEHNAT NECO NA ZUB 12 2/1/92 11 ZARADIT NOVE TITULY 1 2/1/92 111 DOKONCIT PROGRAM X57 19 2/1/92 112 ODLADIT ROZDELANE PROGRAMY 2 2/1/92 113 ZDOKUMENTOVAT PROGRAMY 19 2/1/92 114 PROVEST INVENTURU SKLADU C.13 42 2/1/92 115 KONECNE UKLIDIT 37 2/1/92 12 SEHNAT NOVE LIDI DO TYMU 7 2/1/92 Význam atributů relace UKOLY: CIS_UK identifikační číslo úkolu POPIS popis úkolu OS_CIS osobní číslo zaměstnance jemuž byl zadán DATUM datum zadání úkolu Relace ZAM: OS_CI S JMENO FCE PLAT TITUL CIS_OD D 1 KONADRA POSLICEK 54. 1 6 2 SYKORA BESTBOY 6. 1 6 3 STRNAD SVACINAR 75. 1 6 4 KOS PROJEKTANT 15. ING 1 6 5 KOS PROJEKTANT 18. ING 1 6 6 VOREL BOSS 12. ING 1 7 7 DATEL BOSS 126. RNDR 1 77 8 MALY POSLICEK 6. 2 11 9 DLOUHY KNIHOVNIK 9. 2 11 1 VYSOKY KNIHOVNIK 15. 2 11 11 TLUSTY KNIHOVNIK 111. ING 2 13 12 TLUSTY SVACINAR 6. 2 13 13 OTYLY BOSS 12. ING 2 14 14 OBROVSKY BOSS 135. RNDR 2 77 NADR KIT VŠE 13

15 CERNY PROGRAMATOR 75. 3 21 16 CERVENY PROGRAMATOR 9. 3 21 17 ZELENY PROGRAMATOR 15. ING 3 21 18 ZELENY PROGRAMATOR 15. ING 3 21 19 FIALKA PROGRAMATOR 15. ING 3 21 2 FIALOVA PROGRAMATOR 12. RNDR 3 21 21 ZLATUSKA BOSS 135. RNDR 3 77 31 SEBESTOVA BOSS 84. 4 77 32 MACHOVA BUFETACKA 75. 4 31 33 HORACKOVA UKLIZECKA 75. 4 31 34 HORACKOVA BUFETACKA 78. 4 31 35 PAZOUTOVA MYCKA NADOBI 66. 4 31 36 KADRNOZKOVA MYCKA NADOBI 66. 4 31 37 JONATANOVA UKLIZECKA 66. 4 31 41 CECH BOSS 9. ING 6 77 42 SLOVAK SKLADNIK 66. 6 41 43 NEMEC SKLADNIK 72. 6 41 44 CECH SKLADNIK 75. 6 41 51 KOCOUR BOSS 129. DOC 8 77 52 KOCOUR SEF TECHNIK 114. ING 8 51 53 KOBYLKA TECHNIK 15. ING 8 52 54 KOCICKA TECHNIK 12. 8 52 55 PAPOUSEK TECHNIK 12. 8 52 77 SEFICEK REDITEL 15. DOC 1 77 Význam atributů relace ZAM: OS_CIS osobní číslo JMENO jméno FCE funkce PLAT plat TITUL titul CIS_ODD číslo oddělení ve kterém zaměstnanec pracuje cizí klíč NADR osobní číslo bezprostředně nadřízeného pracovníka určuje vazbu-cizí klíč KIT VŠE 14