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

Podobné dokumenty
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

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

Konceptuální modelování

Úvod, terminologie. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 1

Transformace ER SQL. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 9

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

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,...

Databáze SQL SELECT. David Hoksza

Seminá e. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, sem. 1-13

Normalizace rela ního schématu

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

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

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

Transak ní zpracování I

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

Databázové modely. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 2

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

Databázové systémy BIK-DBS

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

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Jazyk SQL 3 - DML, DDL, TCL, DCL

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

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

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

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

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

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

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

Databázové systémy úvod

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

RELAČNÍ DATABÁZOVÉ SYSTÉMY

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

Kapitola 4: SQL. Základní struktura

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

Databázové a informační systémy

Jazyk SQL slajdy k přednášce NDBI001

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

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

4IT218 Databáze. 4IT218 Databáze

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

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

Databázové systémy Tomáš Skopal

Skalární sou in. Úvod. Denice skalárního sou inu

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

Binární operace. Úvod. Pomocný text

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

Vektory. Vektorové veli iny

Databázové systémy úvod

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

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

P íklad 1 (Náhodná veli ina)

Relační model dat (Codd 1970)

Integrování jako opak derivování

Transformace konceptuálního modelu na relační

DBS Databázové modely

Dotazování nad stromem abstraktní syntaxe

Databázové systémy BIK-DBS

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

Databázové systémy úvod

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

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

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

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

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

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

PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA III

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

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

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

DBS Konceptuální modelování

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

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

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

DBS Databázové modely

RNÉ MATERIÁLY. PSYCHODIAGNOSTIKA - VYHODNOCENÍ z , 13:19 hodin

Analýzy v GIS. Co se nachází na tomto místě? Kde se nachází toto? Kolik tam toho je? Co se změnilo od? Co je příčinou? Co když?

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

Databázové systémy a SQL

Databázové systémy úvod

Databázové systémy trocha teorie

Databázové systémy a SQL

Ř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)

Operátory ROLLUP a CUBE

1. (18 bod ) Náhodná veli ina X je po et rub p i 400 nezávislých hodech mincí. a) Pomocí ƒeby²evovy nerovnosti odhadn te pravd podobnost

Databázové systémy I

PRG036 Technologie XML

Cenový předpis Ministerstva zdravotnictví 2/2008/FAR ze dne 12. května 2008, o regulaci cen zdravotnických prostředků. I. Pojmy

SQL tříhodnotová logika

Databázové systémy BIK-DBS

Pravd podobnost a statistika - cvi ení. Simona Domesová místnost: RA310 (budova CPIT) web:

DBS Transformace konceptuálního schématu na

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

MS Access Dotazy SQL

Modelování v elektrotechnice

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

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

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

T i hlavní v ty pravd podobnosti

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

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

Transkript:

SQL - úvod Ing. Michal Valenta PhD. Katedra softwarového inºenýrství Fakulta informa ních technologií ƒeské vysoké u ení technické v Praze c Michal Valenta, 2010 Databázové systémy BI-DBS ZS 2010/11, P edn. 6 Evropský sociální fond. Praha & EU: Investujeme do va²í budoucnosti Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 1 / 21

Úvod Principy SQL íkáme, co chceme získat, ne jak se to má d lat. Intuitivn srozumitelný zápis. P ipomíná jednoduché anglické v ty. Nep ipou²tí se ºádné zkratky. Snadná itelnost => odsazování, více ádek. Klí ová slova a názvy objekt nejsou case senzitivní, porovnání et zc ano (pokud není v implementaci na úrovni session e eno jinak MySQL) Standardizace: 1986, 1992, 1999, 2003, 2005, 2008,... Nový standard obvykle zahrnuje p edchozí. Standardy postupn nabalují dal²í rysy (OO, XML,...) Implementace mají svoje odchylky v t²inou podstatná ást standardu 92. Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 2 / 21

Úvod P ehled SQL jazyk pro denici dat (DDL) jazyk pro denice pohled jazyk pro denice IO jazyk pro manipulaci dat a dotazování (DML) jazyk pro p i azení p ístupových práv (DCL) jazyk pro ízení transakcí (TCL) systémový katalog jazyk modul Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 3 / 21

