Databázové systémy SQL Výběr dat.

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
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Databáze.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Výpočetní technika Akademický rok 2008/2009 Letní semestr Mgr. Petr Novák Katedra informatiky a geoinformatiky FŽP UJEP
AGREGACE Distinct, Group By, Having, SUM, …. DISTINCT  Slučování stejných řádků ve výsledku dotazu. AGREGACE 2 JménoPříjmeníID FrantišekVomáčka1 JosefPokorný2.
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
Microsoft SQL server Databázový systém. Úvod  aktuální verze na trhu je MS SQL  verze: plná komerční - Enterprise Edition pro vyzkoušení volně.
Informatika pro ekonomy II přednáška 11
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
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.
Object Query Language (OQL)
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 I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
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.
MS ACCESS DOTAZY.
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ý.
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
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áze Dotazy VY_32_INOVACE_7B16. Dotazy umožňuje vybrat určité záznamy z tabulky na rozdíl od filtru vybrané záznamy umístí do samostatné dočasné nebo.
Databázové systémy Tomáš Skopal
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
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í.
Databázové systémy Relační model.
Informatika II PAA DOTAZOVACÍ JAZYKY
2OP483 Manažerská informatika 3Access - BankaSnímek 1 2OP483 Manažerská informatika 3 Microsoft Office Access 2007 Dotazy v databázi Banka
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Databáze velké množství dat pevně dané struktury
Databázové systémy SQL Výběr dat.
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.
CUBE - Operátor relační agregace
Lišta nástrojů Standard otevření, uložení a další manipulace se soubory (tj. projekty) načítání dat (mapových vrstev) „žluté plus“ změna měřítka odkaz.
Lišta nástrojů Standard otevření, uložení a další manipulace se soubory (tj. projekty) načítání dat (mapových vrstev) „žluté plus“ odkaz na další lišty.
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
SQL Structured Query Language
J. Macur, FAST VUT, 2011 (kombinované studium BU04)
Databázové systémy I Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databáze MS ACCESS 2010.
Rozdíl mezi databází a tabulkou Rozdíl mezi Accessem a Excelem
2OP483 Manažerská informatika 32OP483 Manažerská informatika 3
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
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
Optimalizace SQL dotazů
Počítačová cvičení z předmětu Datové sklady
Dotazovací jazyk SQL - II
Přednáška 7 SQL – JOIN.
Transkript prezentace:

Databázové systémy SQL Výběr dat

Příkaz SELECT Jádro databázového jazyka SQL. Kompletní syntaxe vypadá následovně: SELECT [DISTINCT|ALL] seznam vybíraných sloupců FROM seznam tabulek [JOIN v případě výběru z více tabulek deklarujeme způsob jejich provázání (left/right join)] [WHERE restrikce-podmínka výběru] [GROUP BY výrazy pro seskupení] [HAVING doplňující podmínky pro skupinu-agregační funkce] [ORDER BY způsob seřazení výsledků dotazu] [LIMIT omezení počtu záznamů]

SELECT – schéma Logické pořadí vyhodnocení (asociativita SELECT klauzulí): FROM  WHERE  GROUP BY  HAVING  projekce SELECT  ORDER BY

SELECT ... FROM ... nejjednodušší forma dotazu: SELECT [ALL] | DISTINCT expression FROM tabulka1, tabulka2, ... výraz může obsahovat sloupce (hvězdička * je zástupce pro všechny neuvedené sloupce) konstanty agregace na výrazech DISTINCT eliminuje duplikátní řádky ve výstupu, ALL (resp. bez specifikace) povoluje ve výstupu i duplikátní řádky (pozor, má vliv na agregační funkce – u DISTINCT vstupuje do agregačních funkcí méně hodnot) FROM obsahuje jednu nebo více tabulek, na kterých se dotaz provádí pokud je specifikováno více tabulek, provede se kartézský součin

Netříděný dotaz netříděný dotaz sestává vždy příkaz SELECT (hlavní logika dotazování) případně z příkazů UNION, INTERSECTION, EXCEPT (sjednocení/průnik/rozdíl dvou nebo více výsledků získaných dotazem popsaným v příkazu SELECT) výsledky nemají definované uspořádání (resp. jejich pořadí je určeno implementací vyhodnocení dotazu)

Tříděný dotaz výsledek netříděného dotazu lze setřídit klauzule ORDER BY, třídění podle sloupce (column) třídit lze vzestupně (ASC) nebo sestupně (DESC) podle definovaného uspořádání lze definovat více sekundárních třídících kritérií, která se uplatní v případě nedefinovaného lokálního pořadí (shodné primární tříděné hodnoty)

Výběr určitých sloupců - PROJEKCE Příkaz provede vypsání všech vy jmenovaných sloupců. SELECT prijmeni, jmeno, ulice, mesto FROM Klient; prijmeni jmeno ulice mesto Nový Jan Jánská 25 Zlín Nováková Petra Poštová 128 Lešná Nováček Pavel Nezvalova 697 Zlín Novotná Ivana Pod mlýnem Lukov Obecně zde můžeme uvést výčet sloupců z více tabulek.

