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



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

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

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

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

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

Databázové systémy I

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

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

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

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

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

PG 9.5 novinky ve vývoji aplikací

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

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

KIV/ZIS - SELECT, opakování

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

6. SQL složitější dotazy, QBE

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

Kapitola 4: SQL. Základní struktura

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

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

Databáze SQL SELECT. David Hoksza

Databázové systémy a SQL

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

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

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

Ú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

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

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

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

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

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

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

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

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

Operátory ROLLUP a CUBE

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

Jazyk S Q L základy, příkazy pro práci s daty

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

MS Access Dotazy SQL

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

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

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

Jazyk SQL slajdy k přednášce NDBI001

- sloupcové integritní omezení

Materiál ke cvičením - SQL

Databázové systémy a SQL

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

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

Materializované pohledy

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

RNDr. Jakub Lokoč, Ph.D. RNDr. Michal Kopecký, Ph.D. Katedra softwarového inženýrství Matematicko-Fyzikální fakulta Univerzita Karlova v Praze

Databáze 2011/2012 SQL SELECT II. RNDr.David Hoksza, Ph.D.

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

5. blok Souhrnné a skupinové dotazy

Jazyk SQL databáze SQLite. připravil ing. petr polách

Databázové systémy I

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

1. Relační databázový model

RELAČNÍ DATABÁZOVÉ SYSTÉMY

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

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

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

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

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

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

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

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

Použití databází na Webu

Obsah. SQL konstrukce select join Rekurze (rekurzivní with) Analytické funkce, group by Pivoting

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

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

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Databázové systémy a SQL

Databázové systémy Tomáš Skopal

U koly na procvic ení jazyka T-SQL

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

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Informační systémy 2008/2009. Radim Farana. Řešený příklad. Struktura navržené databáze

Distanční opora předmětu: Databázové systémy Tématický blok č. 1: Dotazovací jazyk SQL Autor: RNDr. Jan Lánský, Ph.D.

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

Řešené příklady STUDENT(RČ, JMÉNO, SPECIALIZACE) PŘEDMĚT(KÓD, NÁZEV, SYLLABUS, GARANT) ZÁPIS(RČ, KÓD, SEMESTR, ZNÁMKA)

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

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

Zápisování dat do databáze

FAKULTA STAVEBNÍ STUDIJNÍ PROGRAM: GEODÉZIE A KARTOGRAFIE TYP PROGRAMU: MAGISTERSKÝ STUDIJNÍ OBOR: GEOMATIKA ÚVOD DO ZPRACOVÁNÍ PROSTOROVÝCH DAT

DATA CUBE. Mgr. Jiří Helmich

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

SQL - trigger, Databázové modelování

5. POČÍTAČOVÉ CVIČENÍ

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

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

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Transkript:

5 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, Spojení tabulek, agregační dotazy, jednoduché a složené dotazy, dotazy DML. Doporučená literatura: Gruber, M. Mistrovství v SQL. Svazek 1. Praha : SoftPress s.r.o., 2004. ISBN 80-86497-62-3 2 Dotazy přes více tabulek Z principu optimální databáze vyplývá, že data jsou rozdělena do více tabulek. Je třeba položit SQL dotaz na více tabulek současně. Chceme vypsat informace jako jméno, příjmení a ne ID Musíme definovat spojení mezi tabulkami Spojení pomocí WHERE Spojení pomocí JOIN U názvů sloupců musíme uvádět ze které tabulky pocházejí. tzakaznik.jmeno, tobjednavka.cena 3 1

Dotaz pomocí WHERE Výběr jména a příjmení zákazníka spolu s cenou jeho objednávky SELECT tzakaznik.jmeno, tzakaznik.prijmeni, tobjednavka.cena FROM tzakaznik as z, tobjednavky as o WHERE o.idzak = z.id; Můžeme použít i rozšiřující kritéria spojená pomocí logických funkcí SELECT tzakaznik.jmeno, tzakaznik.prijmeni, tobjednavka.cena FROM tzakaznik, tobjednavky WHERE (tobjednavky.idzak = tzakaznik.id) AND (tzakaznik.jmeno = Petr ); 4 Spojení tabulek pomocí JOIN Slouží k položení dotazu přes více tabulek Syntaxe SELECT [seznam_poli] FROM leva_tab <LEFT RIGHT> [OUTER] JOIN prava_tab ON podminka; 5 Spojení tabulek pomocí JOIN INNER JOIN Obsahuje jen hodnoty, které vyhovují kriteriu Obdobný výsledek jako použití WHERE Syntaxe SELECT seznam_poli FROM Tab1 INNER JOIN Tab2 ON podminka; SELECT tzakaznik.jmeno, tzakaznik.prijmeni, tobjednavka.cena FROM tzakaznik INNER JOIN tobjednavky ON tobjednavky.idzak = tzakaznik.id; 6 2