Úvod Schéma p íkladu KINA(NAZEV_K, ADRESA, JMENO_V) FILMY(JMENO_F, REZISER, ROK) ZAKAZNICI(ROD_C, JMÉNO, ADRESA) ZAMESTNANCI(OSOBNI_C, ADRESA, JMENO, PLAT) HERCI(ROD_C, JMENO, ADRESA, SPECIALIZACE) KOPIE(C_KOPIE, JMENO_F) VYPUJCKY(C_KOPIE,OSOBNI_C, ROD_C, CENA,DATUM_V) REZERVACE(JMENO_F, ROD_C) PREDSTAVENI(NAZEV_K, JMENO_F, DATUM) OBSAZENI(JMENO_F, ROD_C_HERCE, ROLE) Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 4 / 21

Syntaxe SELECT jednoduché dotazy SELECT nad 1 tabulkou SELECT základní syntaxe SELECT specikace_sloupc FROM specikace_zdroje [WHERE podmínka_selekce] [ORDER BY specikace_ azení] specikace_sloupc = {DISTINCT ALL} * {jm_sloupce [,jm_sloupce]...} Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 5 / 21

Jednoduché dotazy distinct, order by, výrazy Jednoduché dotazy v SQL D1. Vypi² tabulku jmen reºisér a rok, kdy nato ili n jaký lm. SELECT REZISER, ROK FROM FILMY; Zdroj: NAZEV_F REZISER ROK Nevinná Bínovec V. 1939 Kristián Fri M. 1939 Madla zpívá... Bínovec V. 1940 No ní motýl ƒáp F. 1941 Ohnivé léto ƒáp F. 1939 Dceru²ka k... Bínovec V. 1940 Eva tropí... Fri M. 1939 Cesta do hlubin... Fri M. 1939 Výsledek: REZISER ROK Bínovec V. 1939 Fri M. 1939 Bínovec V. 1940 ƒáp F. 1941 ƒáp F. 1939 Bínovec V. 1940 Fri M. 1939 Fri M. 1939 Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 6 / 21

Jednoduché dotazy distinct, order by, výrazy Jednoduché dotazy v SQL D1. Vypi² tabulku jmen reºisér a rok, kdy nato ili n jaký lm. SELECT REZISER, ROK FROM FILMY ORDER BY REZISER, ROK; Zdroj: NAZEV_F REZISER ROK Nevinná Bínovec V. 1939 Kristián Fri M. 1939 Madla zpívá... Bínovec V. 1940 No ní motýl ƒáp F. 1941 Ohnivé léto ƒáp F. 1939 Dceru²ka k... Bínovec V. 1940 Eva tropí... Fri M. 1939 Cesta do hlubin... Fri M. 1939 Výsledek: REZISER ROK Bínovec V. 1939 Bínovec V. 1940 Bínovec V. 1940 ƒáp F. 1939 ƒáp F. 1941 Fri M. 1939 Fri M. 1939 Fri M. 1939 Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 7 / 21

Jednoduché dotazy distinct, order by, výrazy Jednoduché dotazy v SQL D1. Vypi² tabulku jmen reºisér a rok, kdy nato ili n jaký lm. SELECT DISTINCT REZISER, ROK FROM FILMY: Zdroj: NAZEV_F REZISER ROK Nevinná Bínovec V. 1939 Kristián Fri M. 1939 Madla zpívá... Bínovec V. 1940 No ní motýl ƒáp F. 1941 Ohnivé léto ƒáp F. 1939 Dceru²ka k... Bínovec V. 1940 Eva tropí... Fri M. 1939 Cesta do hlubin... Fri M. 1939 Výsledek: REZISER ROK Bínovec V. 1939 Bínovec V. 1940 ƒáp F. 1939 ƒáp F. 1941 Fri M. 1939 DISTINCT se vztahuje vºdy na celou klauzuli SELECT. azení p i pouºití DISTINCT bývá implicitní (nemusí nutn být). Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 8 / 21

Jednoduché dotazy distinct, order by, výrazy Jednoduché dotazy v SQL D2. Najdi lmy nato ené p ed rokem 1940. SELECT * FROM FILMY WHERE ROK < 1940; Výsledek: JMENO_F REZISER ROK Nevinná Bínovec V. 1939 Kristián Fri M. 1939 Ohnivé léto ƒáp F. 1939 Eva tropí... Fri M. 1939 Cesta do hlubin... Fri M. 1939 Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 9 / 21

