Opakování SQL

From Wikivyuka
Revision as of 20:08, 4 April 2011 by Dur30 (talk | contribs)

Jump to: navigation, search

Tutoriály SQL

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ěstanci mají plat nižší než $5000? Zkuste setřídit dle výšky platu.
  11. Kteří zaměstanci byli zaměstnáni po 1. lednu 1999?
  12. Kdo všechno nastoupil v roce 1999?
  13. Kdo šéfuje (Id) jednotlivým oddělením?
  14. Zobrazte všechny zaměstnance, kteří pracují v oddělení 80.
  15. Zobrazte všechny zaměstnance, kteří mají manažera s ID 146. (Zkusit formu parametrického dotazu MANAGER_ID=:mannum)
  16. 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?
  4. Seznam vytvořte tak, aby obsahoval "správné" spojení - tj. přes rovnost hodnot department_id v obou tabulkách.
  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ích 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í?
  9. Jak se jmenují zaměstnanci, kteří vydělávají víc než Gates?

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