Cleverlance. SQL 1

Содержание

Слайд 2

SQL

Structured Query Language
vychází z angličtiny
Vlastnosti SQL:
Výkonnost
Snadná použitelnost
Komplexní funkčnost

STRANA

SQL Structured Query Language vychází z angličtiny Vlastnosti SQL: Výkonnost Snadná použitelnost Komplexní funkčnost STRANA

Слайд 3

1.Dotaz

V nejjednodušším tvaru musí příkaz SELECT obsahovat:
Klauzuli SELECT, která specifikuje, které prvky

1.Dotaz V nejjednodušším tvaru musí příkaz SELECT obsahovat: Klauzuli SELECT, která specifikuje,
(sloupce) se mají zobrazit (vybrat)
Klauzuli FROM, která určuje odkud, z které tabulky (tabulek) se data vybírají

SELECT * FROM zamestnanci;

STRANA

Слайд 4

1.Dotaz

STRANA

1.Dotaz STRANA

Слайд 5

Selekce

STRANA

SELECT *
FROM zamestnanci;

Selekce STRANA SELECT * FROM zamestnanci;

Слайд 6

Formulace dotazu

SELECT * FROM zamestnanci WHERE pozice='Ucetni'

Vyber zaměstnance, kteří pracují na pozici

Formulace dotazu SELECT * FROM zamestnanci WHERE pozice='Ucetni' Vyber zaměstnance, kteří pracují
účetní

Vyber účetní

Vyber ty záznamy z tabulky zamestnanci, které mají ve sloupci pozice hodnotu ‘Ucetni’

STRANA

Слайд 7

Selekce

STRANA

SELECT *
FROM zamestnanci
WHERE pozice = 'Ucetni';

Selekce STRANA SELECT * FROM zamestnanci WHERE pozice = 'Ucetni';

Слайд 8

Selekce – porovnání s řetězcem

jmeno='Jan'
jmeno <> 'JAN'
jmeno <> 'Jan'

SELECT *

Selekce – porovnání s řetězcem jmeno='Jan' jmeno 'JAN' jmeno 'Jan' SELECT *
FROM zamestnanci WHERE pozice='Ucetni';

STRANA

Слайд 9

Selekce – porovnání s číslem

SELECT * FROM zamestnanci WHERE oddeleni=3;

STRANA

Selekce – porovnání s číslem SELECT * FROM zamestnanci WHERE oddeleni=3; STRANA

Слайд 10

