Difference between revisions of "Opakování SQL"

From Wikivyuka
Jump to: navigation, search
m
m
Line 25: Line 25:
 
#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%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]
Line 46: Line 46:
 
#Kdo komu dělá šéfa? Zkuste setřídit dle jména manažera.
 
#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í]]
 
<!--
 
<!--
Možnost kontroly Vašich dotazů: [[Dotazy nad více tabulkami - možné řešení]]
 
 
-->
 
-->
  
Line 70: Line 70:
 
#Kdo vydělává nejvíc? Kolik to činí?
 
#Kdo vydělává nejvíc? Kolik to činí?
  
 +
Možnost kontroly Vašich dotazů: [[Dotazy - agregované funkce - možné řešení]]
 
<!--
 
<!--
Možnost kontroly Vašich dotazů: [[Dotazy - agregované funkce - možné řešení]]
 
 
-->
 
-->
  
Line 82: Line 82:
 
#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ů: [[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%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 12:58, 17 May 2013


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.

Dotazy nad jednou tabulkou

  1. Vypište seznam všech zaměstanců s jejich Id, jménem, příjmením a výší platu.
  2. Jak budou vypadat platy zaměstanců, pokud je zvýšíme o 500 (asi $ :-))?
  3. 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?
  4. 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.
  5. Kteří zaměstanci mají provizi? (Nejprve si to vypište jako celek a pak použijte klauzuli WHERE.)
  6. Kolik tedy doopravdy vydělávají ti, kteří mají procenta z provize?
  7. Vypište seznam zaměstnanců a jejich měsíčních platů v jednom sloupci.
  8. Kde a v jaké pozici pracuje pan Atkinson?
  9. Kteří zaměstanci mají jméno začínající na G?
  10. Kteří zaměstnanci mají jméno končící na "s"?
  11. Kteří zaměstanci mají plat nižší než $5000? Zkuste setřídit dle výšky platu.
  12. Kteří zaměstanci byli zaměstnáni po 1. lednu 1999?
  13. Kdo všechno nastoupil v roce 1999?
  14. Kdo šéfuje (Id) jednotlivým oddělením?
  15. Zobrazte všechny zaměstnance, kteří pracují v oddělení 80.
  16. Zobrazte všechny zaměstnance, kteří mají manažera s ID 146. (Zkusit formu parametrického dotazu MANAGER_ID=:mannum)
  17. 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í 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);

"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;

  1. Vypište strukturu tabulek Employees a Departments.
  2. 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?)
  3. 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?)
  4. 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?)
  5. Zobrazte seznam oddělení (id, název) a název města, ve kterém sídlí.
  6. 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.
  7. 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í

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 
  1. Kolik zaměstnanců je celkem zaregistrováno?
  2. Kolik zaměstnanců má oddělení 80?
  3. Kolik různých oddělení je celkem?
  4. Zjistěte, na kolik různých oddělení jsou zaměstnanci rozděleni?
  5. Zjistěte, jaký je minimální, maximální a průměrný plat zaměstnanců z oddělení IT.
  6. Jaký je průměrný plat na jednotlivých odděleních?
  7. Která oddělení mají průměrný plat vyšší než 7000?
  8. Kdo vydělává nejvíc? Kolik to činí?

Možnost kontroly Vašich dotazů: Dotazy - agregované funkce - možné řešení

Vnořené dotazy

  1. Jak se jmenují zaměstnanci, kteří vydělávají víc než Gates?
  2. Jaký průměrný plat je největší v rámci různého pracovního zařazení (čili seskupení dle job_id)?
  3. Který typ práce je takto ohodnocen?
  4. Je možné dotaz formulovat stejně i pro nejnižší průměrný plat?
  5. 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í

Hlavní stránka předmětu