Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
SQL Další dotazy a pohledy
Základy jazyka SQL Jan Tichava
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Výpočetní technika Akademický rok 2008/2009 Letní semestr Mgr. Petr Novák Katedra informatiky a geoinformatiky FŽP UJEP
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Radek Špinka Přepínače MSSQL výběr.
SQL Přednáška DB1. Literatura CONNOLLY, T.M.-BEGG,C.E.-STRACHAN,A.D.: Database Systems – A Practial Approach to Design, Implementation and Management.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Databázové systémy 2 Cvičení č. 7 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Relační databáze.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Fakulta elektrotechniky a informatiky
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy SQL Výběr dat.
TEMPORÁLNÍ DATABÁZE A TSQL2
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B15 Autor Ing. Jiří Kalousek Období vytvoření březen.
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
SQL Structured Query Language
Databázové systémy I Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Příkazy jazyka SQL ve VFP a na SQL Serveru
Databáze MS ACCESS 2010.
Filtrování záznamů Filtr podle výběru Filtr podle formuláře Rozšířený filtr Symboly, výrazy Dotazy.
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy a SQL
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 7 SQL – JOIN.
Přednáška 9 Triggery.
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1 Ing. Monika Borkovcová, Ph.D.

Databázové systémy 1 - př. 5 Obsah Příkaz SELECT Pohledy Vnitřní, vnější spojování tabulek Operátory, výrazy, podmínky Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT Příkaz SELECT slouží k získávání dat z databáze. SELECT <nazev sloupce(sloupcu)> FROM <nazev tabulky>; Zobrazený příklad, který je ten nejjednodušší, musí obsahovat: Klauzuli SELECT, kde specifikujeme co chceme získat Klazuli FROM, kde specifikujeme odkud to chceme získat Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT Projekce – nám říká, které sloupce budeme zobrazovat Restrikce (selekce) – nám říká, které řádky budeme zobrazovat Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT Výběr dat ze všech sloupců tabulky provedeme použitím zástupného znaku * na pozici názvu sloupce za klauzulí SELECT SELECT * FROM a_hr.zamestnanci; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT Výběr dat ze všech sloupců tabulky může provézt také explicitním vyjmenováním všech sloupců SELECT zeme_id, zeme_nazev, region_id FROM a_hr.zeme; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT Omezení výběru dat pouze z některých sloupců provedeme výčtem požadovaných sloupců SELECT jmeno, prijmeni, email FROM a_hr.zamestnanci; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT V příkazu SELECT můžeme používat přímo aritmetické operátory. Například můžeme zobrazit rovnou platy zaměstnanců navýšené o 5%. SELECT jmeno, prijmeni, mzda*1.05 FROM a_hr.zamestnanci; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Příkaz SELECT V příkazu SELECT můžeme používat přímo aritmetické operátory. Například můžeme zobrazit rovnou platy zaměstnanců navýšené o 5%. SELECT jmeno, prijmeni, mzda*1.05 FROM a_hr.zamestnanci; Databázové systémy 1 - př. 5

Příkaz SELECT Alias – umožňuje přejmenování sloupce ve výstupu, případně pod-dotazu nebo tabulky SELECT * | sloupec | výraz [ AS alias], … FROM tabulka; SELECT jmeno, prijmeni, mzda*1.05 AS „novy_plat“ FROM a_hr.zamestnanci; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 WHERE Klauzule WHERE – provádí v dotazu restrikci Rozšiřuje syntaxi příkazu SELECT na: SELECT <sloupce> FROM <tabulka> [WHERE podmínka(y)] Také se používá u příkazů INSERT, UPDATE a DELETE Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 WHERE Použití klauzule WHERE nám umožňuje definovat, které řádky se do výsledku zařadí. SELECT jmeno, prijmeni, email FROM a_hr.zamestnanci; (vrátí jména, příjmení a emaily všech zaměstnanců) SELECT jmeno, prijmeni, email FROM a_hr.zamestnanci WHERE zamestnanec_id=22; (vrátí jméno, příjmení a email pracovníka s id 22) Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 WHERE Povolené operace v klauzuli WHERE = rovno > větší než >= větší nebo rovno < menší než <= menší nebo rovno <>(!=, ^=) nerovno Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 WHERE Povolené operace v klauzuli WHERE = rovno > větší než >= větší nebo rovno < menší než <= menší nebo rovno <>(!=, ^=) nerovno Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 WHERE Povolené operace v klauzuli WHERE BETWEEN … AND rozmezí hodnot IN (NOT IN) výčet hodnot ALL všechny hodnoty ANY některá hodnota LIKE (NOT LIKE) jako EXISTS (NOT EXISTS) existuje IS NULL (IS NOT NULL) je/není NULL Databázové systémy 1 - př. 5