Klauzule where Klauzule WHERE D3. Vypi² z tabulky Filmy ádky týkající se lm nato ených v letech 1938-1940. SELECT * FROM Filmy WHERE rok>=1938 AND rok<=1940; Výsledek: JMENO_F REZISER ROK Nevinná Bínovec V. 1939 Kristián Fri M. 1939 Madla zpívá... Bínovec V. 1940 Ohnivé léto ƒáp F. 1939 Dceru²ka k... Bínovec V. 1940 Eva tropí... Fri M. 1939 Cesta do hlubin... Fri M. 1939 alternativa SELECT * FROM Filmy WHERE rok BETWEEN 1938 AND 1940; dopln k 1 SELECT * FROM Filmy WHERE rok NOT BETWEEN 1938 AND 1940; dopln k 2 SELECT * FROM Filmy WHERE NOT (rok BETWEEN 1938 AND 1940); Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 10 / 21

Klauzule where Logické operátory = je rovno <> nebo!= není rovno < je men²í > je v t²í <= je men²í nebo rovno >= je vet²í nebo rovno Between Like... a mnoho dal²ích V klauzuli WHERE lze pouºívat téº logické spojky AND, OR a NOT. Pro správné vyjád ení po adí vyhodnocení se pouºívají závorky. Klauzule WHERE se vyhodnotí jako výraz typu boolean. Tedy TRUE, FALSE nebo NULL. Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 11 / 21

NULL logické operace a výrazy Logické operace, výrazy a hodnota NULL V²echny datové typy (domény) mají bottom prvek NULL. Má význam UNKNOWN, NEUVEDENO, N/A apod.. Nezam ovat s 0! T íhodnotová logika je na operacích AND, OR a NOT denována takto: A B A and B A or B not A TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE NULL NULL TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE NULL FALSE NULL TRUE NULL TRUE NULL TRUE NULL NULL FALSE FALSE NULL NULL NULL NULL NULL NULL NULL Pokud alespo jeden len porovnání (=, <>, <, >, <=, >=) nabývá hodnoty NULL, pak je výsledek porovnání NULL. Hodnota aritmetického výrazu, kde alespo jeden len je NULL je také NULL. Totéº by m lo platit u et zc. Nap íklad výraz: 'A' NULL 'B' by m l být NULL. POZOR: v implementacích to u et zc nemusí být pravda: Oracle: 'A' NULL 'B' = AB PostgreSQL: 'A' NULL 'B' = NULL V praxi je lep²í se NULL hodnot ve výrazech vyhnout s pomocí operátor is null, is not null a coalesce. Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 12 / 21

Syntaxe SELECT spojení SELECT spojení SELECT základní syntaxe SELECT specikace_sloupc FROM specikace_zdroje [WHERE podmínka_selekce] [ORDER BY specikace_ azení] specikace_zdroje = tabulka pohled (vno ený_dotaz ) specikace_zdroje [{LEFT RIGHT FULL} [OUTER]] JOIN specikace_zdroje ON (podmínka_spojení) specikace_zdroje [{LEFT RIGHT FULL} [OUTER]] JOIN specikace_zdroje USING (seznam_sloupc ) specikace_zdroje [{LEFT RIGHT FULL} [OUTER]] NATURAL JOIN specikace_zdroje specikace_zdroje CROSS JOIN specikace_zdroje specikace_zdroje, specikace_zdroje Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 13 / 21

Dotazy nad více tabulkami Dotazy nad více tabulkami D4. Najdi reºiséry, jejichº n které lmy jsou rezervovány. SELECT DISTINCT reziser FROM Filmy JOIN Rezervace ON (Filmy.jmeno_f=Rezervace.jmeno_f); Alternativa 1 SELECT DISTINCT reziser FROM Filmy JOIN Rezervace USING (jmeno_f); Alternativa 2 SELECT DISTINCT reziser FROM Filmy NATURAL JOIN Rezervace; Alternativa 3 SELECT DISTINCT reziser FROM Filmy, Rezervace WHERE Filmy.jmeno_f=Rezervace.jmeno_f; Alternativa 3 je zápis dle standardu SQL86. Je stále pouºitelný. Dotaz je formulován (syntakticky): Filmy x Rezervace (Filmy.nazev_f=Rezervace.nazev_f)[reziser]. Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 14 / 21

Kvalikace a aliasy Dotazy kvalikace, alias D5. Najdi, co hrají v kterých kinech. SELECT * FROM Filmy JOIN Predstaveni ON (Filmy.jméno_f=Predstaveni.jméno_f); Chci-li zadat projekci: Kvalikace v klauzuli select SELECT Predstaveni.nazev_k, Filmy.* FROM Filmy JOIN Predstaveni ON (Filmy.jmeno_f=Predstaveni.jmeno_f) ORDER BY Predstaveni.název_k; Zavedení alias a jejich pouºití SELECT P.název_k, F.* FROM Filmy F JOIN Predstaveni P ON (F.jmeno_f= P.jmeno_f) ORDER BY P.název_k; Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 15 / 21

