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.

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.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Cvičení 03 SQL Select Ing. Pavel Bednář
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
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
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.
1 BUMI Úvod do medicínské informatiky Počítačové cvičení č. 3 Ing. Vratislav Čmiel.
Temporální databáze a TSQL
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Radek Špinka Přepínače MSSQL výběr.
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)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Fakulta elektrotechniky a informatiky
Databázové systémy teorie a návrh relačních databázových systémů část II.
Relační databáze.
Vypracoval: Ondřej Dvorský Třída: VIII.A
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.
Informatika pro ekonomy II přednáška 10
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 UIN010 N-ticový (řádkový) relační kalkul Hodnoty proměnných n-tice relací (řádky) Konstanty hodnoty atributů Unární funkční.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
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.
Základní obeznámení s jazykem SQL Databázové systémy.
Databázové systémy SQL Výběr dat.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
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.
J. Pokorný, I Halaška1 DBS: SQL92 Jaroslav Pokorný MFF UK, Praha
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
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
Úvod do databází zkrácená verze.
Databázové systémy přednáška 6 – Indexy
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1
Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1
Dotazovací jazyk SQL I.
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
Databázové systémy a SQL
Šablona 32 VY_32_INOVACE_038.ICT.34
Počítačová cvičení z předmětu Datové sklady #1 Relační model dat
Databázové systémy a SQL
Databázové jazyky Jaroslav Pokorný FI BVŠP Bratislava
Databázové systémy a SQL
Transkript prezentace:

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. University of Paisley, Addison-Wesley Publ. Comp., ISBN , POKORNÝ,J.: Počítačové databáze. Výběr informací z organizační a výpočetní techniky, Kancelářské stroje, Praha, 1991.

Základní vlastnosti SQL Structured Query Language Vytvoření databáze a struktury relací ISO SQL standard obsahuje dvě základní komponenty –DDL –DML Neprocedurální jazyk užití: administrátor (DBA), management, vývojář aplikace, koncový uživatel

Základní příkazy SQL DDL –CREATE TABLE, ALTER TABLE, DROP TABLE –totéž pro VIEW –CREATE INDEX, DROP INDEX –SET TRANSACTION –GRANT, REVOKE DML –SELECT –INSERT –UPDATE –DELETE

Jak psát příkazy Každý příkaz musí začínat na nové řádce. Příkaz SQL rozlišuje rezervovaná slova a uživatelem definovaná slova (názvy objektů). Rezervovaná slova nesmí být dělená do dvou řádků. Příkaz SQL bývá dost často ukončen, a to středníkem „;“ SQL není case sensitive, jen hodnoty textového argumentu musí být napsány přesně.

Příkaz SELECT SELECT [ DISTINCT | ALL ] { * | [ sloupcový_výraz [AS nový_název] ] [, …] } FROM název_tabulky [alias] [, … ] [ WHERE podmínka ] [GROUP BY seznam_sloupců ] [ HAVING podmínka ] [ORDER BY seznam_sloupců ] Sloupcový výraz - název sloupce nebo výraz

Získání celé tabulky SELECT Isbn, Inv_č, D_nákupu, Cena, Země_vydání FROM Exemplář; SELECT * FROM Exemplář;

Projekce SELECT Země_vydání FROM Exemplář; SELECT DISTINCT Země_vydání FROM Exemplář;

Vypočítaná položka SELECT Isbn, Inv_č, D_nákupu, Cena, Cena/1.05 AS bez_DPH, Země_vydání FROM Exemplář;

Selekce SELECT * FROM Exemplář WHERE Země_vydání = ‘GB‘; =, != nebo <>,, >=, AND, OR, NOT SELECT * FROM Exemplář WHERE Země_vydání = ‘GB‘ OR Země_vydání = ‘USA‘; SELECT * FROM Exemplář WHERE Cena BETWEEN 300 AND 900; SELECT * FROM Exemplář WHERE Země_vydání IN (‘GB‘, ‘USA‘ ); výčet hodnot interval