Syntaxe příkazu SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION|UNION ALL|INTERSECT|MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] Databázové systémy 1 - př. 5

Syntaxe příkazu SELECT <seznam výstupních sloupců> =[ALL|DISTINCT|DISTINCTROW] { * | <specifikace sloupce1> [, <specifikace sloupce2> [, …]] } <specifikace sloupce> = { <název sloupce> | < specifikace tabulky > . <název sloupce> | < specifikace tabulky > . * | výraz} [[AS] <pojmenování sloupce> ] < specifikace tabulky > = { <název tabulky> | <pojmenování tabulky> | <název pohledu> } [<pojmenování tabulky>] Databázové systémy 1 - př. 5

Syntaxe příkazu SELECT DISTINCT - ve výsledku nebudou duplicitní řádky, které mají stejné hodnoty ve vypisovaných sloupcích DISTINCTROW - ve výsledku nebudou duplicitní řádky, které mají stejné hodnoty ve všech sloupcích bez ohledu na to, zda jsou vypisovány ALL – ve výsledku budou všechny řádky bez ohledu na duplicity, defaultní nastavení Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 SELECT - příklady Příklad: SELECT * FROM dodavatele WHERE mesto = 'Praha 4'; SELECT dodavatel_id, nazev, zastoupeni WHERE dodavatel_id > 4; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy Pohled je předpis pro získání podmnožiny dat z jedné či více tabulek. Pohled obsahuje JEN předpis, NIKOLI data. S pohledy se pracuje obdobně jako s vlastními tabulkami. Určitá omezení souvisí například se změnou dat. Jednoduché pohledy - vytvořeny z dat jediné tabulky, - neobsahují žádné funkce ani skupiny, - můžeme v nich provádět i změny (nezakážeme-li to) Komplexní pohledy - jsou vytvořeny z dat více databázových tabulek, - mohou obsahovat funkce nebo skupiny, - změnu dat umožňují jen ve velmi omezených případech Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy - syntaxe Vytvoření pohledu: CREATE [OR REPLACE] VIEW název_pohledu [alias] AS dotaz [seznam_omezení]; Příklady omezení: WITH READ ONLY – nelze vkládat, mazat ani měnit záznamy, WITH CHECK OPTION – upravované či vkládané záznamy musí vyhovovat podmínce uvedené v klausuli WHERE uvedeného dotazu. Odstranění pohledu: DROP VIEW název_pohledu; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy – příklady 1 A_OBCHOD SCHÉMA tabulka PRACOVNICI CREATE VIEW Pracovnici_pobocky AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici WITH READ ONLY; Použití: SELECT * FROM Pracovnici_pobocky; SELECT Jmeno, Pobocka FROM Pracovnici_pobocky WHERE Pobocka='3'; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy – příklady 2 A_OBCHOD SCHÉMA CREATE VIEW Prumer_mzda AS SELECT Funkce, AVG(Mzda) AS Prumer FROM Pracovnici GROUP BY Funkce; SELECT Prumer FROM Prumer_mzda WHERE Funkce LIKE 'obchodník'; SELECT Jmeno, Pracovnici.Funkce, Mzda - Prumer_mzda.prumer AS Rozdil FROM Pracovnici JOIN Prumer_mzda ON Pracovnici.Funkce = Prumer_mzda.Funkce; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy – příklady 3 A_OBCHOD SCHÉMA CREATE VIEW Pohled_Max_mzda AS SELECT Max(Mzda) AS Max_mzda FROM Pracovnici WHERE Funkce NOT LIKE 'ředitel'; SELECT Max_mzda FROM Pohled_Max_mzda; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy – příklady 4 CREATE VIEW Pracovnici_pobocky AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici; INSERT INTO Pracovnici_pobocky (Jmeno, Funkce, Pobocka) VALUES ('Daniel Kohout', 'vrátný', 'C'); UPDATE Pracovnici_pobocky SET Pobocka='9' WHERE Pobocka='C'; DELETE FROM Pracovnici_pobocky WHERE Pobocka='9'; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy – příklady CREATE VIEW Pracovnici_centraly AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici WHERE Pobocka='C' WITH CHECK OPTION; INSERT INTO Pracovnici_centraly(Jmeno, Funkce, Pobocka) VALUES ('Daniel Kohout', 'vrátný', 'C'); VALUES ('Pavel Kohout', 'vrátný', '1'); UPDATE Pracovnici_centraly SET Pobocka='9' WHERE Pobocka='C'; UPDATE Pracovnici_centraly SET Pobocka='C' WHERE Pobocka='9'; DELETE FROM Pracovnici_centraly WHERE Pobocka='9'; DELETE FROM Pracovnici_centraly WHERE Pobocka='C'; Nelze – omezení WITH CHECK OPTION Nemá smysl – ve výsledku pohledu nejsou pracovnici s jinou pobočkou, než 'C'; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Pohledy - význam Zjednodušení konstrukce náročných dotazů, Opakované využití vytvořeného pohledu na standardní použití (minimalizace chyb, zrychlení práce, případné změny ovlivní například jen pohled), Bezpečnost – mohu definovat odlišná práva pro přístup k tabulce a pohledům (například omezení přístupu k citlivým informacím). Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Druhy spojení Spojení (join): spojení založené na libovolném typu vztahu mezi hodnotami propojovacích položek Ekvivalentní spojení (equi-join): spojení založené na shodě hodnot v propojovacích položkách Spojení nerovností (non-equi-join): spojení založené na nerovnosti hodnot v propojovacích položkách Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Druhy spojení Vnitřní spojení (inner join, exkluzivní spojení): spojení, v němž jsou záznamy ze dvou tabulek kombinovány a přidávány k výsledkům dotazu pouze tehdy, když k záznamům z první tabulky existují odpovídající záznamy v tabulce druhé Vnější spojení (outer join, inkluzivní spojení): spojení, kdy je každý odpovídající záznam ze dvou tabulek kombinován do jednoho záznamu ve výsledku dotazu. Není-li k záznamu z tabulky, která poskytuje všechny své záznamy, nalezen odpovídající záznam ve druhé tabulce, je přesto zahrnut do výsledků dotazu s prázdnými poli v místech, kde nebyl nalezen odpovídající záznam ve druhé tabulce. Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Druhy spojení Samospojení (self–join, recursive join): spojení, v němž jsou záznamy z tabulky kombinovány s jinými záznamy z téže tabulky Kartézský součin (cartesian product-join): Spojení bez podmínek. Záznamy z tabulek jsou kombinovány stylem každý s každým. Výsledná množina obsahuje MxN záznamů. Varianta kartézského součinu od Oracle je cross-join. Přirozené spojení (natural-join): Spojení, kde si systém sám najde nejvhodnější sloupce, přes které bude spojovat Databázové systémy 1 - př. 5

