Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

SQL Výběr dat Databázové systémy. Příkaz SELECT Jádro databázového jazyka SQL. Kompletní syntaxe vypadá následovně: SELECT [DISTINCT|ALL] seznam vybíraných.

Podobné prezentace


Prezentace na téma: "SQL Výběr dat Databázové systémy. Příkaz SELECT Jádro databázového jazyka SQL. Kompletní syntaxe vypadá následovně: SELECT [DISTINCT|ALL] seznam vybíraných."— Transkript prezentace:

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

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. 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. SELECT * FROM zamestnanec;

5 Výběr určitých sloupců - PROJEKCE Příkaz provede vypsání všech vy jmenovaných sloupců. 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. SELECT Prijmeni, Jmeno, Titul, Rodnec FROM zamestnanec;

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. 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. SELECT Prijmeni, Jmeno, Titul, Plat, (Plat/30) FROM zamestnanec;

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. Prijmeni Jmeno Titul Plat Euro Janda Jaroslav Kříž Jiří Ing Adamec Miloš Hanuš Jan RNDr Zikmund Adam Stráský Luboš SELECT Prijmeni,Jmeno,Titul,Plat,(Plat/30) AS Euro FROM zamestnanec;

8 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. Výběr s eliminací redundantních řádků

9 V podmínce WHERE je možné použít následující operátory: Výběr údajů s podmínkou WHERE-RESTRIKCE OperátorPopis =Rovná se Je větší než <=Je menší než nebo roven >=Je větší než nebo roven !=Nerovná se IS NOT NULLNení prázdná (obsahuje hodnotu) IS NULLJe prázdná (neobsahuje hodnotu) BETWEENV rozmezí NOT BETWEENMimo 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 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: SELECT Jmeno, Prijmeni FROM zamestnanec 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; Příklady:

11 BETWEEN slouží k zobrazení hodnot sloupce, které se nacházejí v určitém rozpětí. Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Janda Jaroslav Adamec Miloš Zikmund Adam To samé bychom mohli samozřejmě zapsat bez BETWEEN: Zobrazení hodnot v určitém rozpětí: BETWEEN SELECT * FROM zamestnanec WHERE Plat BETWEEN 1000 AND 7000 ; SELECT * FROM zamestnanec WHERE Plat>=1000 AND Plat<=7000

12 Využívají se pro porovnání řetězců v širším měřítku. Využití operátorů LIKE A NOT LIKE 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 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í. Tříděný výpis: ORDER BY SELECT * FROM tabulka ORDER BY Jmeno DESC

14 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í Indexování záznamů probíhá od 0, tj. LIMIT 0,5 vypíše 1. až 5. záznam. Chceme-li vybrat třetího nastoupeného zaměstnance: Omezení počtu záznamů ve výsledné sadě SELECT * FROM zamestnanec LIMIT 5; SELECT * FROM zamestnanec LIMIT 5,10; SELECT * FROM zamestnanec ORDER BY datum_nastupu ASC LIMIT 2,1;

15 Zobrazí všechny pracovníky z tabulky, kteří nastoupili před,, ". Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Kříž Jiří Ing Adamec Miloš Stráský Luboš Výběr podle datumu: SELECT * FROM Tabulka WHERE Nastup <“ “;

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 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í: Příklady: Vnitřní spojení – inner join 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 Levé vnější spojení - vypíše všechny zaměstnance, tedy i ty, kteří nevykonávají žádnou přidělenou funkci. Příklady: Vnější spojení – outer join 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 použítím podmínky WHERE: Propojení 3 tabulek 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; 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:

22 Výpis seznamu příjmení, stylem "každý z každým " : Samosloučení 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.

Stáhnout ppt "SQL Výběr dat Databázové systémy. Příkaz SELECT Jádro databázového jazyka SQL. Kompletní syntaxe vypadá následovně: SELECT [DISTINCT|ALL] seznam vybíraných."

Podobné prezentace


Reklamy Google