Databázové systémy I. 4. přednáška

Podobné dokumenty
Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

KIV/ZIS cvičení 5. Tomáš Potužák

Funkce pro práci s jednotlivými řádky

Databáze SQL SELECT. David Hoksza

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Aritmetické operátory

Úvod do databázových systémů

Informační systémy ve zdravotnictví. 6. cvičení

Databázové systémy. Cvičení 6: SQL

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Úvod do databázových systémů

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Operátory ROLLUP a CUBE

Úvod do databázových systémů

6. blok část B Vnořené dotazy

Databázové systémy I

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Informační systémy ve zdravotnictví. 10. cvičení

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

Relační model dat (Codd 1970)

6. blok část C Množinové operátory

Jazyk PL/SQL Úvod, blok

Databázové systémy a SQL

Dotazy tvorba nových polí (vypočítané pole)

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Michal Valenta DBS Databázové modely 2. prosince / 35

Ukládání a vyhledávání XML dat

Databázové systémy a SQL

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

PROGRAMOVÁNÍ V SQL Podpora výuky databázových systémů na SOŠ, založené na technologiích společnosti ORACLE.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databázových systémů 3. cvičení

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Úvod do databázových systémů

3. přednáška z předmětu GIS1 atributové a prostorové dotazy

Databáze I. Přednáška 2

Databázové systémy Cvičení 5.3

Analýza a modelování dat. Přednáška 8

Informační systémy ve zdravotnictví. 8. cvičení

DBS relační DB model, relační algebra

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

5. blok Souhrnné a skupinové dotazy

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

DUM 12 téma: Příkazy pro tvorbu databáze

KIV/ZIS - SELECT, opakování

Databázové systémy Cvičení 5

Databázové systémy BIK-DBS

Algoritmizace a programování

Databáze I. Přednáška 6

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Dotazování v relačním modelu a SQL

Kapitola 4: SQL. Základní struktura

Databázové systémy. Dotazovací jazyk SQL - II

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Kurz Databáze. Obsah. Návrh databáze E-R model. Datová analýza, tabulky a vazby. Doc. Ing. Radim Farana, CSc.

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

8.2 Používání a tvorba databází

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

5 Přehled operátorů, příkazy, přetypování

Základní přehled SQL příkazů

Tabulkový procesor. Základní rysy

MS Access Dotazy SQL

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

DB1 cvičení 4 spojení tabulek a složitější dotazy

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Analýza a modelování dat. Přednáška 9

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Dolování v objektových datech. Ivana Rudolfová

LEKCE 6. Operátory. V této lekci najdete:

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

DATA CUBE. Mgr. Jiří Helmich

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

4. blok část A Logické operátory

Analýza a modelování dat 3. přednáška. Helena Palovská

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Databázové systémy a SQL

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi.

LabView jako programovací jazyk II

SQL - úvod. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 6

Databáze I. 5. přednáška. Helena Palovská

Dotazovací jazyky I. Datová krychle. Soběslav Benda

U koly na procvic ení jazyka T-SQL

Databázové systémy Tomáš Skopal

Databáze. Logický model DB. David Hoksza

Multi-dimensional expressions

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Virtual Private Database (VPD) Jaroslav Kotrč

DATABÁZE MS ACCESS 2010

- sloupcové integritní omezení

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Úvod do databázových systémů

Transkript:

Databázové systémy I. 4. přednáška

Co nás dnes čeká Základy relační algebry Anatomie příkazu SELECT Srovnávací operátory pro klauzuli WHERE Agregační funkce Jednořádkové funkce Víceřádkové funkce

Relační algebra Je matematickým jazykem pro zápis dotazů (výsledků operace vyhledávání) nad souborem dat Pracuje se vždy s celou relací naráz (rozdíl proti n- ticovému kalkulu) Pro snazší pochopení si představte relace jako jednotlivé věty v souboru (relace jsou řádky v tabulce v Excelu s omezeným počtem sloupců, tj. atributů)

Relační algebra Pojem relace Práce s celými relacemi Množinové operace nad relacemi Projekce, selekce Užití kartézského součinu nad relací totální výčet kombinací možností další aplikací selekce lze vybrat smysluplné varianty právě výběrem variant se zabývá spojení

Relační algebra a spojení Spojení je aplikací selekce na kartézský součin Umožňuje vytvářet smysluplné kombinace relací Přirozené spojení pracuje intuitivně Vnější spojení umožní doplnit údaje jedné relace relací druhou Levé, pravé, plné vnější spojení Přirozené je nejvýše tak velké jako vnější

Využití relační algebry Umožňuje položení dotazů nad relacemi Aplikací selekce lze omezit počet vět Projekce zužuje na vybrané atributy Spojení umožní kombinovat jednotlivé relace dohromady Množinové operace umožní kombinovat výsledky více dotazů Vnořování relací (relace jako část selekce)