Spojení tabulek – syntaxe SELECT Základní syntaxe pro vnitřní spojení <seznam tabulek> = < specifikace tabulky1> JOIN < specifikace tabulky2> ON < podmínky spojení> [ JOIN < specifikace tabulky3> ON < podmínky spojení> [, … ] ] Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př. 5

Spojení tabulek – syntaxe SELECT Vnitřní spojení – varianta 2. <seznam tabulek> =[ < specifikace tabulky1> [, <specifikace tabulky2> [, …]] } Sloupce, přes které se realizuje spojení se uvádějí v podmínce za klíčovým slovem WHERE <podmínky spojení> . Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele, produkty WHERE dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př. 5

Spojení tabulek – syntaxe SELECT Vnitřní spojení INNER INNER JOIN, JOIN Do výsledku budou zahrnuty pouze ty řádky, pro které byla nalezena odpovídající hodnota v druhé tabulce. Vnější spojení OUTER Ve výsledku budou i ty řádky, pro které nebyly nalezeny odpovídající hodnoty v druhé tabulce. Pravé (RIGHT JOIN, RIGHT OUTER JOIN) .. Ve výsledku budou všechny řádky z pravé (druhé tabulky). Nebyl-li nalezen aspoň jeden odpovídající řádek v levé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z první tabulky. Levé (LEFT JOIN, LEFT OUTER JOIN) .. Ve výsledku budou všechny řádky z levé (první tabulky). Nebyl-li nalezen aspoň jeden odpovídající řádek v pravé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z druhé tabulky. Úplné (FULL JOIN) .. Ve výsledku budou všechny řádky z levé i pravé (první i druhé tabulky). Databázové systémy 1 - př. 5

