Difference between revisions of "Opakování SQL"
m |
m |
||
(18 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | ====Samostatná práce==== | |
− | Pro orientaci v datové struktuře | + | Pro orientaci v datové struktuře databáze HR máte k dispozici E-R schema na stránce [[Schema HR]]. |
+ | <!--Spustíte Tools/Data Modeler. Pro zobrazení stačí natáhnout tabulky formou Drag nad Drop do okna módu, kde se zobrazí struktura dat i s vazbami.--> | ||
− | V případě, že | + | V případě, že byste neměli k dispozici grafické zobrazení schematu, ani grafického klenta, použijte příkaz |
+ | DESCRIBE table; | ||
+ | Výpis struktury tabulky umožní zadávat příkazy SQL postavené na znalosti datové struktury i z řádkového režimu. | ||
− | + | =====Dotazy nad jednou tabulkou===== | |
#Vypište seznam všech zaměstanců s jejich Id, jménem, příjmením a výší platu. | #Vypište seznam všech zaměstanců s jejich Id, jménem, příjmením a výší platu. | ||
Line 16: | Line 19: | ||
#Kde a v jaké pozici pracuje pan Atkinson? | #Kde a v jaké pozici pracuje pan Atkinson? | ||
#Kteří zaměstanci mají jméno začínající na G? | #Kteří zaměstanci mají jméno začínající na G? | ||
+ | #Kteří zaměstnanci mají jméno končící na "s"? | ||
#Kteří zaměstanci mají plat nižší než $5000? Zkuste setřídit dle výšky platu. | #Kteří zaměstanci mají plat nižší než $5000? Zkuste setřídit dle výšky platu. | ||
#Kteří zaměstanci byli zaměstnáni po 1. lednu 1999? | #Kteří zaměstanci byli zaměstnáni po 1. lednu 1999? | ||
Line 22: | Line 26: | ||
#Zobrazte všechny zaměstnance, kteří pracují v oddělení 80. | #Zobrazte všechny zaměstnance, kteří pracují v oddělení 80. | ||
#Zobrazte všechny zaměstnance, kteří mají manažera s ID 146. (Zkusit formu parametrického dotazu MANAGER_ID=:mannum) | #Zobrazte všechny zaměstnance, kteří mají manažera s ID 146. (Zkusit formu parametrického dotazu MANAGER_ID=:mannum) | ||
− | #Kteří zaměstanci z oddělení 80 pracující pod manažerem 146 mají plat větší než 7000? | + | #Kteří zaměstanci z oddělení 80 pracující pod manažerem 146 mají plat větší než 7000? |
Možnost kontroly Vašich dotazů: [[Dotazy nad jednou tabulkou - možné řešení]] | Možnost kontroly Vašich dotazů: [[Dotazy nad jednou tabulkou - možné řešení]] | ||
− | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3% | + | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu] |
− | + | =====Agregační funkce===== | |
+ | |||
+ | #Kolik zaměstnanců je celkem zaregistrováno? | ||
+ | #Kolik zaměstnanců má oddělení 80? | ||
+ | #Kolik různých oddělení je celkem? | ||
+ | #Zjistěte, na kolik různých oddělení jsou zaměstnanci rozděleni? | ||
+ | #Zjistěte, jaký je minimální, maximální a průměrný plat zaměstnanců z oddělení IT. | ||
+ | #Jaký je průměrný plat na jednotlivých odděleních? | ||
+ | #Která oddělení mají průměrný plat vyšší než 7000? | ||
+ | #Kdo vydělává nejvíc? Kolik to činí? | ||
+ | |||
+ | Možnost kontroly Vašich dotazů: [[Dotazy - agregované funkce - možné řešení]] | ||
+ | |||
+ | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu] | ||
+ | |||
+ | =====Dotazy nad více tabulkami===== | ||
Spojení více tabulek dle normy SQL1999: SELECT [DISTINCT] * | column [alias], ... FROM table1 JOIN table2 ON (col_name_1 = col_name_2); | Spojení více tabulek dle normy SQL1999: SELECT [DISTINCT] * | column [alias], ... FROM table1 JOIN table2 ON (col_name_1 = col_name_2); | ||
Line 38: | Line 57: | ||
#Vypište strukturu tabulek Employees a Departments. | #Vypište strukturu tabulek Employees a Departments. | ||
#Vytvořte seznam všech atributů při spojení těchto tabulek. (Odpovídají si hodnoty ze sloupců Department_ID z obou původních tabulek?) | #Vytvořte seznam všech atributů při spojení těchto tabulek. (Odpovídají si hodnoty ze sloupců Department_ID z obou původních tabulek?) | ||
− | #Seznam "ořežte" na tyto atributy: employee_id, department_id, department_name, kde department_id je požadováno jak z tabulky employees, tak i department. Jaký je výsledek? | + | #Seznam "ořežte" na tyto atributy: employee_id, department_id, department_name, kde department_id je požadováno jak z tabulky employees, tak i department. (Jaký je výsledek? Kolik záznamů obsahuje?) |
− | #Seznam vytvořte tak, aby obsahoval "správné" spojení - tj. přes rovnost hodnot department_id v obou tabulkách. | + | #Seznam vytvořte tak, aby obsahoval "správné" spojení - tj. přes rovnost hodnot department_id v obou tabulkách. (Jaký je výsledek? Kolik záznamů obsahuje?) |
#Zobrazte seznam oddělení (id, název) a název města, ve kterém sídlí. | #Zobrazte seznam oddělení (id, název) a název města, ve kterém sídlí. | ||
#Vypište seznam všech zaměstanců z oddělení prodeje (název oddělení 'Sales') s jejich Id, jménem, příjmením a velikostí jejich provize. | #Vypište seznam všech zaměstanců z oddělení prodeje (název oddělení 'Sales') s jejich Id, jménem, příjmením a velikostí jejich provize. | ||
Line 46: | Line 65: | ||
Možnost kontroly Vašich dotazů: [[Dotazy nad více tabulkami - možné řešení]] | Možnost kontroly Vašich dotazů: [[Dotazy nad více tabulkami - možné řešení]] | ||
− | + | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | =====Vnořené dotazy===== | |
#Jak se jmenují zaměstnanci, kteří vydělávají víc než Gates? | #Jak se jmenují zaměstnanci, kteří vydělávají víc než Gates? | ||
− | # | + | #Na kterém oddělení je největší průměrný plat? |
#Který typ práce je takto ohodnocen? | #Který typ práce je takto ohodnocen? | ||
#Je možné dotaz formulovat stejně i pro nejnižší průměrný plat? | #Je možné dotaz formulovat stejně i pro nejnižší průměrný plat? | ||
Line 79: | Line 77: | ||
Možnost kontroly Vašich dotazů: [[Vnořené dotazy - možné řešení]] | Možnost kontroly Vašich dotazů: [[Vnořené dotazy - možné řešení]] | ||
− | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3% | + | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu] |
Latest revision as of 09:23, 10 April 2015
Contents
Samostatná práce
Pro orientaci v datové struktuře databáze HR máte k dispozici E-R schema na stránce Schema HR.
V případě, že byste neměli k dispozici grafické zobrazení schematu, ani grafického klenta, použijte příkaz
DESCRIBE table;
Výpis struktury tabulky umožní zadávat příkazy SQL postavené na znalosti datové struktury i z řádkového režimu.
Dotazy nad jednou tabulkou
- Vypište seznam všech zaměstanců s jejich Id, jménem, příjmením a výší platu.
- Jak budou vypadat platy zaměstanců, pokud je zvýšíme o 500 (asi $ :-))?
- Kolik vydělávají zaměstanci ročně? Kolik to bude dělat v případě, že k ročnímu platu dostanou odměnu $500?
- Kolik by vydělávali ročně, pokud bychom jim zvedli plat o $500 měsíčně? Vypište včetně porovnání se stávajícím platem.
- Kteří zaměstanci mají provizi? (Nejprve si to vypište jako celek a pak použijte klauzuli WHERE.)
- Kolik tedy doopravdy vydělávají ti, kteří mají procenta z provize?
- Vypište seznam zaměstnanců a jejich měsíčních platů v jednom sloupci.
- Kde a v jaké pozici pracuje pan Atkinson?
- Kteří zaměstanci mají jméno začínající na G?
- Kteří zaměstnanci mají jméno končící na "s"?
- Kteří zaměstanci mají plat nižší než $5000? Zkuste setřídit dle výšky platu.
- Kteří zaměstanci byli zaměstnáni po 1. lednu 1999?
- Kdo všechno nastoupil v roce 1999?
- Kdo šéfuje (Id) jednotlivým oddělením?
- Zobrazte všechny zaměstnance, kteří pracují v oddělení 80.
- Zobrazte všechny zaměstnance, kteří mají manažera s ID 146. (Zkusit formu parametrického dotazu MANAGER_ID=:mannum)
- Kteří zaměstanci z oddělení 80 pracující pod manažerem 146 mají plat větší než 7000?
Možnost kontroly Vašich dotazů: Dotazy nad jednou tabulkou - možné řešení
Agregační funkce
- Kolik zaměstnanců je celkem zaregistrováno?
- Kolik zaměstnanců má oddělení 80?
- Kolik různých oddělení je celkem?
- Zjistěte, na kolik různých oddělení jsou zaměstnanci rozděleni?
- Zjistěte, jaký je minimální, maximální a průměrný plat zaměstnanců z oddělení IT.
- Jaký je průměrný plat na jednotlivých odděleních?
- Která oddělení mají průměrný plat vyšší než 7000?
- Kdo vydělává nejvíc? Kolik to činí?
Možnost kontroly Vašich dotazů: Dotazy - agregované funkce - možné řešení
Dotazy nad více tabulkami
Spojení více tabulek dle normy SQL1999: SELECT [DISTINCT] * | column [alias], ... FROM table1 JOIN table2 ON (col_name_1 = col_name_2);
"Přirozené" spojení má v Oracle syntaxi: SELECT [DISTINCT] * | column [alias], ... FROM table1 NATURAL JOIN table2;
Pro případ spojení přes více sloupců: SELECT [DISTINCT] * | column [alias], ... FROM table1 JOIN table2 USING common_col_name;
- Vypište strukturu tabulek Employees a Departments.
- Vytvořte seznam všech atributů při spojení těchto tabulek. (Odpovídají si hodnoty ze sloupců Department_ID z obou původních tabulek?)
- Seznam "ořežte" na tyto atributy: employee_id, department_id, department_name, kde department_id je požadováno jak z tabulky employees, tak i department. (Jaký je výsledek? Kolik záznamů obsahuje?)
- Seznam vytvořte tak, aby obsahoval "správné" spojení - tj. přes rovnost hodnot department_id v obou tabulkách. (Jaký je výsledek? Kolik záznamů obsahuje?)
- Zobrazte seznam oddělení (id, název) a název města, ve kterém sídlí.
- Vypište seznam všech zaměstanců z oddělení prodeje (název oddělení 'Sales') s jejich Id, jménem, příjmením a velikostí jejich provize.
- Kdo komu dělá šéfa? Zkuste setřídit dle jména manažera.
Možnost kontroly Vašich dotazů: Dotazy nad více tabulkami - možné řešení
Vnořené dotazy
- Jak se jmenují zaměstnanci, kteří vydělávají víc než Gates?
- Na kterém oddělení je největší průměrný plat?
- Který typ práce je takto ohodnocen?
- Je možné dotaz formulovat stejně i pro nejnižší průměrný plat?
- Vypište id, prijmeni, funkcni zařazení zaměstnanců, kteří mají vyšší plat než je průměr ve firmě. Také uveďte o kolik to je.
Možnost kontroly Vašich dotazů: Vnořené dotazy - možné řešení