Příklad dotazu v RA Verbální zadání: Chceme seznam kin, kde nedávají žádný film s Vladimírem Menšíkem. Dotaz v relační algebře: KINO[NAZEV_K] (FILM(HEREC= Menšík )[JMENO_F] * PROGRAM[NAZEV_K,JMENO_F]) [NAZEV_K]

AUTO(SPZ, ZNAČKA, TYP, POČET_MÍST, ROK_VÝROBY) SPZ ZNAČKA TYP POČET_MÍST ROK_VÝROBY BZX 17-93 Škoda Felicia 5 1998 BZY 27-06 Wolksvagen Caddy 2 1996 9B8 0005 Volvo C30 5 2007 0B7 4949 Škoda Fabia 5 2006 6B3 1754 Renault Mégane 5 2004 3A7 3000 Wolksvagen New Beetle 4 2005 AKR 68-80 Škoda Fabia 5 2000 BMM 17-90 Fiat 128 5 1984 3B3 1234 Renault Clio 4 2000 ZÁKAZNÍK(IDZ, JMÉNO, VĚK, ADRESA) IDZ JMÉNO VĚK ADRESA 1 Martin Dvořák 37 Břeclav 2 František Nový 29 Znojmo 3 Jana Smutná 35 Brno 4 Tomáš Ondřej 52 Znojmo 5 Eliška Sličná 19 Hodonín 6 Matěj Novák 33 Brno 7 Blanka Panenská 56 Brno PUJČENÍ(ZÁKAZNÍK, AUTO) ZÁKAZNÍK AUTO 6 9B8 0005 1 0B7 4949 5 0B7 4949 4 BZX 17-93 6 3A7 3000 7 AKR 68-80 1 6B3 1754 3 AKR 68-80 1 3B3 1234

n-ticový relační kalkul Jiný způsob zadání dotazu (jiný matematický formalismus než RA) { x 1,, x n A(x 1,, x n ) } Umožňuje výběr množiny atributů kladením podmínek na tyto atributy Podmínky mohou vymezovat atributy z jiných relací nebo omezit podmínkami tyto atributy

Příklad na n-ticový kalkul Přirozené spojení dvou relací by v n-ticovém kalkulu bylo možné zapsat : { p.nazev_k, k.adresa, p.jmeno_f, p.datum PROGRAM(p) KINO(k) k.nazev_k = p.nazev_k }

Srovnání RA a NRK Oba nástroje mohou vyřešit stejnou třídu problémů Existují tedy způsoby přepisu operací relační algebry do n-ticového relačního kalkulu Dotazy lze vnořovat do sebe (vytváření příslušných n-tic, které jsou užity v jiné n-tici v omezujících podmínkách)

Data query language Prostředek pro získávání údajů z DB Velmi mocný nástroj odrážející celou relační algebru Strukturovaný příkaz SELECT obsahuje několik jasně definovaných částí Povinné jsou pouze dvě projekce a definice zdrojů Zdroj musí být vždy uveden (dual)

Interní rozdělení SQL Rozdělíme si SQL příkazy na tři postupně probrané kategorie: jednoduché dotazy 1 úroveň, bez množin množinové dotazy 1 úroveň, množiny vnořené dotazy více úrovní, užití množin Uvedené typy SQL lze ve vyspělém RDBMS (jako je Oracle) vhodně kombinovat (jednoduché SQL databáze ne vždy tuto možnost podporují)

Anatomie příkazu SELECT SELECT zdrojová projekce FROM datové zdroje [ WHERE selekce ] [ GROUP BY seskupení [ HAVING selekce seskupení ] ] [ ORDER BY řazení ]

Konvence užití Jednotný zápis, není povinný Je více než vhodný Klíčové slovo (SELECT, FROM) reprezentuje jeden SQL příkaz/funkci Výraz je část SQL příkazu Příkaz definujeme jako kombinaci minimálně dvou výrazů

Základní užití SELECT * FROM tabulka představuje prosté použití relace tabulka SELECT atr 1, atr 2 FROM tabulka představuje navíc aplikaci projekce na relaci tabulka[atr 1, atr 2 ]

Projekce a selekce

Aplikace selekce v dotazu Klasický zápis v relační algebře: tabulka(atr 1 =konst) V SQL se přepíše jako podmínka: SELECT * FROM tabulka WHERE atr 1 = konst Pro přepis selekcí možnosti OR, AND, NOT, závorky, relační operátory

Kombinace selekcí a projekce Klasický zápis v relační algebře: tabulka[atr 1,atr 2 ] (atr 1 =konst 1 atr 2 <konst 2 ) Lze do SQL přepsat jako: SELECT atr 1, atr 2 FROM tabulka WHERE atr 1 = konst 1 AND atr 2 < konst 2

