Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Databázové systémy SQL Výběr dat
2
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ů]
3
Pomocné příkazy vykonává příkaz SELECT v uvedeném pořadí:
1. FROM (výběr zdrojové tabulky) 2. WHERE (filtrovací podmínka – výběr řádků) 3. GROUP BY (seskupení) 4. HAVING (specifikace výběru skupin) 5. ORDER BY (setřídění)
4
Vypsání všech sloupců tabulky: FROM
Příkaz provede vypsání všech sloupců tabulky. SELECT * FROM zamestnanec; Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Janda Jaroslav Kříž Jiří Ing Adamec Miloš Hanuš Jan RNDr Zikmund Adam Stráský Luboš Symbol * v SQL znamená symbol pro všechny sloupce.
5
Výběr určitých sloupců - PROJEKCE
Příkaz provede vypsání všech vy jmenovaných sloupců. SELECT Prijmeni, Jmeno, Titul, Rodnec FROM zamestnanec; Prijmeni Jmeno Titul Rodnec Janda Jaroslav Kříž Jiří Ing Adamec Miloš Hanuš Jan RNDr Zikmund Adam Stráský Luboš Obecně zde můžeme uvést výčet sloupců z více tabulek.
6
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 Prijmeni, Jmeno, Titul, Plat, (Plat/30) FROM zamestnanec; Prijmeni Jmeno Titul Plat (Plat/30) Janda Jaroslav Kříž Jiří Ing Adamec Miloš Hanuš Jan RNDr Zikmund Adam Stráský Luboš V tomto příkladě se přidá plat v „Euro", nebo-li plat dělený 30. 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.
7
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 Prijmeni,Jmeno,Titul,Plat,(Plat/30) AS Euro FROM zamestnanec; Prijmeni Jmeno Titul Plat Euro Janda Jaroslav Kříž Jiří Ing Adamec Miloš Hanuš Jan RNDr Zikmund Adam Stráský Luboš
8
Výběr s eliminací redundantních řádků
SELECT DISTINCT mesto FROM klient ; Pomocí klauzule DISTINCT z výsledné množiny odstraníme duplicitní řádky – vypíšeme, ze krých měst jsou klienti. Klauzule ALL slouží k výběru všech řádků včetně redundancí. Tento výběr je předpokládán implicitně, proto se ALL nemusí používat.
9
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
10
Příklady: SELECT Jmeno, Prijmeni FROM zamestnanec WHERE Jmeno=’Josef’;
Jména a příjmení všech zaměstnanců, jejichž křestní jméno je Josef: SELECT Jmeno, Prijmeni FROM zamestnanec WHERE Jmeno=’Josef’; Jména a příjmení všech zaměstnanců, kteří jsou ze Zlínského kraje: WHERE (psc >= 70000)AND(psc < 80000); Jména a příjmení a všech zaměstnanců, kteří mají svůj SELECT Jmeno, Prijmeni, FROM zamestnanec WHERE IS NOT NULL;
11
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 zamestnanec WHERE Plat BETWEEN 1000 AND 7000 ; Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Janda Jaroslav Adamec Miloš Zikmund Adam To samé bychom mohli samozřejmě zapsat bez BETWEEN: SELECT * FROM zamestnanec WHERE Plat>=1000 AND Plat<=7000
12
Využití operátorů LIKE A NOT LIKE
Využívají se pro porovnání řetězců v širším měřítku. SELECT Prijmeni, Jmeno FROM zamestnanec WHERE Prijmeni LIKE ”N%”; Vypíše příjmení a jména všech zaměstnanců, jejichž příjmení začíná na písmeno 'N‚. 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
13
Tříděný výpis: ORDER BY
SELECT Jmeno, Prijmeni, Ulice, Cislo, Mesto FROM zamestnanec WHERE Mesto = ’Zlín’ ORDER BY Ulice, Cislo; Pro sestupné třídění se použije klauzule DESC – descending. Pro základní vzestupné třídění je klíčovým slovem ASC, jeho uvedení je však nepovinné a zpravidla se tedy ani neuvádí. SELECT * FROM tabulka ORDER BY Jmeno DESC
14
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ích 5 záznamů - 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ž 5. záznam. SELECT * FROM zamestnanec LIMIT 5; SELECT * FROM zamestnanec LIMIT 5,10; Chceme-li vybrat třetího nastoupeného zaměstnance: SELECT * FROM zamestnanec ORDER BY datum_nastupu ASC LIMIT 2,1;
15
Výběr podle datumu: Zobrazí všechny pracovníky z tabulky, kteří nastoupili před ,, ". SELECT * FROM Tabulka WHERE Nastup <“ “; Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Kříž Jiří Ing Adamec Miloš Stráský Luboš
16
Výpis řádek s prázdným sloupcem
Pro nalezení hodnot NULL je potřeba vyzkoušet test IS NULL. Následující příklad ukazuje rozdíl mezi vyhledáním NULL „nulového“ Titulu a prázdného Titulu: SELECT * FROM zamestnanec WHERE Titul IS NULL; SELECT * FROM zamestnanec WHERE Titul= ' ';
17
Spojování tabulek - JOIN
Je to dotaz na více tabulek se vzájemnými křížovými odkazy: 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.
18
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.
19
Příklady: Vnitřní spojení – inner join
Chceme-li vypsat informace o výkonu funkce, ale místo čísla zaměstnance, které je v tabulce VYKON_FUNKCE, chceme vidět jeho jméno a příjmení: SELECT vykon_funkce.cislo_fun, zamestnanec.prijmeni, zamestnanec.jmeno FROM zamestnanec INNER JOIN vykon_funkce ON zamestnanec.id_zam=vykon_funkce.cislo_zam; 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 v.cislo_fun, z.prijmeni, z.jmeno FROM zamestnanec AS z INNER JOIN vykon_funkce AS v ON z.id_zam=v.cislo_zam;
20
Příklady: Vnější spojení – outer join
Levé vnější spojení - vypíše všechny zaměstnance, tedy i ty, kteří nevykonávají žádnou přidělenou funkci. SELECT v.cislo_fun, z.prijmeni, z.jmeno FROM zamestnanec z LEFT JOIN vykon_funkce v ON z.id_zam = v.cislo_zam; Pravé vnější spojení - vrací všechny záznamy z tabulky VYKON_FUNKCE a tedy i ty, pro které by nebyl nalezen odpovídající zaměstnanec. Správně fungující systém by ale měl tomuto stavu zabránit – zachování referenční integrity. SELECT v.cislo_fun, z.prijmeni, z.jmeno FROM zamestnanec z RIGHT JOIN vykon_funkce v ON z.id_zam = v.cislo_zam; Poznámka: Kdyby obsahovali obě tabulky vnějšího spojení stejný název pole (např. id_zam), bylo by možné dotaz zjednodušit: SELECT * FROM zamestnanec LEFT JOIN vykon_funkce USING (id_zam);
21
Propojení 3 tabulek Propojení 3 tabulek použítím podmínky WHERE:
SELECT v.cislo_fun, f.nazev, z.prijmeni, z.jmeno FROM zamestnanec z, vykon_funkce v, funkce f WHERE z.id_zam=v.cis_zam AND v.cis_fun=f.id_fun; Propojení 3 tabulek použítím JOIN-u: SELECT v.cislo_fun, f.nazev, z.prijmeni, z.jmeno FROM zamestnanec z INNER JOIN vykon_funkce v ON z.id_zam = v.cis_zam INNER JOIN funkce f ON v.cis_fun = f.id_fun;
22
Samosloučení Výpis seznamu příjmení, stylem "každý z každým":
SELECT T1.Prijmeni, T2.Prijmeni FROM Tabulka AS T1, Tabulka AS T2 WHERE T1.Prijmeni != T2.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.
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.