Selekce – porovnání s datumem
Oracle:
TO_DATE(‘2004-03-17','yyyy-mm-dd')
MSSQL:
convert(datetime,‘2004-03-17',120)

SELECT * FROM zamestnanci WHERE datum_nastupu='01.01.2003';

STRANA

Selekce – porovnání s datumem Oracle: TO_DATE(‘2004-03-17','yyyy-mm-dd') MSSQL: convert(datetime,‘2004-03-17',120) SELECT * FROM zamestnanci WHERE datum_nastupu='01.01.2003'; STRANA

Слайд 11

Operátory porovnání

Operátor
=
>
>=
<
<=
<> !=

Význam
Rovná se
Větší než
Větší nebo roven
Menší než
Menší nebo roven
Nerovná

Operátory porovnání Operátor = > >= != Význam Rovná se Větší než
se

STRANA

Слайд 12

Projekce

STRANA

SELECT jmeno, prijmeni
FROM zamestnanci;

Projekce STRANA SELECT jmeno, prijmeni FROM zamestnanci;

Слайд 13

Projekce

Projekce omezuje výsledek dotazu pouze na sloupce, které jsou vyjmenovány za klíčovým

Projekce Projekce omezuje výsledek dotazu pouze na sloupce, které jsou vyjmenovány za
slovem SELECT

SELECT jmeno, prijmeni FROM zamestnanci;

STRANA

Слайд 14

Příklad: Selekce a projekce

STRANA

SELECT jmeno, prijmeni
FROM zamestnanci
WHERE pozice = 'Ucetni';

Příklad: Selekce a projekce STRANA SELECT jmeno, prijmeni FROM zamestnanci WHERE pozice = 'Ucetni';

Слайд 15

Cvičení

Vypište jméno a příjmení všech skladníků.

STRANA

SELECT jmeno, prijmeni
FROM zamestnanci
WHERE pozice

Cvičení Vypište jméno a příjmení všech skladníků. STRANA SELECT jmeno, prijmeni FROM
= 'Skladnik';

Слайд 16

Vypište jména zaměstnanců, kteří nastoupili před rokem 2003.

STRANA

SELECT jmeno, prijmeni
FROM zamestnanci
WHERE

Vypište jména zaměstnanců, kteří nastoupili před rokem 2003. STRANA SELECT jmeno, prijmeni FROM zamestnanci WHERE datum_nastupu
datum_nastupu < '01.01.2003';

Слайд 17

Vypište jména a pozice zaměstnanců, kteří mají základní plat nižší než 10000.

STRANA

Vypište jména a pozice zaměstnanců, kteří mají základní plat nižší než 10000.

SELECT jmeno, prijmeni, pozice
FROM zamestnanci
WHERE zakladni_plat < 10000;

Слайд 18

Vypište zaměstnance oddělení číslo 3

STRANA

SELECT jmeno, prijmeni
FROM zamestnanci
WHERE oddeleni = 3;

Vypište zaměstnance oddělení číslo 3 STRANA SELECT jmeno, prijmeni FROM zamestnanci WHERE oddeleni = 3;

Слайд 19

Kdo nastoupil do firmy 1.8.2004?

STRANA

SELECT jmeno, prijmeni
FROM zamestnanci
WHERE datum_nastupu = '01.08.2004';

Kdo nastoupil do firmy 1.8.2004? STRANA SELECT jmeno, prijmeni FROM zamestnanci WHERE datum_nastupu = '01.08.2004';

Слайд 20

Jaké je křestní jméno zaměstnance Větvičky?

STRANA

SELECT jmeno
FROM zamestnanci
WHERE prijmeni= 'Vetvicka';

Jaké je křestní jméno zaměstnance Větvičky? STRANA SELECT jmeno FROM zamestnanci WHERE prijmeni= 'Vetvicka';

Слайд 21

Cvičení

Kdy nastoupil zaměstnanec s číslem 27?

STRANA

SELECT datum_nastupu
FROM zamestnanci
WHERE zamestnanec_id = 27;

Cvičení Kdy nastoupil zaměstnanec s číslem 27? STRANA SELECT datum_nastupu FROM zamestnanci WHERE zamestnanec_id = 27;

Слайд 22

DISTINCT

STRANA

SELECT DISTINCT pozice
FROM zamestnanci;

DISTINCT STRANA SELECT DISTINCT pozice FROM zamestnanci;

Слайд 23

DISTINCT

Duplicity se z výstupu odstraňují pomocí klíčového slova DISTINCT
klíčové slovo DISTINCT se

DISTINCT Duplicity se z výstupu odstraňují pomocí klíčového slova DISTINCT klíčové slovo
píše za klíčové slovo SELECT a před seznam sloupců v klauzuli SELECT

SELECT DISTINCT pozice FROM zamestnanci;

STRANA

Слайд 24

Výraz

Operátor
+
-
*
/

Popis
Sčítání
Odčítání
Násobení
Dělení

SELECT jmeno, prijmeni, 12*zakladni_plat FROM zamestnanci;

STRANA

Výraz Operátor + - * / Popis Sčítání Odčítání Násobení Dělení SELECT

Слайд 25

Priorita operátorů

Násobení a dělení má přednost před sčítáním a odečítáním
Operátory se stejnou

Priorita operátorů Násobení a dělení má přednost před sčítáním a odečítáním Operátory
prioritou se provádějí zleva doprava
Použití závorek mění pořadí provádění a zjednodušují výrazy

*

/

+

_

STRANA

Слайд 26

alias, AS

STRANA

SELECT jmeno, prijmeni, 12 * zakladni plat as "Rocni PLAT"
FROM

alias, AS STRANA SELECT jmeno, prijmeni, 12 * zakladni plat as "Rocni PLAT" FROM zamestnanci;
zamestnanci;

Слайд 27

alias, AS

Alias umožňuje přejmenovat sloupec výsledku dotazu
Klíčové slovo AS lze vynechat

SELECT jmeno,

alias, AS Alias umožňuje přejmenovat sloupec výsledku dotazu Klíčové slovo AS lze
prijmeni, 12*zakladni_plat AS
"Rocni plat"
FROM zamestnanci;

STRANA

Слайд 28

SELECT - shrnutí

SELECT *|{[DISTINCT] sloupec|výraz [alias],...}
FROM tabulka
[WHERE podmínka(y)]

STRANA

SELECT - shrnutí SELECT *|{[DISTINCT] sloupec|výraz [alias],...} FROM tabulka [WHERE podmínka(y)] STRANA

Слайд 29

AND

klauzule WHERE může více podmínek, které musí být splněny současně
Vyberte zaměstnance, kteří

AND klauzule WHERE může více podmínek, které musí být splněny současně Vyberte
nastoupili roce 2003 a dříve a pracují jako účetní

SELECT * FROM zamestnanci WHERE datum_nastupu<='31-12-2003' AND pozice = 'Ucetni';

STRANA

Слайд 30

OR

Spojkou OR jsou spojeny podmínky, z nichž alespoň jedna musí být

OR Spojkou OR jsou spojeny podmínky, z nichž alespoň jedna musí být
splněna
Příklad
Vyberte všechny cukráře a cukrářky

SELECT * FROM zamestnanci WHERE pozice='Cukrar' OR pozice='Cukrarka';

STRANA

Слайд 31

BETWEEN AND

umožňuje vybrat takové záznamy, pro které je hodnota v uvedeném sloupci

BETWEEN AND umožňuje vybrat takové záznamy, pro které je hodnota v uvedeném
v určitém rozmezí (včetně hraničních hodnot)
Možno použít pro:
datum
číslo
textový řetězec

… WHERE sloupec BETWEEN dolni_mez AND horni_mez

STRANA

Слайд 32

BETWEEN AND

Příklad:
Vypište zaměstnance kteří nastoupili v roce 2003

SELECT * FROM zamestnanci WHERE datum_nastupu

BETWEEN AND Příklad: Vypište zaměstnance kteří nastoupili v roce 2003 SELECT *
BETWEEN '01-01-2003' AND '31-12-2003';

STRANA

Слайд 33

IN

Porovnává hodnotu se seznamem
Příklad:
Vyberte všechny cukráře a cukrářky

SELECT * FROM zamestnanci WHERE

IN Porovnává hodnotu se seznamem Příklad: Vyberte všechny cukráře a cukrářky SELECT
pozice IN ('Cukrar','Cukrarka');

STRANA

Слайд 34

LIKE

Porovnává řetězec s uvedenou maskou
Zástupné znaky:
_ (podtržítko) nahrazuje právě jeden znak
% nahrazuje

LIKE Porovnává řetězec s uvedenou maskou Zástupné znaky: _ (podtržítko) nahrazuje právě
libovolný počet znaků (nula a více znaků)
Maska '_a%' odpovídá slovům:
Pavel _ nahrazuje P, % nahrazuje 'vel'
maminka _ nahrazuje m, % nahrazuje ‘minka'

STRANA

Слайд 35

LIKE

Příklad:
Kteří zaměstnanci mají příjmení, které začíná na písmeno N:

SELECT jmeno, prijmeni FROM

LIKE Příklad: Kteří zaměstnanci mají příjmení, které začíná na písmeno N: SELECT
zamestnanci WHERE prijmeni LIKE 'N%';

STRANA

Слайд 36

Masky – cvičení

Které z vyjmenovaných slov odpovídají masce?
LIKE 'N%'
‘novak' ,'Novak', 'N‘, ‘Hanák‚
LIKE

Masky – cvičení Které z vyjmenovaných slov odpovídají masce? LIKE 'N%' ‘novak'
'_a%‘
‘pa’, ‘papa’, ‘ahoj’, ’pavel’
LIKE ‘%les%’
‘Lesnik’, ‘lesnik’, ‘prales’, ’polesny’

STRANA

Слайд 37

IS NULL

NULL je speciální hodnota pro hodnoty, které nejsou vyplněny
NULL se nemůže

IS NULL NULL je speciální hodnota pro hodnoty, které nejsou vyplněny NULL
porovnávat pomocí = nebo <>
Pro porovnání je třeba použít IS NULL nebo IS NOT NULL
Příklad:
Který zaměstnanec nemá nadřízeného?

SELECT jmeno, prijmeni, pozice FROM zamestnanci WHERE nadrizeny_id IS NULL;

STRANA

Слайд 38

NOT

Negace následující podmínky
Příklad:
Vypiš jména všech zaměstnanců kromě účetních

SELECT * FROM zamestnanci WHERE

NOT Negace následující podmínky Příklad: Vypiš jména všech zaměstnanců kromě účetních SELECT
NOT pozice= 'Ucetni';

STRANA

Слайд 39

Priority operatoru

Pořadí vyhodnocení Operátor
1 Aritmetické operace ( * / + - )
2 Operátor

Priority operatoru Pořadí vyhodnocení Operátor 1 Aritmetické operace ( * / +
zřetězení ( || )
3 Porovnání
4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 NOT logická podmínka
7 AND logická podmínka
8 OR logická podmínka

STRANA

Слайд 40

Cvičení

Vypište zaměstnance, kteří pracují na pozici ‘Reditel’ nebo jsou na pozici ‘Ucetni’

Cvičení Vypište zaměstnance, kteří pracují na pozici ‘Reditel’ nebo jsou na pozici
s platem větším než 15000

STRANA

SELECT jmeno, prijmeni, pozice, zakladni_plat
FROM zamestnanci
WHERE pozice = 'Reditel' OR pozice = 'Ucetni' AND zakladni_plat > 15000;

Слайд 41

Vypište zaměstnance :
kteří mají na druhém místě v křestním jméně písmeno ‘a’
kteří

Vypište zaměstnance : kteří mají na druhém místě v křestním jméně písmeno
nemají na druhém místě v křestním jméně písmeno ‘a’
jejich příjmení končí písmenem ‘a’
kteří mají kdekoliv ve jméně ‘i’
kteří pracují na pozici ‘Ucetni’ nebo ‘Referent’
kteří nemají nadřízené

STRANA

Слайд 42

ORDER BY

Třídění výsledku dotazu podle jednoho nebo více sloupců
Vzestupné třídění ASC (defaultní)
Sestupné

ORDER BY Třídění výsledku dotazu podle jednoho nebo více sloupců Vzestupné třídění
třídění DESC

SELECT prijmeni, jmeno FROM zamestnanci ORDER BY prijmeni, jmeno ASC;

STRANA

Слайд 43

Agregační funkce

AVG průměr
COUNT počet
MAX maximum
MIN minimum
SUM součet

STRANA

Agregační funkce AVG průměr COUNT počet MAX maximum MIN minimum SUM součet STRANA

Слайд 44

COUNT

SELECT COUNT(*) FROM zamestnanci;

SELECT COUNT(*)
FROM zamestnanci WHERE datum_nastupu BETWEEN '01.01.2003' AND '31.12.2003';

STRANA

COUNT SELECT COUNT(*) FROM zamestnanci; SELECT COUNT(*) FROM zamestnanci WHERE datum_nastupu BETWEEN

Kolik má tabulka zamestnanci záznamů?
Kolik zaměstnanců nastoupilo v průběhu roku 2003?

Слайд 45

AVG

SELECT AVG(zakladni_plat) FROM zamestnanci;

STRANA

Jaký je průměrný základni plat v tabulce zamestnanci?

AVG SELECT AVG(zakladni_plat) FROM zamestnanci; STRANA Jaký je průměrný základni plat v tabulce zamestnanci?

Слайд 46

MAX a MIN

Kolik je maximální plat?
Od kdy pracuje ve firmě zaměstnanec, který

MAX a MIN Kolik je maximální plat? Od kdy pracuje ve firmě
je pracuje ve firmě pracuje nejdéle?

SELECT MAX(zakladni_plat) FROM zamestnanci;

SELECT MIN(datum_nastupu) FROM zamestnanci;

STRANA

Слайд 47

Operátor zřetězení

Umožňuje spojit libovolné řetězce
|| (dvě svislé čáry)

SELECT 'Tabulka zamestnanci ma '

Operátor zřetězení Umožňuje spojit libovolné řetězce || (dvě svislé čáry) SELECT 'Tabulka
|| count(*) ||' zaznamu' AS "Vysledek dotazu" FROM zamestnanci;

STRANA

Слайд 48

GROUP BY

GROUP BY umožňuje seskupit řádky a získávat souhrnné informace za jednotlivé

GROUP BY GROUP BY umožňuje seskupit řádky a získávat souhrnné informace za
skupiny
Užití společně s agregačními funkcemi
Všechny sloupce, které jsou v seznamu sloupců SELECT, které nejsou v agregačních funkcích, musí být uvedeny v klauzuli GROUP BY

STRANA

Слайд 49

GROUP BY

Asistentka

Cukrar

Cukrarka

STRANA

GROUP BY Asistentka Cukrar Cukrarka STRANA

Слайд 50

GROUP BY

Příklad:
Kolik lidí pracuje na jednotlivých pozicích?

SELECT pozice, COUNT(*) FROM zamestnanci

GROUP BY Příklad: Kolik lidí pracuje na jednotlivých pozicích? SELECT pozice, COUNT(*)
GROUP BY pozice;

STRANA

Слайд 51

GROUP BY

STRANA

SELECT pozice, COUNT(*)
FROM zamestnanci
GROUP BY pozice;

GROUP BY STRANA SELECT pozice, COUNT(*) FROM zamestnanci GROUP BY pozice;

Слайд 52

HAVING

Podmínky, které se vztahují ke skupině nemůžeme psát do klauzule WHERE
Vlastnosti skupiny

HAVING Podmínky, které se vztahují ke skupině nemůžeme psát do klauzule WHERE
píšeme do klauzule HAVING
Můžeme používat agregační funkce, které nemusí být uvedeny v klauzuli SELECT

STRANA

Слайд 53

HAVING

Příklad:
Vypište pozice a počet zaměstnanců u pozic, které mají průměrný plat alespoň

HAVING Příklad: Vypište pozice a počet zaměstnanců u pozic, které mají průměrný
15000

SELECT pozice, COUNT(*) FROM zamestnanci GROUP BY pozice HAVING AVG(zakladni_plat)>=15000;

STRANA

Слайд 54

Pořadí klíčových slov v dotazu

SELECT sloupce, výrazy
FROM tabulka
[WHERE podmínky]
[GROUP BY výraz pro seskupení]
[HAVING podmínky pro skupiny]
[ORDER

Pořadí klíčových slov v dotazu SELECT sloupce, výrazy FROM tabulka [WHERE podmínky]
BY sloupce]

STRANA

Слайд 55

Cvičení (pokračování)

Kolik je průměrný základní plat?
Kolik ve firmě pracuje účetních?
Kolik je průměrný

Cvičení (pokračování) Kolik je průměrný základní plat? Kolik ve firmě pracuje účetních?
plat uklízeček?
Vypište průměrný plat podle oddělení
Vypište průměrný plat na odděleních, které mají více než jednoho zaměstnance.
Napište seznam zaměstnanců setříděný podle toho, jak dlouho ve firmě pracují.
Jaký je průměrný plat zaměstnanců, kteří nastoupili před rokem 2000?

STRANA

Слайд 56

Cvičení (pokračování)

Kolik je průměrný základní plat?

STRANA

SELECT AVG(zakladni_plat)
FROM zamestnanci;

Cvičení (pokračování) Kolik je průměrný základní plat? STRANA SELECT AVG(zakladni_plat) FROM zamestnanci;

Слайд 57

Cvičení (pokračování)

Kolik ve firmě pracuje účetních?

STRANA

SELECT COUNT(*)
FROM zamestnanci
WHERE pozice = 'Ucetni';

Cvičení (pokračování) Kolik ve firmě pracuje účetních? STRANA SELECT COUNT(*) FROM zamestnanci WHERE pozice = 'Ucetni';

Слайд 58

Cvičení (pokračování)

Kolik je průměrný plat uklízeček?

STRANA

SELECT AVG(zakladni_plat)
FROM zamestnanci
WHERE pozice = 'Uklizecka';

Cvičení (pokračování) Kolik je průměrný plat uklízeček? STRANA SELECT AVG(zakladni_plat) FROM zamestnanci WHERE pozice = 'Uklizecka';

Слайд 59

Cvičení (pokračování)

Vypište průměrný plat podle oddělení

STRANA

SELECT oddeleni, AVG(zakladni_plat)
FROM zamestnanci
GROUP BY oddeleni;

Cvičení (pokračování) Vypište průměrný plat podle oddělení STRANA SELECT oddeleni, AVG(zakladni_plat) FROM zamestnanci GROUP BY oddeleni;

Слайд 60

Cvičení (pokračování)

Vypište průměrný plat na odděleních, které mají více než jednoho zaměstnance.

STRANA

Cvičení (pokračování) Vypište průměrný plat na odděleních, které mají více než jednoho

SELECT oddeleni, AVG(zakladni_plat)
FROM zamestnanci
GROUP BY oddeleni
HAVING COUNT(*) > 1;

Слайд 61

Cvičení (pokračování)

Napište seznam zaměstnanců setříděný podle toho, jak dlouho ve firmě pracují.

STRANA

Cvičení (pokračování) Napište seznam zaměstnanců setříděný podle toho, jak dlouho ve firmě

SELECT jmeno, prijmeni, datum_nastupu
FROM zamestnanci
ORDER BY datum_nastupu;