Dynamický sloupec Příkaz nám vydefinuje sloupec, který se spočte z některého z ostatních sloupců. Tento sloupec se pak přidá k vypisované tabulce. SELECT c_uctu, stav,(stav/25) FROM Ucet; c_uctu stav (stav/25) 4568517 42000 1680 6585485 75000 3000 3256151 25000 1000 V tomto příkladě se přidá stav účtu v „Euro", nebo-li stav dělený 25. Nový sloupec tabulky je pojmenován automaticky dle konvencí použité databáze. K definici vypočteného sloupce lze použít i volání některého složitějšího programu, který daný sloupec vypočte.

Pojmenování nového sloupce: AS Pokud máme potřebu si nově založený sloupec pojmenovat, uděláme to pomocí výše uvedeného postupu . SELECT c_uctu, stav,(stav/25) AS euro FROM Ucet; c_uctu stav euro 4568517 42000 1680 6585485 75000 3000 3256151 25000 1000

SELECT ... FROM ... WHERE ... logická podmínka selekce, tj. řádek tabulky, který podmínku splňuje, se dostane do výsledku jednoduché podmínky lze kombinovat logickými spojkami AND, OR, NOT lze se ptát srovnávacím predikátem (=, <>, <, >, <=, >=) na hodnoty dvou atributů na interval expr1 [NOT] BETWEEN (expr2 AND expr3) řetězcovým predikátem [NOT] LIKE “maska“, kde maska je řetězec obsahující speciální znaky % (reprezentující libovolný podřetězec) a _ (reprezentující libovolný znak) testem na nedefinovanou hodnotu, (expr1) IS [NOT] NULL predikátem příslušnosti do množiny expr1 [NOT] IN (unordered_query) jednoduchým existenčním kvantifikátorem EXISTS (unordered_query) testující prázdnost rozšířenými kvantifikátory

Výběr údajů s podmínkou WHERE-RESTRIKCE V podmínce WHERE je možné použít následující operátory: Operátor Popis = Rovná se < Je menší než > Je větší než <= Je menší než nebo roven >= Je větší než nebo roven != Nerovná se IS NOT NULL Není prázdná (obsahuje hodnotu) IS NULL Je prázdná (neobsahuje hodnotu) BETWEEN V rozmezí NOT BETWEEN Mimo rozmezí OR (rovněž ) Alespoň jedna podmínka je splněná AND (rovněž &&) Všechny (obě) podmínky jsou splněny NOT (rovněž !) Podmínka není splněna

Zobrazení hodnot v určitém rozpětí: BETWEEN BETWEEN slouží k zobrazení hodnot sloupce, které se nacházejí v určitém rozpětí. SELECT * FROM Ucet WHERE stav BETWEEN 40000 AND 80000 ; c_uctu stav r_cislo pobocka 4568517 42000 826111/5267 Zarámí 325 6585485 75000 580506/4891 Nám. Míru 12 To samé bychom mohli samozřejmě zapsat bez BETWEEN: SELECT * FROM Ucet WHERE stav>=40000 AND stav<=80000

Využití operátorů LIKE A NOT LIKE Využívají se pro porovnání řetězců v širším měřítku. SELECT prijmeni, jmeno, mesto FROM Klient WHERE mesto LIKE ”L%”; Vypíše příjmení a jména všech klientů, kteří jsou z města začínajícího na písmeno ‚L‚. Speciální znaky používané při vyhledávání podřetězců : %(procenta) libovolný počet libovolných znaků (včetně 0) _(podtržítko) jeden libovolný znak

Omezení počtu záznamů ve výsledné sadě Klauzule LIMIT stanovuje počet záznamů, které budou do výsledné sady zahrnuty: vypíše první 3 záznamy - vypíše 10 záznamů v rozmezí 6-15. Indexování záznamů probíhá od 0, tj. LIMIT 0,5 vypíše 1. až 6. záznam. SELECT * FROM Klient LIMIT 3; SELECT * FROM Klient LIMIT 5,10; Chceme-li vybrat druhý nejvyšší stav účtu: SELECT * FROM Ucet ORDER BY stav DESC LIMIT 1,1;

Výpis řádek s prázdným sloupcem Pro nalezení hodnot NULL je potřeba vyzkoušet test IS NULL. Uvažujme, že v tabulce Klient je pole Email, které může ale nemusí být vyplněno. Následující příklad ukazuje rozdíl mezi vyhledáním NULL „nulového“ Emailu a prázdného Emailu: SELECT * FROM Klient WHERE Email IS NULL; SELECT * FROM Klient WHERE Email= ' ';

Spojení tabulek - JOIN Spojení bez speciálních konstrukcí (SQL 86): (vnitřní) spojení na podmínku a přirozené spojení lze realizovat jako omezený kartézský součin, tj. SELECT ... FROM tabulka1, tabulka2 WHERE tabulka1.A = tabulka2.B levé/pravé polospojení se upřesní v klauzuli SELECT, tj. projekcí Nové konstrukce SQL 92: kartézský součin – SELECT ... FROM tabulka1 CROSS JOIN tabulka2 ... přirozené spojení – SELECT ... FROM tabulka1 NATURAL JOIN tabulka2 WHERE ... vnitřní spojení – SELECT ... FROM tabulka1 INNER JOIN tabulka2 ON search_condition WHERE ... sjednocení spojení – vrací řádky první tabulky doplněné NULL hodnotami v atributech druhé tabulky + řádky druhé tabulky doplněné o NULL hodnoty v atributech první tabulky SELECT ... FROM tabulka1 UNION JOIN tabulka2 WHERE ... levé, pravé, plné vnější spojení – SELECT ... FROM tabulka1 LEFT | RIGHT | FULL OUTER JOIN tabulka2 ON search_condition ... WHERE ...

Spojování tabulek - JOIN CROSS JOIN znamená spojení každého záznamu s každým. INNER JOIN vrátí z obou spojovaných tabulek veškeré záznamy, ve kterých klíčový sloupec obsahuje v obou tabulkách stejnou hodnotu. NATURAL spojí ty dvojice záznamů, které mají v klíčových sloupcích stejného jména stejnou hodnotu. LEFT [OUTER ] JOIN znamená, že každý záznam první tabulky se musí spojit s některým záznamem druhé tabulky. Není-li v druhé tabulce nalezen žádný vyhovující záznam, pak se spojí s NULL. RIGHT [OUTER ] JOIN znamená, že každý záznam druhé tabulky se musí spojit s některým záznamem první tabulky. Není-li v první tabulce nalezen žádný vyhovující záznam, pak se spojí s NULL. FULL [OUTER ] JOIN znamená, že každý záznam z každé tabulky se musí spojit s některým záznamem protější tabulky. Není-li v protější tabulce vyhovující záznam spojí se s NULL.

S operacemi OUTER JOIN se musí zacházet velmi opatrně, protože pořadí v jakém se tabulky spojují má zásadní vliv na to, které řádky se zachovají a které nikoli. Nejčastěji používané typy spojení: - vnitřní spojení – inner join vnější spojení – outer join (nebo levé spojení – left join). Poznámka: Tam, kde se pracuje s více tabulkami, které můžou obsahovat stejnojmenné sloupce, musíme sloupce jednoznačně identifikovat. K tomu se používá „tečková“ konvence – název_tabulky.název sloupce.

Příklady: Vnitřní spojení – inner join Chceme-li vypsat informace o účtě, ale místo rodného čísla klienta, které je v tabulce UCET, chceme vidět jeho jméno a příjmení: SELECT ucet.c_uctu,klient.prijmeni,klient.jmeno FROM klient INNER JOIN ucet ON klient.r_cislo=ucet.r_cislo; Používání aliasů: – alias je symbolické přejmenování tabulky nebo sloupce pomocí klíčového slova AS (nepovinné) – jsou to řetězce složené z písmen, číslic a podtržítek, ve kterých je potřeba rozlišovat velká a malá písmena: SELECT u.c_uctu,k.prijmeni,k.jmeno FROM klient AS k INNER JOIN ucet AS u ON k.r_cislo=u.r_cislo;

Příklady: Vnější spojení – outer join Levé vnější spojení - vypíše všechny klienty, tedy i ty, kteří nemají momentálně žádný účet. SELECT u.c_uctu,k.prijmeni,k.jmeno FROM klient AS k LEFT JOIN ucet AS u ON k.r_cislo=u.r_cislo; Pravé vnější spojení - vrací všechny záznamy z tabulky UCET a tedy i ty, pro které by nebyl nalezen odpovídající klient. Správně fungující systém by ale měl tomuto stavu zabránit – zachování referenční integrity. SELECT u.c_uctu,k.prijmeni,k.jmeno FROM klient AS k LEFT JOIN ucet AS u ON k.r_cislo=u.r_cislo; Poznámka: Když obsahují obě tabulky vnějšího spojení stejný název pole (např. r_cislo), bylo by možné dotaz zjednodušit: SELECT * FROM klient LEFT JOIN ucet USING (r_cislo);

Propojení 3 tabulek SELECT u.c_uctu,k.prijmeni,k.jmeno,p.nazev Propojení 3 tabulek použítím podmínky WHERE: SELECT u.c_uctu,k.prijmeni,k.jmeno,p.nazev FROM klient k, ucet u, pobocka p WHERE k.r_cislo=u.r_cislo AND p.c_p=u.pobocka; Propojení 3 tabulek použítím JOIN-u: SELECT u.c_uctu,k.prijmeni,k.jmeno,p.nazev FROM klient k INNER JOIN ucet u ON k.r_cislo=u.r_cislo INNER JOIN pobocka p ON p.c_p=u.pobocka;

Samosloučení SELECT k1.prijmeni, k2.prijmeni Výpis seznamu příjmení, stylem "každý z každým": SELECT k1.prijmeni, k2.prijmeni FROM Klient AS k1, Klient AS k2 WHERE k1.r_cislo != k2.r_cislo ORDER BY k1.prijmeni SQL umožňuje otevřít pomocí příkazu SELECT dvakrát tu samou tabulku, je pouze nutné druhé tabulce přiřadit jiný lokální alias.