Aritmetické operátory * / + - % (MOD) priorita operátorů se dá upravit pomocí závorek Vypište příjmení, jména a platy zaměstnanců včetně pěti procentní prémie. Vypište název pracovní pozice a k ní připojte průměr maximálního a minimálního platu. Chceme-li po databázi, aby nám vypočítala aritmetický výraz, musíme dodržet syntaxi. To znamená, že nesmí chybět část FROM. V takovýchto případech použijeme tabulku dual. Pomocí tabulky dual vypočítejte hodnotu následujícího výrazu (3 3 *((18-12)/3)+((24-2*6)/4) 2 )/3 2
Spojovací operátor: Spojovací operátor: (platí pro Oracele, v jiných DBS lze nahradit funkcí CONCAT() viz později.) spojuje sloupce aritmetické výrazy konstanty řetězce znaků, čísel nebo dat vytváří řetězec Vypište seznam, který bude obsahovat záznamy ve tvaru číslo oddělení název oddělení.
Aliasy umožňují libovolné pojmenování vypisovaných sloupců nepovinné klíčové slovo AS obsahuje-li alias mezery speciální znaky chceme malá a velká písmena, pak je nutné použít uvozovky A lias Spojte do jednoho sloupce jméno a příjmení zaměstnance a pojmenujte tento sloupec jména zaměstnanců.
NULL Hodnota, která je nedostupná nepřiřazená neznámá neaplikovatelná
DISTINCT potlačuje duplicitní záznamy musí následovat za SELECT Vyberte čísla oddělení, ve kterých je alespoň jeden zaměstnanec. Vyberte čísla všech vedoucích pracovníků.
Relační operátory = rovno > větší než >= větší nebo rovno < menší než <= menší nebo rovno <>,!=, ^= nerovno při práci se znaky, textovými řetězci a daty je potřeba použít apostrofy Rozeznávají se malá a velké písmena (case Sensitive)
Další porovnávací operátory BETWEEN AND LIKE (%, _, \) IN IS NULL IS NOT NULL Vyberte všechny zaměstnance, kteří nastoupili mezi 2. 1. 2007 a 9. 7. 2008. Vypište všechna příjmení zaměstnanců, jejichž příjmení má jako druhé písmeno o a poslední k. Vypište všechny zaměstnance, kteří pracují na odděleních číslo (10,15,23) Vypište jména a příjmení všech zaměstnanců, kteří nemají nadřízeného
Priorita operátorů Priorita Operace 1 Aritmetické, + - * / 2 Zřetězení 3 Porovnání <, <=,, <> 4 IS (NOT) NULL, (NOT) IN, LIKE 5 (NOT) BETWEEN 6 NOT 7 AND 8 OR
Funkce V dbs rozlišujeme dva typy funkcí:
Víceřádkové funkce AVG COUNT MAX MIN SUM
Jednořádkové funkce
Znakové funkce LOWER všechna písmena malá UPPER všechna písmena velká INITCAP první písmeno v každém slovu velké CONCAT sřetězení SUBSTR('řetězec', číslo znaku kde začít počítáno od 1, kolik zanků) podřetězec LENGTH délka řetězce INSTR('řetězec', 'zvak') najde pozici znaku v daném řetězci LPAD(řetězec, počet znaků, znak, který se bude doplňovat zleva ) vypíše na daný počet znaků a zbytek doplní zleva požadovaným znakem RPAD totéž jen zprava TRIM('H' FROM 'HelloWorld') --> elloworld - Odstraní všechny zadané znaky ze začátku nebo konce řetězce. REPLACE (string1, string_to_replace, [replacement_string]) V prvním uvedeném řetězci nahradí podřetězce na drhém místě funkce řetězci na třetím místě
Data (čas) SYSDATE vrátí aktuální datum SELECT SYSDATE FROM DUAL; Datum je uchováváno jako číslo pro ho lze odčítat, sčítat apod. Vypočítejte, kolik máte dnes dnů MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC Předpokládejme, že SYSDATE = '25-JUL-95' Function ROUND (SYSDATE, 'MONTH') ROUND (SYSDATE, 'YEAR') TRUNC (SYSDATE, 'MONTH') TRUNC (SYSDATE, 'YEAR ) Number of months between two dates Add calendar months to date Next day of the date specified Last day of the month Round date Truncate date Result 01-AUG-95 01-JAN-96 01-JUL-95 01-JAN-95
Převodní funkce: Vycházejme ze čtyř základních typů: VARCHAR2 řetězce s proměnnou délkou CHAR řetězce s fixní délkou NUMBER typ pro čísla DATE typ pro data v DBS od Oracle se implicitně zobrazují DD-MON-YY (např. 19-JUN-04)
Datum -> text I TO_CHAR (sloupec s datem, 'formát požadovaného zobrazení') YYYY Full year in numbers YEAR Year spelled out MM Two-digit value for month MONTH Full name of the month MON Three-letter abbreviation of the month DY Three-letter abbreviation of the day of the week DAY Full name of the day of the week DD Numeric day of the month HH24:MI:SS AM 15:45:32 PM DD of MONTH 12 of October DDspth FOURTEENTH Ddspth Fourteenth ddspth fourteenth DDD or DD or D Day of year, month or week
Datum -> text II Current Year Specified Date RR Format YY Format 1995 27-OCT-95 1995 1995 1995 27-OCT-17 2017 1917 2001 27-OCT-17 2017 2017 2001 27-OCT-95 1995 2095 If the specified two-digit year is: If two digits of the current year are: 0-49 50-99 0-49 The return date is in the current century 50-99 The return date is in the century after the current one The return date is in the century before the current one The return date is in the current century
Číslo -> text TO_CHAR(číslo, 'formát výstupu') ELEMENT DESCRIPTION EXAMPLE RESULT 9 Numeric position (# of 9 s determine width) 999999 1234 0 Display leading zeros 099999 001234 $ Floating dollar sign $999999 $1234 L Floating local currency symbol L999999 FF1234. Decimal point in position specified 999999.99 1234.00, Comma in position specified 999,999 1,234 MI Minus signs to right (negative values) 999999MI 1234- PR Parenthesize negative numbers 999999PR <1234> EEEE Scientific notation ( must have four EEEE) 99.999EEEE 1,23E+03 V Multiply by 10 n times (n= number of 9 s after V) 9999V99 9999V99 B Display zero values as blank, not 0 B9999.99 1234.00
Vyhodnocení zanořených funkcí Jednořádkové funkce je možné do sebe zanořovat. SELECT TO_CHAR( NEXT_DAY(ADD_MONTHS(datum_nastupu, 6), 'pátek'),'fmday, Month DDth, YYYY') AS "Next Evaluation" FROM zamestnanci WHERE id_zamestnanci=100; Krok 1: k datu nástupu se přidá šest měsíců. Krok 2: určí se datum prvního pátku, který bude následovat. Krok 3: převede datum do textového řetězce požadovaného formátu
Funkce pro práci s hodnotou NULL NVL Funkce NVL převede hodnotu null na známou hodnotu s daným datový typ, a to buď datum, řetězcem nebo číslo. Datové typy nulové hodnoty sloupce a nová hodnota musí být stejná. NVL2 Tato funkce operuje se třemi parametry. Pokud je první hodnota není null, vrátí funkce hodnotu uvedenou jako první parametr, má-li první parametr hodnotu null, funkce vrátí hodnotu třetího parametru. NULLIF Tato funkce porovnává dvě hodnoty. Pokud se rovnají, je vrácena hodnota NULL. Jestliže se nerovnají, je vrácena hodnota prvního parametru. COALESCE Tato funkce je rozšířením funkce NVL. Její výhodou je, že je schopná zpracovat více atributů. Funkce prochází všechny uvedené parametry dokud nenalezne nenullový a ten vypíše
https://trust.mendelu.cz/apex/ Workspace DBS_CVICENI Username student_xxx Password student_xxx (pokud jste si heslo už nezměnili)
Příklady 1. Vypište názvy všech zemí začínající na A a obsahující písmeno n. 2. Vypište adresu poboček, které mají orientační číslo dělitelné pěti beze zbytku. 3. Vypište unikátní názvy oddělení, které obsahují k nebo o
4. Vypište datum prodeje ve tvaru den v týdnu den v měsíci. měsíc slovy a poslední dvě číslice roku, kde byla celková tržba vyšší než 200 tisíc a zároveň menší než 350 tisíc. 5. Vypište název producentů, kteří nemají uvedený telefonní kontakt. 6. Vypište název a telefonní spojení producentů, kde kontaktní osoba se křestním jménem jmenuje Monika
7. Vypište datum všech prodejů a jejich celkovou cenu a počet prodaných, kde se produkt 'Produkt_SE 50' od firmy 'firma_39' prodal alespoň po osmi kusech. Celkovou cenu zarovnejte doprava a zaokrouhlete na stovky a vypište na 10 platných cifer a před jako první znak vypište dolar. Datum vypište podle příkladu: čtrnáctý led 09. Sloupce pojmenujte datum a cena. 8. Vypište názvy produktů a jejich pořizovací cenu, jejichž pořizovací cena je celé číslo.
9. Odkdy dokdy byly v oddělení potravin na pobočce Brno 2 nabízeny produkty dražší než 350. 10. Vypište maximální, minimální a průměrný plat všech zaměstnanců a celkové mzdové náklady (zaokrouhlený na dvě desetinná místa). Sloupce pojmenujte odpovídajícím způsobem. Mezi řády tisíců udělejte čárku 11. Vypište v kolika zemích se vyrábí nějaký produkt.
12. Vypište, kolik měsíců jste na světě. 13. Vypište jakým dnem (myšleno, pondělí, úterý,...) končí aktuální měsíc. 14. Vypište datum prvního pátku roku 2015. 15. Vypište jméno a příjmení zaměstnanců a příjmení jejich vedoucích, jejichž plat je nad průměrný. Pokud nemají vedoucího vypište bez nadřízeného.
16. Ze jména a příjmení vytvořte login ve tvaru první písmeno křestního jména a prvních pět znaků příjmení vše malými písmeny. Loginy vytvořte tak, aby se v nich nevyskytovala diakritika. 17. Zjistěte, zda takto vytvořené loginy jsou pro daný soubor zaměstnanců unikátní. Výsledkem bud buď ano nebo ne.
18. Vypište název producenta a jeho telefonní číslo, pokud nemá uveden telefon, vypište e- mail. Pokud nemá ani e-mail, vypište kontaktní osobu. Pokud nemá zaznamenánu ani tu, vypište: Nemá uveden žádný kontakt. Tento sloupec pojmenujte kontakt. 19. Vypište jméno, příjmení, počet dnů v zaměstnání a název jejich pracovní pozice u zaměstnanců, kteří k 1. 1. 2008 byli již minimálně půl roku zaměstnáni a seřaďte je podle doby pracovního poměru od nejdéle pracujícího.
20. Vypište účet od prodej(e/ů), kter(ý/é) byl(y) provedeny 15. ledna 2009 na pobočce v Břeclavi a jejich celková cena byla mezi 10 a 12 tisíci. 21. Ověřte, zda celková cena prodeje odpovídá prodanému zboží v rámci daného prodeje. Zjistěte v kolik případech tomu tak není