Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilDorota Němečková
1
SQL Přednáška DB1
2
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 0-201-42277-8, 1995. POKORNÝ,J.: Počítačové databáze. Výběr informací z organizační a výpočetní techniky, Kancelářské stroje, Praha, 1991.
3
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
4
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
5
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ě.
6
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
7
Získání celé tabulky SELECT Isbn, Inv_č, D_nákupu, Cena, Země_vydání FROM Exemplář; SELECT * FROM Exemplář;
8
Projekce SELECT Země_vydání FROM Exemplář; SELECT DISTINCT Země_vydání FROM Exemplář;
9
Vypočítaná položka SELECT Isbn, Inv_č, D_nákupu, Cena, Cena/1.05 AS bez_DPH, Země_vydání FROM Exemplář;
10
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
11
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%‘;
12
Test prázdné hodnoty SELECT * FROM Exemplář WHERE Země_vydání IS NULL; SELECT * FROM Exemplář WHERE Země_vydání IS NOT NULL;
13
Řazení SELECT * FROM Exemplář ORDER BY Cena; SELECT * FROM Exemplář ORDER BY Cena Desc; SELECT * FROM Exemplář ORDER BY Země_vydání, Cena
14
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’
15
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
16
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í
17
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ě.
18
Sjednocení UNION – sjednocení dvou tabulek se stejnými sloupci Najdi čísla čtenářů, kteří mají vypůjčené nebo rezervované knihy do 31.12.2003 SELECT Č_čt FROM Výpůjčka WHERE D_zpět < ’31.12.2003’ UNION SELECT Č_čt FROM Rezervace WHERE D_rez < ’31.12.2003’; Č_čt INTERSECT - průnik EXCEPT - rozdíl
19
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)
20
SELECT – FROM - WHERE je v praxi základní konstrukcí jazyka SQL
21
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
22
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.
23
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;
24
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
25
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’
26
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
27
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
28
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 ) [, …] } )
29
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
30
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.
31
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
32
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’ )) … )
33
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 … )
34
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.
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.