Řazení výsledků v SQL Nejedná se o třídění, ale o řazení!!! Využití klauzule ORDER BY Čárkou oddělený seznam sloupců podle priority řazení (řadí se vzestupně) Možnost stanovit směr pomocí ASC, DESC Implicitní řazení není definováno Specifikace NULLS FIRST LAST Př.: SELECT * FROM tabulka ORDER BY atr 1 DESC, atr 2 ASC

Klauzule WHERE Klauzule WHERE je aplikací SELEKCE z RA WHERE název_sloupce srovnávací_podmínka názvy_sloupců, konstanty nebo seznam hodnot V klauzuli WHERE nelze použít alias Srovnání lze požít srovnávacích oprátorů pro Číselné datové typy Řetězce Datum a čas

Srovnávací operátory Základní množinu tvoří matematické operátory =, je rovno >, větší než >=, vetší nebo rovno <, menší než <=, menší nebo rovno <>, různý od (nebo!=, nebo také ^=) Pro srovnání řetězců nebo data a času uvedeme srovnávaný vzor do jednoduchých uvozovek -

Porovnání řetězců Která z následujících podmínek bude správně? WHERE last_name = vomáčka WHERE last_name = Vomáčka

Porovnání řetězců Porovnání řetězců je implicitně case-sensitive WHERE event_date = 17-MAR-11 WHERE last_name = Vomáčka WHERE price >= 2000 Kromě dříve zmíněných základních jsou možné i jejich kombinace pro specifická data, jsou to BETWEEN... AND... IN LIKE

Porovnání řetězců BETWEEN... AND... IN Zahrnuje rovněž hraniční hodnoty WHERE year >= 1999 AND year <= 2010 Z pohledu výkonnosti není rozdíl v užití BETWEEN nebo výše zmíněné alternativy De facto množina přípustných hodnot Testování náležitosti aktuální hodnoty do výčtu hodnot Lze přepsat pomocí OR operátorů

Porovnání řetězců LIKE V rámci vyhledávaní alternativ lze použít dva zástupné symboly Symbol %, reprezentuje nula nebo více znaků Symbol _, reprezentuje právě jeden znak V případě, že jsou v prohledávaných řetězcích ony dva znaky, pro escapování použijeme \

SELECT last_name FROM employees WHERE last_name LIKE _o% ; Který z náseledujících zaměstnanců vyhovuje? 1. Sommersmith 2. Oog 3. Fong 4. Mo

Práce s NULL IS NULL Pro hledání prázdných, nepřiřazených nebo neznámých dat IS NOT NULL Opak IS NULL, tedy pro data obsažená v databázi SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL;

Logické operátory Kombinují výsledky dvě nebo více podmínek pro získání jednoho výsledku AND, vrací TRUE právě když jsou splněny obě podmínky OR, vrací TRUE když je jedna z podmínek platná NOT, vrací TRUE když podmínka naplatí Jak vyhodnotíte následující dotaz?

Vyhodnoťte následující dotaz SELECT last_name ' ' salary*1.05 As "Employee Raise" FROM employees WHERE department_id IN(50,80) AND first_name LIKE 'C%' OR last_name LIKE '%s%';

Priorita vyhodnocování AND operátor má tedy přednost před OR V případě, kdy jedna z podmínek u AND není splněna, volí se řádky na základě OR podmínky 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

