Opakování 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
- 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í
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ů:
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ů:
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ů: