300 likes | 381 Views
Informatika II PAA. DOTAZOVACÍ JAZYKY 6.3.2001. Dotazy v DBS. Účel dotazovacích jazyků:. zprostředkovat informace uživateli umožnit různé pohledy na uložená data zajistit jednoduchý způsob formulace dotazu předat požadovanou odpověď rychle a
E N D
Informatika II PAA DOTAZOVACÍ JAZYKY 6.3.2001
Dotazy v DBS Účel dotazovacích jazyků: • zprostředkovat informace uživateli • umožnit různé pohledy na uložená data • zajistit jednoduchý způsob formulace dotazu • předat požadovanou odpověď rychle a • ve srozumitelné podobě
Dotazy - základní operace • operace projekce • operace selekce • logický součin - operátor AND • logický součet - operátor OR • logická negace - operátor NOT • spec. operátory Like, Blank, Today • zástupné operátory .. • operace spojení • join
Obecné charakteristikydotazovacích jazyků • relační operátory se používají pro celé relace • výsledkem operace (dotazu) je vždy nová relace • operátory pracují s hodnotami atributů
Dotazovací jazyky Podle způsobu zadávání rozlišujeme: • procedurální jazyky • nutné zadat algoritmus pro získání požadované odpovědi určeny pro profesionální programátory • neprocedulární jazyky • jednodušší, zadávají se jen podmínky, které má požadovaná odpověď splňovat • QBE, SQL
- založené na množinách relační algebra SQL relační kalkul QBE Relační dotazovací jazyky - založené na predikátové logice
Relační kalkul Kalkul = způsob formalizovaného zápisu. Relační kalkul – formalizovaný a symbolický způsob zápisu stejných operací, které vymezuje relační algebra. • n-ticový kalkul – na relaci se nahlíží jako na množinu řádků • doménový kalkul – na relaci se nahlíží jako na množinu sloupců (domén).
QBE – Query By Example • zadávání dotazů v grafické podobě na základě interaktivní komunikace mezi DBS a uživatelem
QBE – MS Access Spuštění dotazu
SQL – Structured Query Language • při jeho tvorbě dodržena zásada přiblížit specifikování dotazu principu kladení otázek v přirozeném jazyce, tj. angličtině • je deklarativní – příkazy jazyka specifikují „co“ se má provést a ne „jak“
SQL - představení • SQL - Structured Query Language • 1974 Sequel, počátky • vývoj - nejdříve jednouživatelské SŘBD s SQL • přístup k lokální databázi • později DB servery založené na SQL • víceuživatelské přístupy (klient / server) • Časti SQL: • DDL - Data Definition Language, pro definici dat • DML - Data Manipulation Lang., pro manipulaci s daty • DCL - Data Control Lang., definice přístupových práv
SQL – typografické konvence • volitelné části příkazu v [] • seznam atributů, kterých se příkaz týká: • atrib1 [, atrib2…..] • Select * znamená všechny atributy (sloupce) • Distinct (Unique) zajistí unikáty ve výsledné relaci • | použité v některých příkazech znamená větvení • {} povinná část příkazu • Having podmínka = splňující podmínku (-y)
SQL – vytvoření tabulky • CREATE TABLE • syntaxe CREATE TABLE jméno_tabulky (jméno_sloupce typ_sloupce, ... ) • př. CREATE TABLE Zamestnanci ( OsobniCislo int NOT NULL, Jmeno varchar(40), RC varchar(11), Adresa varchar(60), Plat float, PRIMARY KEY (OsobniCislo) );
SQL – přidání záznamu • INSERT INTO • syntaxe INSERT INTO jméno_tabulky VALUES (hodnota1, ..., hodnotaN) • př. INSERT INTO Zamestnanci VALUES ( 1023, 'Novák Jan', '561220/0235', 'Levá 13, Praha 4', 12000);
SQL – modifikace struktury • ALTER TABLE • syntaxe ALTER TABLE jméno_tabulky ADD (jméno_sloupce datový_typ, …) • př. ALTER TABLE Zamestnanci ADD Telefon varchar(8);
SQL – rušení záznamů • DELETE • syntaxe DELETE FROM jméno_tabulky [WHERE podmínka] • př. DELETE FROM Zamestnanci WHERE OsobniCislo = 1023;
SQL – opravy dat • UPDATE • syntaxe UPDATE jméno_tabulky SET položka=hodnota, ... WHERE podmínka • př. UPDATE Zamestnanci SET Plat = 14000 WHERE OsobniCislo = 1023;
SQL – rušení relace • DROP TABLE • syntaxe DROP TABLE jméno_tabulky • př. DROP TABLE Zamestnanci;
SQL – výběr a prohlížení • SELECT • syntaxe SELECT * FROM jméno_tabulky • SELECT * FROM Zamestnanci; • selektivní výběr • podmínka za klíčové slovo WHERE • př. SELECT * FROM Zamestnanci WHERE Jmeno LIKE 'Novák Jan'; • SELECT * FROM Zamestnanci WHERE Jmeno LIKE 'Nov*';
SQL – výběr a prohlížení • SELECT * FROM Zamestnanci WHERE OsobniCislo = 1230; • SELECT * FROM Zamestnanci WHERE Plat > 10000; • lze použít i logické operátory AND a OR • SELECT * FROM Zamestnanci WHERE Jmeno LIKE 'Novák *' AND Plat < 6000;
SQL – výběr a prohlížení • za SELECT lze uvést seznam atributů, jež se ve výsledku zobrazí • př. SELECT Jmeno, Plat FROM Zamestnanci WHERE Plat > 15000; • třídění výstupu – ORDER BY • za jménem sloupce buďto DESC (sestupně) nebo ASC (vzestupně) • př. SELECT * FROM Zamestnanci ORDER BY Plat ASC;
SQL – agregované funkce • pracují s hodnotami ve sloupci v rámci celé tabulky (vrací 1 výsledek pro celý sloupec tabulky) • COUNT(*) • COUNT(jméno_sloupce) • SUM(jméno_sloupce) • MIN(jméno_sloupce) • MAX(jméno_sloupce) • AVG(jméno_sloupce)
SQL – agregované funkce • SELECT COUNT(*) FROM Zamestnanci WHERE Plat > 14000; • doplnění o textový řetězec • SELECT ‘Počet zaměstnanců =‘,COUNT(*) FROM Zamestnanci WHERE Plat > 14000; • SELECT MAX(Plat), MIN(Plat), AVG(Plat) FROM Zamestnanci;
Predikáty ve výběrové podmínce • BETWEEN, IN a LIKE • SELECT * FROM Zamestnanci WHERE Plat BETWEEN 12000 AND 15000; • SELECT * FROM Zamestnanci WHERE Plat IN (12000, 15000); • ODPOVÍDÁ WHERE Plat = 12000 OR Plat = 15000 • SELECT * FROM Zamestnanci WHERE Jmeno LIKE “N*”;
Další zástupné znaky • * - pro libovolný počet znaků • ? – odpovídá jednomu libovol. abecednímu znaku • [ae] – odpovídá jednomu ze znaků uvedených v [] • [!ae] – odpovídá libovolnému znaku, který není uveden v závorkách • [a-e] – odpovídá znakům v daném rozsahu • # - odpovídá jakékoliv číslici • př. …WHERE Plat LIKE “12*” • WHERE Plat LIKE “12??” nebo WHERE Plat LIKE “12##” • WHERE Jmeno LIKE “Nov[ae]*” nebo “Nov[!a]*”
Spojení (join) • umožňuje zpracovávat data ze dvou či více tabulek • vnitřní spojení kombinuje tabulky na základě porovnání hodnot ve sloupcích, které jsou tabulkám společné • INNER JOIN jm_tabulky ON společné sloupce • používá se „tečková notace“ jm_relace.jm_sloupce
Vyrobky Kategorie idkategorie idvyrobku nazevvyrobku idkategorie nazevkategorie 1 1 Cola 1 Napoje 1 2 Pepsi 2 Pokrmy 1 3 Víno 2 4 Steak Příklad spojení 2 tabulek • př. SELECT idvyrobku, nazevvyrobku, nazevkategorie FROM kategorie INNER JOIN vyrobky ON vyrobky.idkategorie = kategorie.idkategorie;
Vyrobky Objednavky Rozpisobj idvyrobku nazevvyrobku idobjednavky kodzakaznika idobjednavky idvyrobku mnozstvi 1000 1 10 1000 Vinet 1 Cola 1000 2 15 1001 Vinet 2 Pepsi 1001 1 24 1002 Ben 3 Víno 1001 3 16 1002 2 18 Příklad spojení 3 tabulek • SELECT objednavky.idzakaznika, rozpisobj.idobjednavky, vyrobky.nazevvyrobku, rozpisobj.mnozstvi FROM (rozpisobj INNER JOIN objednavky ON rozpisobj. idobjednavky = objednavky. idobjednavky) INNER JOIN vyrobky ON rozpisobj.idvyrobku = vyrobky. idvyrobku WHERE objednavky. idzakaznika ="vinet";