Spojení tabulek – syntaxe SELECT Vnější spojení – syntaxe podle Oracle Nepoužívá se klíčové slovo JOIN, spojení probíhá přes klazuli WHERE Tabulky, které NEBUDOU obsaženy ve výsledku celé, jsou v podmínkách označeny jako symbolem (+) Příklad SELECT * FROM a_hr.zamestnanci, a_hr.oddeleni WHERE zamestnanci.oddeleni_id=oddeleni.oddeleni_id(+); -- odpovídá dotazu SELECT * FROM a_hr.zamestnanci LEFT JOIN a_hr.oddeleni ON zamestnanci.oddeleni_id=oddeleni.oddeleni_id; Databázové systémy 1 - př. 5

Spojení tabulek – syntaxe SELECT Obecný zápis syntaxe pro různé druhy spojení <seznam tabulek> = < specifikace tabulky1> [ { INNER | { LEFT | RIGHT | FULL } [OUTER] }] JOIN < specifikace tabulky2> ON < podmínky spojení> [ { INNER | { LEFT | RIGHT | FULL } [OUTER] }] JOIN < specifikace tabulky3> ON < podmínky spojení> [, … ] ] ] Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př. 5

Spojení tabulek – syntaxe SELECT Kartézský součin SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele, produkty Oracle Cross Join SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele CROSS JOIN produkty Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Spojení tabulek A_OBCHOD SCHÉMA Příklad: SQL> DESC Produkty Name Null? Type ---------------------- -------- ----------------- Produkt_ID NOT NULL NUMBER(8) Oznaceni NOT NULL VARCHAR(30) Dodavatel_ID NUMBER(4) … SQL> SELECT * FROM Produkty; PRODUKT_ID DODAVATEL_ID OZNACENI 6 2 A600N 7 A2500H 8 A8JN-4P019M 9 3 Lifebook S2110 17 null Star new DODAVATEL_ID NAZEV 2 Asus 3 Fujitsu Siemens 8 UMAX 9 VBI SQL> DESC Dodavatele Name Null? Type ----------------------------- -------- ----------------- Dodavatel_ID NOT NULL NUMBER(4) Nazev NOT NULL VARCHAR2(100) SQL> SELECT * FROM Dodavatele; Databázové systémy 1 - př. 5

Spojení tabulek – příklady A_OBCHOD SCHÉMA Příklad - vnitřní spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty, Dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens Databázové systémy 1 - př. 5

Spojení tabulek – příklady A_OBCHOD SCHÉMA Příklad - vnitřní spojení s klauzulí JOIN SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty INNER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens Databázové systémy 1 - př. 5

Spojení tabulek – příklady A_OBCHOD SCHÉMA Příklad - levé vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty LEFT OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens 17 null Databázové systémy 1 - př. 5

Spojení tabulek – příklady A_OBCHOD SCHÉMA Příklad - pravé vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty RIGHT OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Produkt_Id Nazev 6 Asus 7 8 9 Fujitsu Siemens null UMAX VBI Databázové systémy 1 - př. 5

Spojení tabulek – příklady A_OBCHOD SCHÉMA Příklad - úplné vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty FULL OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens 17 null UMAX VBI Databázové systémy 1 - př. 5

Spojení tabulek – příklady Příklady využití vnějších spojení: Zobrazení všech dodavatelů, tedy i těch, kteří nedodávají žádný výrobek Zobrazení všech výrobků, tedy i těch, které nejsou přiřazeny žádnému dodavateli S využitím agregačních funkcí zobrazení počtu výrobků, které dodávají jednotliví dodavatelé (s vnějším spojením se zobrazí i hodnoty 0 u těch dodavatelů, kteří žádný výrobek nedodávají, v případě vnitřního spojení ve výsledku nebudou vůbec zahnuti) Databázové systémy 1 - př. 5

Řazení řádků ve výsledku SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION|UNION ALL|INTERSECT|MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] <seznam kritérií třídění>= <kritérium třídění 1> [<kritérium třídění 2> [, …]] <kritérium třídění>= {<výraz> | <specifikace sloupce> | <pořadí sloupce>} } [{ ASC | DESC }] Ve výsledku budou řádky seřazeny dle požadavků uvedených za klauzulí ORDER BY: ASC .. Vzestupně DESC .. Sestupně Databázové systémy 1 - př. 5