Spojení mimo rovnost SELECT Osoby.* FROM Osoby INNER JOIN Osoby As TMP On Osoby.ID < TMP.ID; SELECT Osoby.* FROM Osoby INNER JOIN Osoby As TMP On Osoby.ID <> TMP.ID; 1 2 3 1 2 3 1, 2 1, 3 2, 3 1, 2 1, 3 2, 1 2, 3 3, 1 3, 2 7 Spojení tabulek pomocí JOIN LEFT JOIN Z levé tabulky se vyberou všechny záznamy Z pravé jen ty, které vyhovují podmínce Zbytek bude mít hodnotu NULL Objednávky jsou přiřazeny k zákazníkům RIGHT JOIN Zákazníci k objednávkám SELECT tzakaznik.jmeno, tzakaznik.prijmeni, tobjednavka.cena FROM tzakaznik LEFT JOIN tobjednavky ON tobjednavky.idzak = tzakaznik.id; 8 Záznamy bez podřízených záznamů Využití výsledku spojení: SELECT Hlavni.* FROM Hlavni LEFT JOIN Vedlejsi ON Hlavni.PrimarniKlic = Vedlejsi.CiziKlic WHERE Vedlejsi.PrimarniKlic IS NULL; 9 3

Spojení tabulek pomocí JOIN FULL JOIN Vypíše všechny záznamy z obou tabulek, U záznamů, které nevyhovují podmínce je opět NULL, Uděláme v podstatě LEFT i RIGHT JOIN současně. 10 Spojení tabulek pomocí JOIN CROSS JOIN Vypíše kartézský součin množin záznamů. Kombinace každý s každým. Vhodné pro generování testovacích množin, rozpisu každý s každým. Nepíše se podmínka. SELECT tzakaznik.jmeno, tzakaznik.prijmeni, tobjednavka.cena FROM tzakaznik CROSS JOIN tobjednavky; 11 Spojení tabulek pomocí JOIN OUTER JOIN Vypíše i ty záznamy, které nevyhovují podmínce Dá se kombinovat s LEFT a RIGHT SELECT tzakaznik.jmeno, tzakaznik.prijmeni, tobjednavka.cena FROM tzakaznik LEFT OUTER JOIN tobjednavky ON tobjednavky.idzak = tzakaznik.id; 12 4

Agregační funkce Vestavěné funkce používané pro souhrny Vrací jedinou hodnotu jako výsledek AVG - Aritmetický průměr COUNT - Počet hodnot ve výrazu MAX - Nejvyšší hodnota výrazu MIN - Nejnižší hodnota výrazu SUM - Součet všech hodnot výrazu SELECT SUM(Cena) FROM Objednavky; Vrátí celkovou cenu všech objednávek. 13 Seskupení hodnot Používá se spolu s agregačními funkcemi Pro množinu záznamů GROUP BY SELECT IDZak, SUM(Cena) FROM Objednavky GROUP BY IDZak; V klauzili GROUP BY musí být uvedeny všechny neagregované sloupce SELECT IDZak, Datum, SUM(Cena) FROM Objednavky GROUP BY IDZak, Datum; Můžeme využít i WHERE SELECT IDZak, Datum, SUM(Cena) FROM Objednavky WHERE IDZak=3 GROUP BY IDZak, Datum; 14 Seskupení hodnot Pokud chceme vložit omezující podmínku přidáme HAVING <podmínka> Použití HAVING jen s GROUP BY a agregační funkcí Jiné použití nemá smysl SELECT IDZak, SUM(Cena) FROM Objednavky GROUP BY IDZak HAVING (SUM(Cena) > 300); 15 5

Složené dotazy Výsledek jednoho dotazu je argumentem jiného dotazu. Nejčastěji v rámci klauzulí SELECT, WHERE. 16 Skalární hodnoty V rámci klauzule SELECT SELECT tblsteps.*, stpprice/(select Sum(stpPrice) FROM tblsteps) AS stpperc FROM tblsteps; V rámci klauzule WHERE SELECT tblsteps.* FROM tblsteps WHERE tblsteps.stpprice>(select Avg(stpPrice) as stppriceavg FROM tblsteps); 17 Propojení vloženého dotazu SELECT tblsteps.* FROM tblsteps WHERE tblsteps.stpprice)> (SELECT Avg(stpPrice) as stppriceavg FROM tblsteps as Pom WHERE tblsteps.stpoperation=pom.stpoperation); Položka nadřízené tabulky Položka podřízené tabulky 18 6