Výběr podle vzoru SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘G%‘; SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘G_‘; SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘U_ _‘ ; SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘%A‘ ; SELECT * FROM Exemplář WHERE Země_vydání NOT LIKE ‘G%‘; SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘%A%‘;

Test prázdné hodnoty SELECT * FROM Exemplář WHERE Země_vydání IS NULL; SELECT * FROM Exemplář WHERE Země_vydání IS NOT NULL;

Řazení SELECT * FROM Exemplář ORDER BY Cena; SELECT * FROM Exemplář ORDER BY Cena Desc; SELECT * FROM Exemplář ORDER BY Země_vydání, Cena

Agregované funkce COUNT počet hodnot ve sloupci (počet řádků) SUM součet hodnot ve sloupci AVG průměr hodnot z daného sloupce MIN minimální hodnota MAX maximální hodnota SELECT COUNT(*) AS z_GB FROM Exemplář WHERE Země_vydání = ‘GB’ SELECT COUNT( DISTINCT Země_vydání) AS různých_zemí FROM Exemplář SELECT SUM(Cena) AS za_kolik_z_GB FROM Exemplář WHERE Země_vydání = ‘GB’

Vnořený select Najdi čísla čtenářů, kteří bydlí v Plzni a mají vypůjčenou nějakou knihu. SELECT Č_čt FROM Čtenář WHERE adresa LIKE ’%Plzeň%’ AND Č_čt IN (SELECT Č_čt FROM Výpůjčka); Najdi jména čtenářů, kteří mají rezervovanou knihu Babička. SELECT Jméno FROM Čtenář WHERE Č_čt IN (SELECT Č_čt FROM Rezervace WHERE ISBN = (SELECT ISBN FROM KNIHA WHERE Titul = ’Babička’)); Poznámka: máme zaručeno, že existuje právě jeden záznam Babičky s ISBN

Grupování SELECT COUNT(Inv_č), SUM(Cena) AS celkem, Země_vydání FROM Exemplář GROUP BY Země_vydání ORDER BY Země_vydání početCelkemZemě_vydání 31950GB 21562USA SELECT COUNT(Inv_č), SUM(Cena) AS celkem, Země_vydání FROM Exemplář GROUP BY Země_vydání HAVING COUNT(Inv_č) > 2 ORDER BY Země_vydání

Agregované funkce ve vnořeném selektu Vypiš zaměstnance, kteří mají nadprůměrný plat a uveď o kolik SELECT Číslo_zam, Jméno, Funkce, Plat – (SELECT AVG(Plat) FROM Zaměstnanci) AS nad_průměr FROM Zaměstnanci WHERE plat > (SELECT AVG(Plat) FROM Zaměstnanci); ORDER BY nesmí být ve vnořeném selektu použito, vnořený SELECT musí obsahovat jméno jednoho sloupce nebo výraz (vyjma EXISTS), jméno sloupce se vztahuje k tabulce uvedené ve vnořeném selektu, jestliže je vnořený selekt jedním ze dvou operandů, musí být uveden na pravé straně.

Sjednocení UNION – sjednocení dvou tabulek se stejnými sloupci Najdi čísla čtenářů, kteří mají vypůjčené nebo rezervované knihy do SELECT Č_čt FROM Výpůjčka WHERE D_zpět < ’ ’ UNION SELECT Č_čt FROM Rezervace WHERE D_rez < ’ ’; Č_čt INTERSECT - průnik EXCEPT - rozdíl