Řazení řádků ve výsledku SELECT A_OBCHOD SCHÉMA SELECT nazev FROM dodavatele WHERE mesto <> 'Ostrava' ORDER BY nazev DESC; SELECT nazev, mesto FROM dodavatele WHERE mesto <> 'Ostrava' ORDER BY 2 ASC, 1 DESC; SELECT mesto, zastoupeni FROM dodavatele WHERE nazev <> ' IBM' ORDER BY mesto ASC, zastoupeni DESC ; Databázové systémy 1 - př. 5

Aritmetické operátory Umožňují na základě původních hodnot vypočítat hodnoty nové. Sčítání + (unární i binární) Odčítání - (unární i binární) Násobení * Dělení / Priorita Nejprve se vyhodnocují části výrazu uzavřené v závorkách Násobení a dělení mají přednost před sčítáním a odečítáním Operátory se stejnou prioritou se vyhodnocují zleva doprava Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Operátor zřetězení Umožňuje spojovat hodnoty ze sloupců a znakové řetězce Zřetězení || Příklad SELECT nazev, mesto || ' ' || zastoupeni AS pobocka FROM dodavatele; Databázové systémy 1 - př. 5

Operátory pro porovnávání = rovnost <> nerovnost < menší než > větší než <= menší nebo rovno >= větší nebo rovno Databázové systémy 1 - př. 5

Operátory pro porovnávání [NOT] BETWEEN x AND y [není] větší nebo rovno x a menší nebo rovno y [NOT] IN [ne] patří do množiny ANY, SOME porovnání hodnoty s každou hodnotou v seznamu nebo řádkem vnořeného dotazu, musí být doplněn jedním z operátorů =, <,>, <=, >=. Výraz je pravdivý, pokud je pravdivý alespoň pro JEDNU položku seznamu. ALL porovnání hodnoty s každou hodnotou v seznamu nebo řádkem vnořeného dotazu, musí být doplněn jedním z operátorů =, <,>, <=, >=. Výraz je pravdivý, pokud je pravdivý pro VŠECHNY položky seznamu. Databázové systémy 1 - př. 5

Operátory pro porovnávání [NOT] EXISTS ve vnořeném dotazu je vrácen alespoň jeden řádek IS [NOT] NULL test na [ne] rovnost NULL X [NOT] LIKE y porovnání řetězce s maskou obsahující zástupné znaky _ právě jeden libovolný znak % nula nebo více libovolných znaků Databázové systémy 1 - př. 5

Operátory pro porovnávání A_OBCHOD SCHÉMA Příklady SELECT oznaceni FROM produkty WHERE cena BETWEEN 20000 AND 30000 SELECT Produkty.oznaceni FROM Produkty, Dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id AND dodavatel.nazev IN (‘UMAX’, ‘Asus’) WHERE cena = ANY (20000, 30000, 25000, 35000) WHERE cena>= ALL (SELECT cena FROM produkty) Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 SELECT …. LIKE A_OBCHOD SCHÉMA LIKE umožňuje využití zástupných znaků při definici podmínek za WHERE v SQL příkazech jako select, insert, update, delete. % nahrazuje libovolný řetězec libovolné délky (i nulové délky) _ nahrazuje libovolný jeden znak Příklady: SELECT * FROM dodavatele WHERE mesto LIKE '%ra%'; SELECT * FROM dodavatele WHERE mesto NOT LIKE 'Pha%'; SELECT * FROM produkty WHERE oznaceni LIKE 'TravelMate 2__0'; Databázové systémy 1 - př. 5

Operátory pro porovnávání A_OBCHOD SCHÉMA Příklady SELECT oznaceni FROM produkty WHERE EXISTS (SELECT * FROM dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id); SELECT nazev FROM dodavatele WHERE zastoupeni IS NULL; SELECT nazev, oznaceni FROM dodavatele, produkty WHERE dodavatele.dodavatel_id = produkty.dodavatel_id AND oznaceni LIKE 'VAIO%'; Databázové systémy 1 - př. 5

Databázové systémy 1 - př. 5 Prostor pro otázky a praktické ukázky Děkuji za pozornost Databázové systémy 1 - př. 5