Vyhodnoťte následující dotaz SELECT last_name, specialty, auth_expense_amt FROM d_partners WHERE (specialty ='All Types OR specialty IS NULL) AND auth_expense_amt = 300000;

Databázové funkce Funkce dělíme na Jedno-řádkové Více-řádkové

Jedno-řádkové funkce Na vstupu mají vždy právě jeden řádek a i jeden řádek vrací Manipulace s datovými položkami Rozlišují argumenty a na jejich základě vrací hodnotu Pracující opakovaně vždy s jedním řádkem Mohou upravovat datové typy

Jedno-řádkové funkce pro znaky Mohou převádět malá písmena na velká a opačně, spojovat, extrahovat, hledat, vkládat a vystřihovat znaky z řetězců Jedno-řádkové funkce mohou být použity v části SELECT, WHERE a ORDER BY Dělíme je na Funkce pro práci s velikostí písma (case) Funkce pro práci se znaky

Jedno-řádkové funkce pro znaky

Funkce pro práci s velikostí písma INITCAP(sloupec výraz) Mění styl prvního znaku na velké písmeno pro každé slovo SELECT title FROM d_cds WHERE INITCAP(title)= Carpe Diem ;

Funkce pro práci se znaky CONCAT('Hello', 'World') HelloWorld SUBSTR('HelloWorld', 1, 5) Hello LENGTH('HelloWorld') 10 INSTR('HelloWorld','W') 6 LPAD(salary, 10, * ) *****24000 RPAD(salary, 10, '*') 24000***** TRIM('H' FROM 'HelloWorld') elloworld REPLACE('JACK and JUE', 'J', 'BL') BLACK and BLUE

Funkce pro práci s velikostí písma Při použití funkcí lze rovněž využívat také aliasů Funkce lze rovněž zanořovat do sebe SELECT LOWER (last_name) LOWER(SUBSTR(first_nam e,1,1)) AS "User Name" FROM f_staffs;

Funkce pro práci s čísly 3 funkce: ROUND, TRUNC, MOD ROUND(column expression, decimal places) Pracuje s číselnými datovými typy i datem a časem ROUND(45.926) 46 ROUND(45.926, 0) ROUND(45.926, 2), vrací 45.93 ROUND(45.926, -1), vrací 50

Funkce pro práci s čísly TRUNC(column expression, decimal places) Pracuje s číselnými datovými typy i datem a časem TRUNC(45.926) TRUNC(45.926, 0) 45 TRUNC(45.926, 2), vrací 45.92 TRUNC na rozdíl od ROUND nezaokrouhluje číslo, ale zkrátí ho na požadovaná desetinná místa

Funkce pro práci s čísly MOD(number1, number2) Vrací zbytek po celočíselném dělení Typicky pro zjišťování zda je číslo sudé nebo liché SELECT MOD(1600,500) FROM DUAL; Vrací 100

Funkce pro práci s datem Výchozí zobrací formát data je DD-MON-RR, ale datum je ukládáno s přesností na sekundy Systémové datum zjistíme pomocí funkce SYSDATE SELECT SYSDATE FROM DUAL;

Funkce pro práci s datem MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND, TRUNC Počet měsíců mezi dvěma daty Přidá kalendářní měsíce k datu Vrátí den následující po zadaném Vrátí poslední den měsíce Zaokrouhlí/ořízne datum

Použití ROUND a TRUNC SYSDATE = 25-JUL-95 Použitá funkce ROUND (SYSDATE, 'MONTH') ROUND (SYSDATE, 'YEAR') TRUNC (SYSDATE, 'MONTH') TRUNC (SYSDATE, 'YEAR ) Výsledek 01-AUG-95 01-JAN-96 01-JUL-95 01-JAN-95

Konverzní funkce

Konverze DATE na znaky Funkce TO_CHAR TO_CHAR(date column name,'format model') Format model musí být vždy v jednoduchých uvozovkách Umožnuje použití dvojitých uvozovek pro přidání řetězců do format model části

Konverze DATE na znaky Různé formáty pro výstup z funkce TO_CHAR

Konverze znaků na DATE Zajišťuje ji funkce TO_DATE, Umožňuje konverzi řetězců do DATE formátu TO_DATE('character string', 'format model') Př. Převod řetězce Březen 17, 2011 do příslušného datového typu TO_DATE('November 3, 2001', 'Month dd, RRRR')

Konverze čísel na znaky Konverzní funkce umožňuje formátovat různé typy výstupů Př.

Problém jménem NULL Existují situace, kdy je nutné zahrnout výskytu všech hodnot databázi do různých reportů (typicky při přípravě statistik) Hodnoty NULL však mohou výrazně ovlivnit výsledek, je nutné je tedy ošetřit Funkce pro práci s NULL NVL, NVL2 NULLIF COALESCE

NVL Konvertuje NULL hodnotu na definovaný pevný datový typ SELECT NVL(comments, 'no comment') FROM D_PLAY_LIST_ITEMS; Př. NVL(auth_expense_amt,0) NVL(hire_date,'01-JAN-97') NVL(speciality,'None Yet')

NVL2 Má 3 atributy, která ve zkratce pracují takto Není-li hodnota argumentu NULL, pak funkce vrací druhý argument Je-li první hodnota argumentu NULL, pak funkce vrací třetí argument SELECT last_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) AS income FROM employees;

NULLIF Porovnává dvě funkce, výrazy Pokud jsou shodné, funkce vrací NULL Pokud jsou různé, vrací funkce první výraz SELECT first_name, LENGTH(first_name) "Length FN", last_name, LENGTH(last_name) "Length LN", NULLIF(LENGTH(first_name), LENGTH(last_name)) AS "Compare Them" FROM D_PARTNERS;

COALESCE Rozšíření funkce NVL o možnost práce s více výrazy COALESCE ( expression 1, expression 2,... expression n) V případě, že je první výraz NULL, funkce pokračuje v běhu až narazí na první ne-null hodnotu, kterou vrátí

COALESCE SELECT last_name, COALESCE(commission_pct, salary, 10) comm FROM employees ORDER BY commission_pct; Který z prodejců nedostává provizi?

Více-řádkové funkce Pracují s množinou vstupů a vrací jeden souhrnný výsledek AVG COUNT MAX MIN SUM