Spojení - SELECT přes více tabulek 1:N Najdi čísla čtenářů a knihy, které mají vypůjčeny. SELECT a.Č_čt, Inv_č FROM Čtenář a, Výpůjčka b WHERE a.Č_čt = b.Č_čt; Najdi čísla čtenářů a názvy knihy, které mají rezervovány. SELECT a.Č_čt, Název FROM Čtenář a, Rezervace b, Kniha c WHERE a.Č_čt = b.Č_čt AND b.ISBN = c.ISBN Poznámka: - FROM Čtenář a JOIN Výpůjčka b ON a.Č_čt = B.Č_čt; - FROM Čtenář JOIN Výpůjčka USING Č_čt¨; - FROM Čtenář NATURAL JOIN Výpůjčka - nepoužijeme-li WHERE, získáme kartézský součin, totéž lze SELECT ….. FROM Čtenář CROSS JOIN Výpůjčka (formálně ano, logicky nesmysl)

SELECT – FROM - WHERE je v praxi základní konstrukcí jazyka SQL

LEFT, RIGHT a FULL spojení Zahrnuje i neporovnatelné řádky ze spojení SELECT a.*, b.* FROM Čtenář a LEFT JOIN Výpůjčka b ON a.Č_čt = b.Č_čt; LEFT JOIN poskytne nejen ty čtenáře, ke kterým byla nalezene výpůjčka, a to každého tolikrát, kolik výpůjček mají, ale i ty čtenáře, kteří výpůjčku nemají. Hodnoty z Výpůjčky jsou NULL. Obecně: LEFT JOINT připojí i ty řádky, které z levé (první) tabulky nemají v pravé (druhé) relaci (tabulce) odpovídající prvek (řádku). - RIGHT JOIN – připojuje neporovnané řádky z pravé (druhé) tabulky - FULL JOIN – připojuje neporovnané řádky jak z první tak ze druhé tabulky

Test existence (EXISTS a NOT EXISTS) Najdi jména čtenářů, kteří mají rezervovanou nějakou knihu, SELECT Jméno FROM Čtenář WHERE EXISTS ( SELECT * FROM Rezervace WHERE Č_čt = Čtenář.Č_čt) Výsledkem je hodnota true tehdy a jen tehdy, je-li v tabulce poddotazu alespoň jedna řádka. Jinak je hodnota false.

Vložení prvku relace (řádky) INSERT INTO název_tabulky [(seznam_sloupců)] VALUES (seznam_dat) Hodnoty se uzavírají do apostrofů, pouze číselné hodnoty ne. Hodnoty se oddělují čárkou. INSERT INTO Čtenář ( Č_čt, Jméno) VALUES (‘123’,’Novák Petr’); INSERT ukládá výsledek dotazu do tabulky. Vytvořme relaci obsahující čtenáře a počet vypůjčených knih. CREATE TABLE Statistika (Č-čt char (4), Počet SMALLINT); INSERT INTO Statistika SELECT Č_čt, COUNT(Inv_č) FROM Výpůjčka GROUP BY Č_čt;

Zrušení prvku relace (řádky) DELETE FROM název_tabulky WHERE podmínka DELETE FROM Kniha WHERE Autor = ‘B.Němcová’; zrušení všech řádek DELETE FROM Kniha

Změna prvku relace (řádky) UPDATE název_tabulky SET název_sloupce = hodnota_dat, [ název_sloupce_2 = hodnota_dat] [WHERE podmínka] UPDATE Čtenář SET Adresa = ‘Plzeň, Univerzitní 8’ WHERE Č_čt = ‘123’