Dotazy na spojení sama se sebou Dotazy na spojení sama se sebou D6. Najdi dvojice zákazník, kte í mají stejnou adresu. SELECT Soused1.rod_c AS prvni, soused2.rod_c AS druhy FROM Zakazníci Soused1 JOIN Zakaznici Soused2 Using (adresa) WHERE Soused1.rod_c < Soused2.rod_c; Zástupná jména (aliasy) zde slouºí k odli²ení dvou instancí téºe tabulky. Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 16 / 21

Dotazy se spojením a selekcí Dotazy se spojením a selekcí D7. Najdi kina, kde hrají lmy nato ené v roce 1936 nebo 1939, jejichº reºisér není Frin ani Bínovec. SELECT P.nazev_k, F.jmeno_f FROM Filmy F JOIN Predstaveni P ON (F.jmeno_f=P.jmeno_f) WHERE (F.rok = 1936 OR F.rok = 1939) AND NOT (F.reziser = 'Fri ' OR F.reziser = 'Bínovec');... nebo SELECT P.nazev_k, F.jmeno_f FROM Filmy F JOIN Predstaveni P ON (F.jmeno_f=P.jmeno_f AND (F.rok = 1936 OR F.rok = 1939)) WHERE NOT (F.reziser = 'Fri ' OR F.reziser = 'Bínovec'); Lze napsat je²t mnoho dal²ích syntaktických variací tohoto dotazu. Ta první je z ejm srozumiteln j²í a logi t j²í neº varianta druhá. Dob e fungující optimalizátor by m l pro ob varianty sestavit stejný provád cí plán. Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 17 / 21

Aritmetika v klauzuli SELECT Výrazy v klauzuli SELECT 1/2 D8. Vypi² pro zahrani ní zam stnance platy p epo tené na EUR. Zahrani ní zam stnanci nemají rodné íslo. SELECT jmeno, plat/24.65 AS Plat v Euro FROM Zamestnanci WHERE rod_c IS NULL; - - cizinci (komentá v textu dotazu) lze pouºít b ºné operátory jako: '/', '*', '-', '+' obvyklá priorita operátor, jinak lze pouºít závorky existuje ada vestav ných funkcí (specické pro r zné implementace) výrazy mohou být i nad et zci a datumy NULL se propaguje do výsledku, tj. je-li jeden z operand NULL, je výsledkem NULL, tedy: Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 18 / 21

Aritmetika v klauzuli SELECT Výrazy v klauzuli SELECT 2/2... n kte í cizinci nepobírají plat, chceme vid t, ºe berou 0 Eur: SELECT jmeno, (coalesce(plat,0))/24.65 AS Plat v Euro FROM Zamestnanci WHERE rod_c IS NULL; Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 19 / 21

Rela ní algebra a p íkaz SELECT Rela ní algebra SELECT 1/2 R(ϕ) [A1,A2,...,Aj] SELECT A1, A2,..., Aj FROM R WHERE ϕ (R1xR2x... xrk)(ϕ)[a1, A2,..., Aj] SELECT A1,A2,...,Aj FROM R1,R2,...,Rk WHERE ϕ SELECT A1, A2,...,Aj FROM R1 CROSS JOIN R2... CROSS JOIN Rk WHERE ϕ (R1 * R2 *... * Rk)(ϕ)[A1, A2,..., Aj] SELECT A1,A2,...,Aj FROM R1 NATURAL JOIN R2... NATURAL JOIN Rk WHERE ϕ Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 20 / 21

Rela ní algebra a p íkaz SELECT Rela ní algebra SELECT 2/2 R1[t1 Θ t2]r2 (ϕ)[a1,a2,...,aj] SELECT A1, A2,...,Aj FROM R1 JOIN R2 ON (R1.t1 Θ R2.t2) WHERE ϕ R1xR2(R1.t1 Θ R2.t2)(ϕ)[A1,A2,...,Aj] coº je totéº jako R1xR2(R1.t1 Θ R2.t2 and ϕ)[a1,a2,..,aj] SELECT A1, A2,..., Aj FROM R1 CROSS JOIN R2 WHERE (R1.t1 Θ R2.t2 and ϕ) Michal Valenta (FIT ƒvut) SQL - úvod BI-DBS, 2010, P edn. 6 21 / 21