Difference between revisions of "Opakování SQL"
m |
m |
||
Line 5: | Line 5: | ||
V případě, že nemáte k dispozici grafické zobrazení, je vhodné použít příkaz DESCRIBE table; Ten vypíše strukturu tabulky, což umožní zadávat příkazy SQL postavené na znalosti datové struktury. | V případě, že nemáte k dispozici grafické zobrazení, je vhodné použít příkaz DESCRIBE table; Ten vypíše strukturu tabulky, což umožní zadávat příkazy SQL postavené na znalosti datové struktury. | ||
− | + | =====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 29: | Line 29: | ||
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Hlavní stránka předmětu] | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Hlavní stránka předmětu] | ||
− | + | =====Agregační funkce===== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Seznam a význam agregačních funkcí: | Seznam a význam agregačních funkcí: | ||
Line 69: | Line 49: | ||
#Kdo vydělává nejvíc? Kolik to činí? | #Kdo vydělává nejvíc? Kolik to činí? | ||
− | Možnost kontroly Vašich dotazů: | + | 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? | #Jak se jmenují zaměstnanci, kteří vydělávají víc než Gates? | ||
Line 81: | Line 78: | ||
#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. | #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ů: | + | 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%A1ze Hlavní stránka předmětu] | [http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Hlavní stránka předmětu] |
Revision as of 07:25, 31 July 2014
Pro orientaci v datové struktuře se podívejte na model dat pres Data Modeler. 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 nemáte k dispozici grafické zobrazení, je vhodné použít příkaz DESCRIBE table; Ten vypíše strukturu tabulky, což umožní zadávat příkazy SQL postavené na znalosti datové struktury.
Contents
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
Seznam a význam agregačních funkcí:
COUNT(*) navrátí počet počet řádků, které má odpověď COUNT() počet platných hodnot SUM() součet numerických hodnot ze zadaného sloupce AVG() průměrnou hodnotu z numerických platných hodnot MIN() minimální hodnotu z numerických platných hodnot MAX() maximální hodnota z numerických platných hodnot
- 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í