Vektor hodnot Testování existence seznamu (EXISTS, NOT EXISTS). Porovnání hodnoty se seznamem vrácených hodnot: IN - nachází se v seznamu, ANY - podmínka platí alespoň pro jednu hodnotu v seznamu, ALL - podmínka platí pro všechny hodnoty v seznamu. 19 Vektor hodnot WHERE Adresy.DatumNarozeni IN (SELECT Adresy.DatumNarozeni FROM Adresy WHERE Adresy.Prijmeni= Novak ) vrátí všechny osoby, které se narodily stejný den jako některý z Nováků WHERE Adresy.DatumNarozeni < ANY (SELECT Adresy.DatumNarozeni FROM Adresy WHERE Adresy.Prijmeni= Novak ) vrátí všechny osoby, které se narodily dříve něž některý z Nováků WHERE Adresy.DatumNarozeni < ALL (SELECT Adresy.DatumNarozeni FROM Adresy WHERE Adresy.Prijmeni= Novak ) vrátí jen osoby, které se narodily dříve něž všichni Nováci 20 Hledání duplicitních záznamů SELECT * FROM tblsteps WHERE stpoperation) In (SELECT stpoperation FROM tblsteps As Tmp GROUP BY stpoperation HAVING Count(*)>1) ORDER BY tblsteps.stpoperation; O duplicitě rozhoduje jedna položka 21 7

Hledání duplicitních záznamů SELECT Adresy.* FROM Adresy WHERE Adresy.Prijmeni In (SELECT [Prijmeni] FROM [Adresy] As Tmp GROUP BY [Prijmeni],[Jmeno] HAVING Count(*)>1 And [Jmeno] = [Adresy].[Jmeno]) ORDER BY Adresy.Prijmeni, Adresy.Jmeno; Propojení ostatních kontrolovaných položek 22 Vkládání nových záznamů Určení jednotlivých hodnot INSERT INTO tabulka (seznam položek) VALUES (seznam hodnot); INSERT INTO Pracovnici (pr_osc, pr_jmeno) VALUES (122, 'Jan Kvákal'); 23 Vkládání nových záznamů Převzetí záznamů z jiné tabulky INSERT INTO tabulka (seznam položek) SELECT seznam položek FROM zdroj; INSERT INTO PracovniciByvali (pr_osc, pr_jmeno) SELECT pr_osc, pr_jmeno FROM Pracovnici WHERE pr_osc<100; 24 8

Úprava záznamů UPDATE Tabulka SET položka=hodnota WHERE primární klíč=hodnota; UPDATE Pracovnici SET pr_jmeno='jan Kvákal' WHERE pr_osc=122; 25 Odstranění záznamů DELETE FROM tabulka WHERE podmínka; DELETE FROM Pracovnici WHERE pr_osc=122; 26 Spojení záznamů z více zdrojů Zdroj1 UNION Zdroj2; SELECT pr_osc, pr_jmeno FROM Pracovnici UNION SELECT p_pracovnik, p_typ FROM prace; 27 9

Další operace podle standardu SQL Rozdíl záznamů ze dvou zdrojů Zdroj1 EXCEPT Zdroj2; (také MINUS) vrátí záznamy Zdroje1, které nejsou ve Zdroji2. Shoda záznamů dvou zdrojů Zdroj1 INTERSECT Zdroj2; Vrátí záznamy nacházející se v obou zdrojích. Rozšíření ALL, závisí na implementaci. MS SQL Server nepodporuje 28 Spojení záznamů z více zdrojů Požadavky na shodu datových typů: Data type of ith column Not data type-compatible (data conversion not handled implicitly by Microsoft SQL Server ). Both fixed-length char with lengths L1 and L2. Both fixed-length binary with lengths L1 and L2. Either or both variable-length char. Either or both variable-length binary. Both numeric data types (for example, smallint, int, float, money). Both columns' descriptions specify NOT NULL. Data type of ith column of results table Error returned by SQL Server. Fixed-length char with length equal to the greater of L1 and L2. Fixed-length binary with length equal to the greater of L1 and L2. Variable-length char with length equal to the maximum of the lengths specified for the ith columns. Variable-length binary with length equal to the maximum of the lengths specified for the ith columns. Data type equal to the maximum precision of the two columns. For example, if the ith column of table A is of type int and the ith column of table B is of type float, then the data type of the ith column of the results table is float because float is more precise than int. Specifies NOT NULL. 29 10