Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
SQL – příkaz SELECT Ing. Roman Danel, Ph.D. roman.danel@vsb.cz
Institut ekonomiky a systémů řízení Hornicko–geologická fakulta
2
Přehled pojmů Projekce - FROM Restrikce - WHERE Kartézský součin
Spojování tabulek – JOIN DISTINCT – jedinečné hodnoty UNION – sjednocení dotazů EXCEPT – rozdíl dotazů INTERSECT – průnik dotazů Řazení výsledků – ORDER BY Seskupování – GROUP BY, filtr HAVING NULL Vnořené dotazy
3
SELECT – ukázky syntaxe
Výpis všech polí z tabulky, která se jmenuje Customers: SELECT * from Customers; Výpis vybraných polí z tabulky, která se jmenuje Customers: SELECT výčet_polí FROM tabulka; Výpis slopuců Company a Country z tabulky, která se jmenuje Customers, kde platí podmínka: SELECT Company, Country FROM Customers WHERE Country <> 'USA' ;
4
SELECT Výpis všech sloupců z tabulky SELECT * FROM Table
Výpis z tabuky Table1 je spojen s výpisem z Table2 SELECT col1, col2 FROM Table1 UNION SELECT col1, col2 FROM Table2 Totéž včetně duplicit UNION ALL Výsledkem dotazu je rozdíl (tj. data, která jsou v Table1 a zároveň nejsou v Table2 EXCEPT Průnik INTERSECT Kartézský součin SELECT * FROM Table1 CROSS JOIN Table2 Projekce SELECT DISTINCT col1 FROM Table1
5
SELECT SELECT Výpis dat z tabulky FROM Seznam tabulek WHERE
Predikát určující podmínku výběru (filtr dat) ORDER BY Způsob setřídění výsledných dat GROUP BY Agregační funkce (seskupení dat) HAVING Podmínka pro seskupení dat
6
Projekce Výpis části tabulky – seznam sloupců v příkazu SELECT
select jmeno, prijmeni from SEZNAM
7
Restrikce Omezení množiny řádků na základě podmínky – predikát WHERE
Podmínky lze kombinovat pomocí logických spojek select jmeno, prijmeni from SEZNAM where PRIJMENI = ‚Turek‘
8
Kartézský součin V dotazu můžeme za slovo FROM uvést více názvů tabulek. Dosáhneme tím tzv. kartézského součinu. Získáme množinu obsahující všechny kombinace záznamů Nežádoucí jev – měla by být restrikce - WHERE! select * from SEZNAM, PREDMETY
9
Spojování tabulek - JOIN
umožňuje oddělit dva druhy podmínek – jedny slouží k propojení tabulek (za JOIN … ON) a druhé k restrikci (za WHERE). Pomocí slova AS určíme aliasy tabulek select JMENO, PRIJMENI, NAZEV_PREDMET, ZNAMKA from SEZNAM left join VYSLEDKY on SEZNAM.ID_SEZNAM = VYSLEDKY.ID_SEZNAM left join PREDMETY on PREDMETY.ID_PREDMET = VYSLEDKY.ID_PREDMET where SEZNAM.PRIJMENI = 'Turek'
10
Příklad: Inner join Inner join vrátí pouze záznamy, pro které existuje
Outer join vrátí všechny záznamy zprava (right) nebo zleva (left) bez ohledu na existenci záznamů v spojované tabulce Příklad inner join: SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
11
Distinct – jedinečné hodnoty
select prijmeni from SEZNAM select DISTINCT prijmeni from SEZNAM
12
Union – sjednocení dotazů
Sjednocená množina ze dvou tabulek Záznamy musí být stejného datového typu SELECT jmeno, prijmeni FROM osobni_kontakty UNION FROM autori;
13
EXCEPT – rozdíl dotazů Seznam osob, které jsou v autorech, ale nejsou v osobních kontaktech SRBD Oracle: „MINUS“ SELECT jmeno, prijmeni FROM autor EXCEPT FROM osobni_kontakty ORDER BY prijmeni
14
INTERSECT – průnik dotazů
Seznam osob, které jsou autorem a zároveň i osobou v našich kontaktech SELECT jmeno, prijmeni FROM autor INTERSECT FROM osobni_kontakty ORDER BY prijmeni
15
Řazení výsledků Ascending – vzestupně (od 0 do 9, od A do Z…)
Descending – sestupně (Z-A, 9-0) select jmeno, prijmeni from SEZNAM order by PRIJMENI [ascending / descending]
16
Seskupování – GROUP BY Seskupení dle podmínky v GROUP BY
Ve výčtu polí lze uvést pouze pole z GROUP BY nebo agregační funkce (count, sum, min, max…) Select prijmeni, count(*) from SEZNAM group by PRIJMENI
17
Seskupování – agregační funkce
Count Sum Min Max Avg (= average)
18
Seskupování – filtrování
Klauzule HAVING Select prijmeni, count(*) from SEZNAM group by PRIJMENI HAVING count(*) > 1
19
NULL hodnoty Hodnota není určena
Nelze porovnávat pomocí operátorů: =, >, < IS NULL, IS NOT NULL
20
Vnořené dotazy Zanořený dotaz Lze i na místě sloupce
SELECT max(pocet), min(pocet), avg(pocet) FROM ( SELECT count(k.id) AS pocet FROM autor AS a LEFT JOIN kniha AS k ON (a.id = k.autor) GROUP BY a.id ) AS knihy;
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.