Výraz relační algebry x příkaz SELECT StudentZnámka 1 N Č_stud Studijní_obor Předmět Známka Vypiš jména všech studentů studijního oboru počítačové sítě, kteří mají z předmětu DB1 jedničku. ((Student (studijní_obor = ‘počítačové sítě’) * (Známka (Předmět = ‘DB1’ AND Známka = 1)) [Jméno] SELECT Jméno FROM Student a, Známka b WHERE Studijní_obor = ‘počítačové sítě’ AND a.Č_stud = b.Č_stud AND Předmět = ‘DB1’ AND Známka = 1

DDL Datové typy ISO SQL – tabulky, pohledy, jména, sloupce –znaková sada: A … Z, a … z, 0 … 9 a „_“, –identifikátor max. 128 znaků, –identifikátor musí začínat písmenem, –identifikátor nesmí obsahovat mezeru

Definice tabulky CREATE TABLE jméno_tabulky ( { název_sloupce datový_typ [ NOT NULL ] [ UNIQUE ] [ DEFAULT hodnota ] [ CHECK ( výběrová_podmínka ) [, název_sloupce … ]} [ PRIMARY KEY ( seznam_názvů_sloupců ), ] { [ FOREIGN KEY ( seznam_názvů_sloupců_tvořící_cizí_klíč ) REFERENCES název_nadřazené_tabulky [( seznam_názvů _sloupců )], [ MATCH { PARTIAL | FULL }] [ ON UPDATE referenční akce ] [ ON DELETE referenční akce ] ] [, … ] } { [ CHECK ( výběrová_podmínka ) [, …] } )

Datový typ Logická proměnná BOOLEAN TextCHARVARCHAR BitBITBIT VARYING Přesné výpočty NUMERICDECIMALINTEGERSMALLINT Přibližné výpočty FLOATREALDOUBLE PRECISION ČasDATETIMETIMESTAMP IntervalINTERVAL Rozsáhlé objekty CHARACTER LARGE OBJECT BINARY LARGE OBJECT

Výběrová podmínka - příklady den_v_týdnu CHAR (2) NOT NULL CHECK ( den_v_týdnu IN ( ‘Po’, ‘Út’, ‘St’, ‘Čt’, ‘Pá’, ‘So’, ‘Ne’)) plat INT CHECK ( plat > 0 ), odmena INT CHECK ( odmena < 0.5 * plat ) pocet_kreditu SMALLINT CHECK ( pocet_kreditu BETWEEN 1 AND 6 ) Podle ANSI SQL89 mohl být odkaz jen na položky definované v tabulce. Podle ANSI SQL92 (též SQL2) může být odkaz i na jinou tabulku – pomocí konsturkce SELECT.

Deklarativní realizace integritních omezení CREATE TABLE Předmět ( …. FOREIGN KEY ( garant ) REFERENCES ucitele (cislo_ucitele) …. ) UcitelePredmet 1 N cislo_ucitele Předmět Garant ANSI SQL-86pouze NOT NULL a UNIQUE ANSI SQL-89 PRIMARY KEY CHECK (viz „výběrová kriteria“) FOREIGN KEY a REFERENCES

Deklarativní realizace integritních omezení pokr. ANSI SQL-92 (též SQL2) definice cizího klíče doplněna ON DELETE CASCADE ON UPDATE CASCADE ON DELETE SET NULL ON UPDATE SET NULL nová syntaxe CHECK – možnost vložení příkazu SELECT Př.: Vedoucím katedry může být jen profesor nebo docent. Informace o titulu je uložena v tabulce Učitelé. CREATE TABLE katedry ( … vedoucí CHAR (8) CHECK ( EXISTS SELECT * FROM Ucitele WHERE vedouci = ucitele.cis AND titul IN ( ‘Prof’, ‘Doc’ )) … )

Referenční IO UcitelePredmet 1 N cislo_ucitele Zkratka Garant Vyuka Zkratka Garant 11 N N CREATE TABLE Vyuka ( … FOREIGN KEY ( Garant) REFERENCES Ucitele (cislo_ucitele) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY ( Zkratka) REFERENCES Predmet ON UPDATE CASCADE ON DELETE CASCADE …. ) CREATE TABLE Předmět (… FOREIGN KEY ( Garant) REFERENCES Ucitele (cislo_ucitele) ON UPDATE CASCADE ON DELETE NULL … )

Pohledy CREATE VIEW jméno_pohledu [ (nové_jméno_sloupce [, …])] AS subselect [WITH [CASCADED | LOCAL] CHECK OPTION] Dynamická struktura Výsledek jedné nebo více relačních operací Vznik nové relace, která je virtuální, v databázi neexistuje, je uložen pouze její popis.