Datové a procesní modely
Datové a procesní modely [ Relační databáze ] Přednáška 4 Marian Kamenický
Syntea software group a.s.
[email protected] MFFUK Praha 2013/14
1
Jednotabulkové dotazy Oso PK
Jmeno
FK1
Plat IdOdd
Select * From Oso Select * From Oso
Select * From Oso Select * From Oso Where IdOdd = 200 Where IdOdd = 200 Select Jmeno, Plat From Oso Select Jmeno, Plat From Oso Where IdOdd = 100 Where IdOdd = 100
Oso Datové a procesní modely Jmeno
Plat
IdOdd
Franta
10 000
100
Pepa
20 000
200
Fany
30 000
300
Gaby
25 000
100
Karel
20 000
200
Oso Jmeno
Plat
IdOdd
Franta
10 000
100
Pepa
20 000
200
Fany
30 000
300
Gaby
25 000
100
Karel
20 000
200
Oso Jmeno
Plat
IdOdd
Pepa
20 000
200
Karel
20 000
200
Oso Jmeno
Plat
Franta
10 000
Gaby
25 000
Vícetabulkové dotazy
vícetabulkový dotaz =
Datové a procesní modely
Oso
Adr
Jmeno Plat IdOdd
Mesto
klauzule FROM == více tabulek
Franta
Brno
== spojování tabulek
Pepa
Chlum
Karel
Select Select ......... ......... From From Oso , Oso ,Adr Adr
Jmeno
Plat IdOdd Mesto
Franta Brno Pepa Chlum Karel
Ulice Cislo
Ulice Cislo
Vícetabulkové dotazy
Datové a procesní modely
vícetabulkový dotaz =
klauzule FROM == více tabulek
== spojování tabulek
Oso
Adr
Jmeno Plat Plat IdOdd IdOdd Jmeno Franta
Mesto Ulice Ulice Cislo Cislo Mesto Brno Chlum
Pepa Karel
Select Select ......... ......... From From Oso , Oso ,Adr Adr
Jmeno
Plat IdOdd Mesto
Franta Brno Pepa Chlum Karel
Ulice Cislo
Vícetabulkové dotazy
Oso Jmeno
Plat
Adr IdOdd
Franta
spojováním tabulek
se spojí sloupce
Datové modely Mesto a procesní Ulice Cislo Brno Chlum
Pepa
Karel
řádku jedné tabulky [Oso] chceme doplnit o informace [Adr]
Jmeno
Plat
IdOdd
Mesto
Franta Brno Pepa Chlum Karel
z druhé tabulky
propojením jejich sloupců [ Mesto, Ulice, Cislo]
spojování tabulek ==
obohacování řádek jedné tabulky o data jiné tabulky Select Select ......... ......... From From Oso , Oso ,Adr Adr
Ulice
Cislo
Vícetabulkové dotazy
Oso Jmeno
Plat
Adr IdOdd
Franta
spojováním tabulek se spojí sloupce obou tabulek
zároveň však dojde
ke spojování řádek
řádky jedné tablky
se spojí se všemi / či některými řádky druhé tabulky
Datové modely Mesto a procesní Ulice Cislo Brno Chlum
Pepa
Karel
Jmeno
Plat
IdOdd
Mesto
Franta
Brno
Pepa
Brno Chlum
Karel
Ulice
Cislo
Vícetabulkové dotazy
2 způsoby spojování tabulek
explicitní explicitní
Select Select ............ ............ From Join ......Adr Adr ... ... From Oso ... Oso ...Join
implicitní implicitní
Select Select ......... ......... From From Oso , Oso , Adr Adr
jakmile v klauzuli FROM jsou dvě či více tabulek
jde vždy o spojování [join]
explicitní / implicitní
Datové a procesní modely
Datové a procesní modely
kart ézský sou čin popsal é kartézský součin popsal poprv poprvé Standhal Standhal vv knize knize
Kartouza parmsk á parmská [[nebo nebo snad snad ne ne ??]]
Spojování tabulek
Datové a procesní modely
ppřirozené řirozené
(NATURAL (NATURALJOIN) JOIN)
kkřížové řížové
(CROSS (CROSSJOIN) JOIN)
vnit řní vnitřní
(INNER (INNERJOIN) JOIN)
vn ější vnější
(OUTER (OUTERJOIN) JOIN)
ÊÊ ú plné vn ější úplné vnější
(FULL (FULLOUTER OUTERJOIN) JOIN)
ÊÊ ččástečné ástečné vn ější vnější
––„„z z leva “ leva“
(LEFT (LEFTJOIN) JOIN)
––„„z z prava “ prava“
(RIGHT (RIGHTJOIN) JOIN)
9
Cross Join
Datové a procesní modely
Select From
* Tab1 Cross Join Tab2
1
1
2
2
3
3
Tab 1
Tab 2
Z Tab 1
z Tab 2
1 radka
1 r.
1 radka
2 r.
1 radka
3 r.
2 radka
1 r.
2 radka
2 r.
2 radka
3 r.
3 radka
1 r.
3 radka
2 r.
3 radka
3 r.
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
* Tab1 Cross Join Tab2
Tab 1
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
* Tab1 Cross Join Tab2
Tab 1
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
* Tab1 Cross Join Tab2
Tab 1
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
* Tab1 Cross Join Tab2
Tab 1
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
* Tab1
,
Tab2
Tab 1
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
explicitní * explicitní křížové křížové spojení spojení Tab1 Cross Join Tab2
Tab 1
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Cross Join 1
1
2
2
3
3
Tab 1
Tab 2
Datové a procesní modely
Select From
* Tab1
,
Tab2
Tab 1
implicitní implicitní křížové křížové spojení spojení
Tab 2
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Pepa
1970
jablko
zelene
Vojta
1990
jahoda
ruda
Jm
RokNar
Ovoce
Barva
Franta
1960
banan
zluty
Franta
1960
jablko
zelene
Franta
1960
jahoda
ruda
Pepa
1970
banan
zluty
Pepa
1970
jablko
zelene
Pepa
1970
jahoda
ruda
Vojta
1990
banan
zluty
Vojta
1990
jablko
zelene
Vojta
1990
jahoda
ruda
Spojení Cross Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
implicitní implicitní Cross Cross Join Join Select Oso.* , Odd.* Select Oso.* , Odd.* From From Oso, Oso, Odd Odd explicitní explicitní Cross Cross Join Join Select Oso.* , Odd.* Select Oso.* , Odd.* From From Oso Oso Cross CrossJoin Join Odd Odd
kartézský kartézskýsoučin součintabulek tabulek
Odd
Oso
Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Spojení Cross Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso, Oso, Odd Odd Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso Oso Cross CrossJoin Join Odd Odd kartézský kartézskýsoučin součintabulek tabulek
Odd
Oso
Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Franta
10 000
100
200
Prodej
B
Franta
10 000
100
300
Propagace
A
Spojení Cross Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso, Oso, Odd Odd Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso Oso Cross CrossJoin Join Odd Odd kartézský kartézskýsoučin součintabulek tabulek
Odd
Oso
Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Franta
10 000
100
200
Prodej
B
Franta
10 000
100
300
Propagace
A
Pepa
20 000
200
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Pepa
20 000
200
300
Propagace
A
Spojení Cross Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso, Oso, Odd Odd Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso Oso Cross CrossJoin Join Odd Odd kartézský kartézskýsoučin součintabulek tabulek
Odd
Oso
Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Franta
10 000
100
200
Prodej
B
Franta
10 000
100
300
Propagace
A
Pepa
20 000
200
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Pepa
20 000
200
300
Propagace
A
Spojení Cross Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso, Oso, Odd Odd Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso Oso Cross CrossJoin Join Odd Odd kartézský kartézskýsoučin součintabulek tabulek Select Select Jmeno Jmeno,,Plat, Plat,Nazev Nazev From From Oso, Oso, Odd Odd [From [From Oso Oso Cross CrossJoin Join Odd] Odd]
Odd
Oso
Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Franta
10 000
100
200
Prodej
B
Franta
10 000
100
300
Propagace
A
Pepa
20 000
200
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Pepa
20 000
200
300
Propagace
A
Jmeno
Plat
Nazev
Franta
10 000
Nakup
Franta
10 000
Prodej
Franta
10 000
Propagace
Pepa
20 000
Nakup
Pepa
20 000
Prodej
Pepa
20 000
Propagace
Spojení Cross Oso
Datové a procesní modely
Odd
PK
Jmeno
PK
IdOdd
FK1
Plat IdOdd
FK1
Nazev KodBudovy
Budova PK
KodBudovy Barva Adresa
Odd
Oso
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB implicitní implicitníCross Cross Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as Odd asDD Cross CrossJoin Join Budova Budova as asBB explicitní explicitníCross Cross
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd
Jmeno
Plat
Nazev
KodBudovy
Barva
Adrresa
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd
Jmeno
Plat
Nazev
Franta
10 000
Nakup
Franta
10 000
Prodej
Franta
10 000
Propagace
KodBudovy
Barva
Adrresa
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd
Jmeno
Plat
Nazev
Franta
10 000
Nakup
Franta
10 000
Prodej
Franta
10 000
Propagace
Pepa
20 000
Nakup
Pepa
20 000
Prodej
Pepa
20 000
Propagace
KodBudovy
Barva
Adrresa
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd spojíme spojímesskaždým každýmřádkem řádkem3. 3.
Jmeno
Plat
Nazev
Franta
10 000
Nakup
Franta
10 000
Prodej
Franta
10 000
Propagace
Pepa
20 000
Nakup
Pepa
20 000
Prodej
Pepa
20 000
Propagace
KodBudovy
Barva
Adrresa
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd spojíme spojímesskaždým každýmřádkem řádkem3. 3.
Jmeno
Plat
Nazev
KodBudovy
Barva
Adrresa
Franta
10 000
Nakup
A
žlutá
Krátká 10
Franta
10 000
Prodej
A
žlutá
Krátká 10
Franta
10 000
Propagace
A
žlutá
Krátká 10
Pepa
20 000
Nakup
A
žlutá
Krátká 10
Pepa
20 000
Prodej
A
žlutá
Krátká 10
Pepa
20 000
Propagace
A
žlutá
Krátká 10
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd spojíme spojímesskaždým každýmřádkem řádkem3. 3.
Jmeno
Plat
Nazev
KodBudovy
Barva
Adrresa
Franta
10 000
Nakup
A
žlutá
Krátká 10
Franta
10 000
Prodej
A
žlutá
Krátká 10
Franta
10 000
Propagace
A
žlutá
Krátká 10
Pepa
20 000
Nakup
A
žlutá
Krátká 10
Pepa
20 000
Prodej
A
žlutá
Krátká 10
Pepa
20 000
Propagace
A
žlutá
Krátká 10
Franta
10 000
Nakup
Franta
10 000
Prodej
Franta
10 000
Propagace
Pepa
20 000
Nakup
Pepa
20 000
Prodej
Pepa
20 000
Propagace
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd spojíme spojímesskaždým každýmřádkem řádkem3. 3.
Jmeno
Plat
Nazev
KodBudovy
Barva
Adrresa
Franta
10 000
Nakup
A
žlutá
Krátká 10
Franta
10 000
Prodej
A
žlutá
Krátká 10
Franta
10 000
Propagace
A
žlutá
Krátká 10
Pepa
20 000
Nakup
A
žlutá
Krátká 10
Pepa
20 000
Prodej
A
žlutá
Krátká 10
Pepa
20 000
Propagace
A
žlutá
Krátká 10
Franta
10 000
Nakup
B
modrá
Dlouhá 16
Franta
10 000
Prodej
B
modrá
Dlouhá 16
Franta
10 000
Propagace
B
modrá
Dlouhá 16
Pepa
20 000
Nakup
B
modrá
Dlouhá 16
Pepa
20 000
Prodej
B
modrá
Dlouhá 16
Pepa
20 000
Propagace
B
modrá
Dlouhá 16
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From Oso as From Oso asOO Cross CrossJoin Join Odd as D Cross Join Odd as D Cross Join Budova as Budova asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd spojíme spojímesskaždým každýmřádkem řádkem3. 3.
Jmeno
Plat
Nazev
KodBudovy
Barva
Adrresa
Franta
10 000
Nakup
A
žlutá
Krátká 10
Franta
10 000
Prodej
A
žlutá
Krátká 10
Franta
10 000
Propagace
A
žlutá
Krátká 10
Pepa
20 000
Nakup
A
žlutá
Krátká 10
Pepa
20 000
Prodej
A
žlutá
Krátká 10
Pepa
20 000
Propagace
A
žlutá
Krátká 10
Franta
10 000
Nakup
B
modrá
Dlouhá 16
Franta
10 000
Prodej
B
modrá
Dlouhá 16
Franta
10 000
Propagace
B
modrá
Dlouhá 16
Pepa
20 000
Nakup
B
modrá
Dlouhá 16
Pepa
20 000
Prodej
B
modrá
Dlouhá 16
Pepa
20 000
Propagace
B
modrá
Dlouhá 16
Oso
Spojení Cross Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
Odd
PK
Budova
IdOdd
PK
KodBudovy
Datové a procesní modely Nazev Barva FK1
KodBudovy
Adresa
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select Select O.Jmeno, O.Jmeno,O.Plat, O.Plat,D.Nazev, D.Nazev, B.* B.* From as From Oso Oso asO, O, Odd as Odd asD, D, Budova Budova as asBB
kartézský kartézskýsoučin součin dvou dvouprvních prvníchtabulek tabulek Oso OsoaaOdd Odd spojíme spojímesskaždým každýmřádkem řádkem3. 3.
celkem celkemřádek řádek 22[Oso [Odd]]xx33[Budova [Budova]] [Oso]]xx33[Odd ---> --->18 18
Jmeno
Plat
Nazev
KodBudovy
Barva
Adrresa
Franta
10 000
Nakup
A
žlutá
Krátká 10
Franta
10 000
Prodej
A
žlutá
Krátká 10
Franta
10 000
Propagace
A
žlutá
Krátká 10
Pepa
20 000
Nakup
A
žlutá
Krátká 10
Pepa
20 000
Prodej
A
žlutá
Krátká 10
Pepa
20 000
Propagace
A
žlutá
Krátká 10
Franta
10 000
Nakup
B
modrá
Dlouhá 16
Franta
10 000
Prodej
B
modrá
Dlouhá 16
Franta
10 000
Propagace
B
modrá
Dlouhá 16
Pepa
20 000
Nakup
B
modrá
Dlouhá 16
Pepa
20 000
Prodej
B
modrá
Dlouhá 16
Pepa
20 000
Propagace
B
modrá
Dlouhá 16
Franta
10 000
Nakup
C
bílá
Akorát 20
Franta
10 000
Prodej
C
bílá
Akorát 20
Franta
10 000
Propagace
C
bílá
Akorát 20
Pepa
20 000
Nakup
C
bílá
Akorát 20
Pepa
20 000
Prodej
C
bílá
Akorát 20
Pepa
20 000
Propagace
C
bílá
Akorát 20
Datové a procesní modely
ppříklad říklad skoro álný re skoro reá reálný
Spojení Cross - příklad Pan
Datové a procesní modely
Test
Dama
Tanec
Jm
Jm
Nazev
Pan
Dama Tanec Znamka
Bobo
Ema
.....
.....
Pepa
Jana
polka čača
Lucy
tango
Pan Bobo Bobo Bobo
Test Dama Tanec Ema Jana Lucy
vytvořte podklady pro
testování dvojic z tanců Select Select P.Jm Pan, P.Jm Pan, D.Jm Dama, D.Jm Dama, T. Nazev Tanec, T. Nazev Tanec, ' ' Znamka ' ' Znamka From From Pan P Pan P Cross Join Dama D Cross Join Dama D Cross Join Tanec T Cross Join Tanec T
řřešte ešte
.....
..... Znamka
Spojení Cross - příklad Pan
Datové a procesní modely
Test
Dama
Tanec
Jm
Jm
Nazev
Pan
Dama Tanec Znamka
Bobo
Ema
.....
.....
Pepa
Jana
polka čača
Lucy
tango
Pan Bobo Bobo Bobo Pepa Pepa Pepa
Test Dama Tanec Ema Jana Lucy Ema Jana Lucy
vytvořte podklady pro
testování dvojic z tanců Select Select P.Jm Pan, P.Jm Pan, D.Jm Dama, D.Jm Dama, T. Nazev Tanec, T. Nazev Tanec, ' ' Znamka ' ' Znamka From From Pan P Pan P Cross Join Dama D Cross Join Dama D Cross Join Tanec T Cross Join Tanec T
řřešte ešte
.....
..... Znamka
Spojení Cross - příklad Pan
Datové a procesní modely
Test
Dama
Tanec
Jm
Jm
Nazev
Pan
Dama Tanec Znamka
Bobo
Ema
.....
.....
Pepa
Jana
polka čača
Lucy
tango
Pan Bobo Bobo Bobo Pepa Pepa Pepa
Test Dama Tanec Ema polka Jana polka Lucy polka Ema polka Jana polka Lucy polka
vytvořte podklady pro
testování dvojic z tanců Select Select P.Jm Pan, P.Jm Pan, D.Jm Dama, D.Jm Dama, T. Nazev Tanec, T. Nazev Tanec, ' ' Znamka ' ' Znamka From From Pan P Pan P Cross Join Dama D Cross Join Dama D Cross Join Tanec T Cross Join Tanec T
řřešte ešte
.....
..... Znamka
Spojení Cross - příklad Pan
Datové a procesní modely
Test
Dama
Tanec
Jm
Jm
Nazev
Pan
Dama Tanec Znamka
Bobo
Ema
.....
.....
Pepa
Jana
polka čača
Lucy
tango
Pan Bobo Bobo Bobo Pepa Pepa Pepa Bobo Bobo Bobo Pepa Pepa Pepa
Test Dama Tanec Ema polka Jana polka Lucy polka Ema polka Jana polka Lucy polka čača Ema čača Jana čača Lucy čača Ema čača Jana čača Lucy
vytvořte podklady pro
testování dvojic z tanců Select Select P.Jm Pan, P.Jm Pan, D.Jm Dama, D.Jm Dama, T. Nazev Tanec, T. Nazev Tanec, ' ' Znamka ' ' Znamka From From Pan P Pan P Cross Join Dama D Cross Join Dama D Cross Join Tanec T Cross Join Tanec T
řřešte ešte
.....
..... Znamka
Spojení Cross - příklad Pan
Datové a procesní modely
Test
Dama
Tanec
Jm
Jm
Nazev
Pan
Dama Tanec Znamka
Bobo
Ema
.....
.....
Pepa
Jana
polka čača
Lucy
tango
Pan Bobo Bobo Bobo Pepa Pepa Pepa Bobo Bobo Bobo Pepa Pepa Pepa Bobo Bobo Bobo Pepa Pepa Pepa
Test Dama Tanec Ema polka Jana polka Lucy polka Ema polka Jana polka Lucy polka čača Ema čača Jana čača Lucy čača Ema čača Jana čača Lucy Ema tango Jana tango Lucy tango Ema tango Jana tango Lucy tango
vytvořte podklady pro
testování dvojic z tanců Select Select P.Jm Pan, P.Jm Pan, D.Jm Dama, D.Jm Dama, T. Nazev Tanec, T. Nazev Tanec, ' ' Znamka ' ' Znamka From From Pan P Pan P Cross Join Dama D Cross Join Dama D Cross Join Tanec T Cross Join Tanec T
řřešte ešte
.....
..... Znamka
Spojení Cross - příklad Pan
Datové a procesní modely
Test
Dama
Tanec
Jm
Jm
Nazev
Pan
Dama Tanec Znamka
Bobo
Ema
.....
.....
Pepa
Jana
polka čača
Lucy
tango
Pan Bobo Bobo Bobo Pepa Pepa Pepa Bobo Bobo Bobo Pepa Pepa Pepa Bobo Bobo Bobo Pepa Pepa Pepa
Test Dama Tanec Ema polka Jana polka Lucy polka Ema polka Jana polka Lucy polka čača Ema čača Jana čača Lucy čača Ema čača Jana čača Lucy Ema tango Jana tango Lucy tango Ema tango Jana tango Lucy tango
vytvořte podklady pro
testování dvojic z tanců Select Select P.Jm Pan, P.Jm Pan, D.Jm Dama, D.Jm Dama, T. Nazev Tanec, T. Nazev Tanec, ' ' Znamka ' ' Znamka From From Pan P Pan P Cross Join Dama D Cross Join Dama D Cross Join Tanec T Cross Join Tanec T
řřešte ešte
.....
..... Znamka
Datové a procesní modely
mrkně ěmě se mrkn mrkněmě se na na to to jinak jinak
Vztahy mezi tabulkami Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
PK
IdOdd
FK1
Nazev KodBudovy
Datové a procesní modely
Budova PK
vra ťme se ět !!!! vraťme sezp zpět
KodBudovy Barva Adresa
Budova
Odd
Oso Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
mezi tabulkami [entitami modelu] existují vztahy
chceme vztahy využít a "obohatit" řádky
o data zpřízněných řádek z jiných tabulek
Vztahy mezi tabulkami Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
PK
IdOdd
FK1
Nazev KodBudovy
Datové a procesní modely
Budova PK
vra ťme se ět !!!! vraťme sezp zpět
KodBudovy Barva Adresa
Budova
Odd
Oso Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
mezi tabulkami [entitami modelu] existují vztahy
chceme vztahy využít a "obohatit" řádky
o data zpřízněných řádek z jiných tabulek
Vztahy mezi tabulkami Oso
Odd
PK
Jmeno
FK1
Plat IdOdd
PK
IdOdd
FK1
Nazev KodBudovy
Datové a procesní modely
Budova PK
vra ťme se ět !!!! vraťme sezp zpět
KodBudovy Barva Adresa
Budova
Odd
Oso Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
mezi tabulkami [entitami modelu] existují vztahy
chceme vztahy využít a "obohatit" řádky
o data zpřízněných řádek z jiných tabulek spojování tabulek [řádek] podmíníme výrazem popisujícím vzájemný vztah tabulek
Spojování tabulek
Datové a procesní modely
ppřirozené řirozené
(NATURAL (NATURALJOIN) JOIN)
kkřížové řížové
(CROSS (CROSSJOIN) JOIN)
vnit řní vnitřní
(INNER (INNERJOIN) JOIN)
vn ější vnější
(OUTER (OUTERJOIN) JOIN)
ÊÊ ú plné vn ější úplné vnější
(FULL (FULLOUTER OUTERJOIN) JOIN)
ÊÊ ččástečné ástečné vn ější vnější
––„„z z leva “ leva“
(LEFT (LEFTJOIN) JOIN)
––„„z z prava “ prava“
(RIGHT (RIGHTJOIN) JOIN)
44
Vnitřní spojení - Inner Oso
Datové a procesní modely
PK
Jmeno
FK1
Plat IdOdd
PK
IdOdd
FK1
Nazev KodBudovy
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy O.KodBudovy From From Oso Osoas asOO Inner InnerJoin Join Odd Odd DD On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy O.KodBudovy From From Oso Osoas asOOJoin Join Odd Odd DD On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
Odd
Oso
Odd
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Vnitřní spojení - Inner Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Odd
Oso
Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy O.KodBudovy
Jmeno
Plat
IdOdd
From From Oso Osoas asOOJoin Join Odd Odd DD On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
vnitřní spojení způsobem kartézského součinu
při spojování řádek z obou tabulek kontrola
je-li splněna spojovací podmínka
spojeny pouze řádky pro něž podmínka vyhovuje
Nazev
KodBudovy
Vnitřní spojení - Inner Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy O.KodBudovy From From Oso Osoas asOOJoin Join Odd Odd DD On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
Odd
Oso
Odd
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Franta
10 000
100
Nakup
A
Vnitřní spojení - Inner Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy O.KodBudovy From From Oso Osoas asOOJoin Join Odd Odd DD On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
Odd
Oso
Odd
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Franta
10 000
100
Nakup
A
Pepa
20 000
200
Prodej
B
Vnitřní spojení - Inner
Datové a procesní modely
Oso
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Barva
Adresa
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy, O.KodBudovy, B.Barva, B.Barva, B.Adresa B.Adresa From DD From Oso Osoas asOOJoin Join Odd Odd Join Join Budova Budova BB
On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
On On B.KodBudovy B.KodBudovy==D. D.KodBudovy KodBudovy
Vnitřní spojení - Inner
Datové a procesní modely
Budova Jmeno
Plat
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
Prodej
B
B
modrá
Dlouhá 16
C
bílá
Akorát 20
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Barva
Adresa
Franta
10 000
100
Nakup
A
žlutá
Krátká 10
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy, O.KodBudovy, B.Barva, B.Barva, B.Adresa B.Adresa From DD From Oso Osoas asOOJoin Join Odd Odd Join Join Budova Budova BB
On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
On On B.KodBudovy B.KodBudovy==D. D.KodBudovy KodBudovy
Vnitřní spojení - Inner
Datové a procesní modely
Budova Jmeno
Plat
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
Prodej
B
B
modrá
Dlouhá 16
C
bílá
Akorát 20
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Barva
Adresa
Franta
10 000
100
Nakup
A
žlutá
Krátká 10
Pepa
20 000
200
Prodej
B
modrá
Dlouhá 16
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy, O.KodBudovy, B.Barva, B.Barva, B.Adresa B.Adresa From DD From Oso Osoas asOOJoin Join Odd Odd Join Join Budova Budova BB
On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
On On B.KodBudovy B.KodBudovy==D. D.KodBudovy KodBudovy
Vnitřní spojení - Inner
Datové a procesní modely
Oso
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy, O.KodBudovy, B.Barva, B.Barva, B.Adresa B.Adresa From DD From Oso Osoas asOOJoin Join Odd Odd Join Join Budova Budova BB
On On O.IdOdd O.IdOdd==D.IdOdd D.IdOdd
On On B.KodBudovy B.KodBudovy==D. D.KodBudovy KodBudovy Jmeno
Plat
IdOdd
Nazev
KodBudovy
Barva
Adresa
Franta
10 000
100
Nakup
A
žlutá
Krátká 10
Pepa
20 000
200
Prodej
B
modrá
Dlouhá 16
Vnitřní spojení - Inner
Datové a procesní modely
Oso
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.Adresa From Oso as O Join Odd
D
On O.IdOdd = D.IdOdd
Join Budova B On B.KodBudovy = D. KodBudovy
pokud On podmínka je "="
[rovnost]
a jména sloupců obou tabulek shodná
lze užít podmínku Using
Vnitřní spojení - Inner
Datové a procesní modely
Oso
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.Adresa From Oso as O Join Odd
D
Using (IdOdd)
Join Budova B Using (KodBudovy);
pokud On podmínka je "="
[rovnost]
a jména sloupců obou tabulek shodná
lze užít podmínku Using
Vnitřní spojení - Inner
Datové a procesní modely
Oso
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.Adresa From Oso as O Join Odd
D
Join Budova B
Using (IdOdd) Using (KodBudovy);
Vnitřní spojení - Inner
Datové a procesní modely
Dluh
Oso
Id
Dat
Castka
Jm
Pr
Jm
Pr
Mesto
Ulice
Cis
1
10.1.12
10 000
Pepa
Pudil
Jara
Juda
Az
Mala
10
2
20.2.12
5 000
Jara
Juda
Karel
Kren
Brno
Velka
20
3
30.3.12
40 000
Karel
Kren
Pepa
Pudil
Praha
Bila
30
Zdenek
Zvara
Praha
Modra
40
Id
Dat
Castka
Jm
Pr
Mesto
Ulice
Cis
Select SelectD.*, D.*, O.Mesto, O.Mesto,O.Ulice, O.Ulice,O.Cislo O.Cislo From From Dluh Dluh DD Join Join Oso Oso
OO
On On D.Jm D.Jm=O.Jm =O.Jm AND AND D.Pr D.Pr =O.Pr =O.Pr ;;
podmínka On může být složená
pokud podmínky jsou AND z rovností a shodná jména
lze užít podmínku Using(___,___,___)
Vnitřní spojení - Inner
Datové a procesní modely
Dluh
Oso
Id
Dat
Castka
Jm
Pr
Jm
Pr
Mesto
Ulice
Cis
1
10.1.12
10 000
Pepa
Pudil
Jara
Juda
Az
Mala
10
2
20.2.12
5 000
Jara
Juda
Karel
Kren
Brno
Velka
20
3
30.3.12
40 000
Karel
Kren
Pepa
Pudil
Praha
Bila
30
Zdenek
Zvara
Praha
Modra
40
Id
Dat
Castka
Jm
Pr
Mesto
Ulice
Cis
Select SelectD.*, D.*, O.Mesto, O.Mesto,O.Ulice, O.Ulice,O.Cislo O.Cislo From From Dluh Dluh DD Join Join Oso Oso
OO
Using Pr) Using(Jm, (Jm,Pr); Pr);
podmínka On může být složená
pokud podmínky jsou AND z rovností a shodná jména
lze užít podmínku Using(___,___,___)
Vnitřní spojení - Inner
Datové a procesní modely
Dluh
Oso
Id
Dat
Castka
Jm
Pr
Jm
Pr
Mesto
Ulice
Cis
1
10.1.12
10 000
Pepa
Pudil
Jara
Juda
Az
Mala
10
2
20.2.12
5 000
Jara
Juda
Karel
Kren
Brno
Velka
20
3
30.3.12
40 000
Karel
Kren
Pepa
Pudil
Praha
Bila
30
Zdenek
Zvara
Praha
Modra
40
Select D.*, O.Mesto, O.Ulice, O.Cisllo From Dluh D Join Oso
O
Using (Jm,Pr);
podmínka On může být složená
pokud podmínky jsou AND z rovností a shodná jména
lze užít podmínku Using(___,___,___)
Vnitřní spojení - Inner
Datové a procesní modely
Dluh
Oso
Id
Dat
Castka
Jm
Pr
Jm
Pr
Mesto
Ulice
Cis
1
10.1.12
10 000
Pepa
Pudil
Jara
Juda
Az
Mala
10
2
20.2.12
5 000
Jara
Juda
Karel
Kren
Brno
Velka
20
3
30.3.12
40 000
Karel
Kren
Pepa
Pudil
Praha
Bila
30
Zdenek
Zvara
Praha
Modra
40
Select SelectD.*, D.*, O.Mesto, O.Mesto,O.Ulice, O.Ulice,O.Cisllo O.Cisllo From From Dluh Dluh DD Join Join Oso Oso
OO
Using Using(Jm,Pr); (Jm,Pr);
podmínka On může být složená
pokud podmínky jsou AND z rovností a shodná jména
lze užít podmínku Using(___,___,___)
Vnitřní spojení - Inner Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
?
Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso Oso Join Join Odd Odd ON ON
Odd
Oso
Odd
11==1; 11;
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Franta
10 000
100
200
Prodej
B
Franta
10 000
100
300
Propagace
A
Pepa
20 000
200
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Pepa
20 000
200
300
Propagace
A
podmínka vždy splněna
výsledek == kartézský součin
Vnitřní spojení - Inner Oso PK
Jmeno
FK1
Plat IdOdd
Datové a procesní modely
PK
IdOdd
FK1
Nazev KodBudovy
?
Select Select Oso.* , Oso.* ,Odd.* Odd.*
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
300
Propagace
A
Jmeno
From From Oso Oso Join Join Odd Odd ON ON
Odd
Oso
Odd
11==00; ;
podmínka vždy nesplněna
výsledek == prázdná tabulka
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Vnitřní spojení - Inner PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
Honza 182
Nada
Jan
159
Kamil
169
Datové a procesní modely
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
180
Adam
180
Gaby
159
199
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
?
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From From PPan PPan P Join DDama D P Join DDama D On OnP.Vyska P.Vyska>>D.Vyska+10; D.Vyska+10;
Vnitřní spojení - Inner PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
Honza 182
Nada
Jan
159
Kamil
169
Datové a procesní modely
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
180
Adam
180
Gaby
159
199
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
?
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From From PPan PPan P Join DDama D P Join DDama D On OnP.Vyska P.Vyska>>D.Vyska+10; D.Vyska+10;
Vnitřní spojení - Inner PPan
Datové a procesní modely
DDama
Vyska Jm Vyska Pan VyskaP Jmjak do výsledku za č lenit i "nespojen é " ř á dky jak do výsledku začlenit i "nespojené" řádky Adam 180 Ema 170 Bobo
165
Gaby
159
Jana
164
Lucy žže e se nespojili Honza se 182 nespojili Nada
David ssindikac í indikací 177
?
Dama VyskaD
Pan
VyskaP Dama VyskaD
180
Adam
180
Gaby
159
199
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza 182 From From PPan PPan P Join DDama D P Join DDama D On P.Vyska >>D.Vyska+10; nebylo slu šný to ák na značit ??? Onby P.Vyska D.Vyska+10; nebylo by slušný to tam tamňňák naznačit ???
Jana
164
Franta 193 Jan
159
Kamil
169
vn ějším spojen ím vnějším spojením Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, Jan a Kamil sisiani nneškrtnou eškrtnou JanD.Vyska a Kamil ani VyskaD D.Vyska VyskaD
ale ědí se ale nedov nedovědí seto to
Spojování tabulek
Datové a procesní modely
ppřirozené řirozené
(NATURAL (NATURALJOIN) JOIN)
kkřížové řížové
(CROSS (CROSSJOIN) JOIN)
vnit řní vnitřní
(INNER (INNERJOIN) JOIN)
vn ější vnější
(OUTER (OUTERJOIN) JOIN)
ÊÊ ú plné vn ější úplné vnější
(FULL (FULLOUTER OUTERJOIN) JOIN)
ÊÊ ččástečné ástečné vn ější vnější
––„„z z leva “ leva“
(LEFT (LEFTJOIN) JOIN)
––„„z z prava “ prava“
(RIGHT (RIGHTJOIN) JOIN)
65
Vnitřní spojení - Inner PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Datové a procesní modely
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Join DDama D From PPan PPan P P Join DDama D On P.Vyska > D.Vyska+10; On P.Vyska > D.Vyska+10;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Vnější spojení - Outer PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Datové a procesní modely
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Left Join From PPan PPan P P Left Join DDama D DDama D On P.Vyska > D.Vyska+10; On P.Vyska > D.Vyska+10;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Jan
159
Kamil
169
Vnější spojení - Outer PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Datové a procesní modely
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Right Join From PPan PPan P P Right Join DDama D DDama D On P.Vyska > D.Vyska+10; On P.Vyska > D.Vyska+10;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Nada
199
Vnější spojení - Outer PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Datové a procesní modely
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Full Join From PPan PPan P P Full Join DDama D DDama D On P.Vyska > D.Vyska+10; On P.Vyska > D.Vyska+10;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Jan
159
Kamil
169 Nada
199
Vnější spojování tabulek - outer join
vnit řní spojen í vyřadí vnitřní spojení vyřadí zz výsledku výsledku řádky řádky ÊÊ pro pro které které se se vv druhé druhé tabulce tabulce ÊÊ nenalezne nenalezne žádná žádná spojovací spojovací shoda shoda
nespojen é řřádky ádky zzvýsledku nespojené výsledkuvypadnou vypadnou někdy někdy žádoucí žádoucí ponechat ponechat nespojené nespojené řádky řádky ve ve výsledku výsledku ÊÊ ss indikací indikací nespojení nespojení ss druhou druhou tabulkou tabulkou
nespojené nespojené řádky řádky se se spojí spojí se se simulovanou simulovanou NULL NULL řádkou řádkou druhé druhé tabulky tabulky to ější spojen í [[outer outer join] join to je je vn vnější spojení join]
Datové a procesní modely
Spojování tabulek
Datové a procesní modely
ppřirozené řirozené
(NATURAL (NATURALJOIN) JOIN)
kkřížové řížové
(CROSS (CROSSJOIN) JOIN)
vnit řní vnitřní
(INNER (INNERJOIN) JOIN)
vn ější vnější
(OUTER (OUTERJOIN) JOIN)
ÊÊ ú plné vn ější úplné vnější
(FULL (FULLOUTER OUTERJOIN) JOIN)
ÊÊ ččástečné ástečné vn ější vnější
––„„z z leva “ leva“
(LEFT (LEFTJOIN) JOIN)
––„„z z prava “ prava“
(RIGHT (RIGHTJOIN) JOIN)
71
Spojování tabulek
Datové a procesní modely
ppřirozené řirozené
(NATURAL (NATURALJOIN) JOIN)
kkřížové řížové
(CROSS (CROSSJOIN) JOIN)
vnit řní vnitřní
(INNER (INNERJOIN) JOIN)
vn ější vnější
(OUTER (OUTERJOIN) JOIN)
ÊÊ ú plné vn ější úplné vnější
(FULL (FULLOUTER OUTERJOIN) JOIN)
ÊÊ ččástečné ástečné vn ější vnější
––„„z z leva “ leva“
(LEFT (LEFTJOIN) JOIN)
––„„z z prava “ prava“
(RIGHT (RIGHTJOIN) JOIN)
72
Vnitřní spojení - Inner Oso
Datové a procesní modely
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy, O.KodBudovy, B.Barva, B.Barva, B.Adresa B.Adresa From From Oso Osoas asOONatural NaturalJoin Join Odd Odd Natural NaturalJoin Join Budova Budova
DD B; B;
žádné podmínky nezadány
sloupce tabulek stejně se jmenující
se porovnají na rovnost
Přirozené spojení
Datové a procesní modely
Oso
Odd
Budova
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
KodBudovy
Barva
Adresa
Franta
10 000
100
100
Nakup
A
A
žlutá
Krátká 10
Pepa
20 000
200
200
Prodej
B
B
modrá
Dlouhá 16
300
Propagace
A
C
bílá
Akorát 20
Select SelectO.Jmeno, O.Jmeno,O.Plat, O.Plat,O.IdOdd, O.IdOdd, D.Nazev, D.Nazev, O.KodBudovy, O.KodBudovy, B.Barva, B.Barva, B.Adresa B.Adresa From From Oso Osoas asOONatural NaturalJoin Join Odd Odd Natural NaturalJoin Join Budova Budova
DD B; B;
Jmeno
Plat
IdOdd
Nazev
KodBudovy
Barva
Adresa
Franta
10 000
100
Nakup
A
žlutá
Krátká 10
Pepa
20 000
200
Prodej
B
modrá
Dlouhá 16
Přirozené spojení PPan
Datové a procesní modely
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Natural Join From PPan PPan P P Natural Join DDama D; DDama D;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Přirozené spojení PPan
Datové a procesní modely
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Natural Join From PPan PPan P P Natural Join DDama D; DDama D;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Join DDama D; From PPan PPan P P Join DDama D; ON ON P.Jm P.Jm ==D.Jm D.Jm AND AND P.Vyska P.Vyska==D.Vyska; D.Vyska;
Přirozené spojení PPan
Datové a procesní modely
DDama
JmP
Vyska
JmD
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Natural Join From PPan PPan P P Natural Join DDama D; DDama D;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Lucy
180
Přirozené spojení PPan
Datové a procesní modely
DDama
JmP
Vyska
JmD
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
uužívání žívání Natur al Join Natural Join 159 Kamil 169 posuzovat jako trestný čin lze lze posuzovat jako trestný čin Jan
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Natural Join From PPan PPan P P Natural Join DDama D; DDama D;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Lucy
180
Přirozené spojování tabulek - natural join
Datové a procesní modely
natural natural join join
použití použití vv aplikaci aplikaci je je závažným závažným trestním trestním činem činem
techniku techniku přirozeného přirozeného spojení spojení ihned ihned po po přednášce přednášce zapomeneme zapomeneme
kdo kdo uu zkoušky zkoušky bude bude vědět vědět
co co to to je je natural natural join join dopouští dopouští se se přestupku přestupku držení držení nebezpečné nebezpečné zbraně zbraně aa nemůže čně !!! nemůže být být klasifikován klasifikován dostate dostatečně !!!
Spojování tabulek
Datové a procesní modely
ppřirozené řirozené
(NATURAL (NATURALJOIN) JOIN)
kkřížové řížové
(CROSS (CROSSJOIN) JOIN)
vnit řní vnitřní
(INNER (INNERJOIN) JOIN)
vn ější vnější
(OUTER (OUTERJOIN) JOIN)
ÊÊ ú plné vn ější úplné vnější
(FULL (FULLOUTER OUTERJOIN) JOIN)
ÊÊ ččástečné ástečné vn ější vnější
––„„z z leva “ leva“
(LEFT (LEFTJOIN) JOIN)
––„„z z prava “ prava“
(RIGHT (RIGHTJOIN) JOIN)
výlu čné spojen í výlučné spojení
(neexistuje (neexistujeklauzule klauzule--exclusion) exclusion) 80
Výlučné spojení - exclusion
zjištění něčeho co není
co nemá nějakou vlastnost
co nemá nějakou vazbu
Datové a procesní modely
PPan
DDama Jm
Vyska
Jm
Vyska
Ema
170
Adam
180
Gaby
159
Bobo
165
Jana
164
David
177
Lucy
180
Franta 193
Nada
199
Honza 182
zjištění pánů [dam]
kteří / které si dle daných pravidel nezatancují
užije se vnější spojení [pravé, levé, úplné]
Jan
159
Kamil
169
Vnější spojení - Outer PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Datové a procesní modely
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Left Join From PPan PPan P P Left Join DDama D DDama D On P.Vyska > D.Vyska+10; On P.Vyska > D.Vyska+10;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Jan
159
Kamil
169
Vnější spojení - Outer PPan
DDama
Jm
Vyska
Jm
Vyska
Adam
180
Ema
170
Bobo
165
Gaby
159
David
177
Jana
164
Franta 193
Lucy
180
Honza 182
Nada
199
Jan
159
Kamil
169
Datové a procesní modely
Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Left Join From PPan PPan P P Left Join DDama D DDama D On P.Vyska > D.Vyska+10; On P.Vyska > D.Vyska+10;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Jan
159
NULL
NULL
Kamil
169
NULL
NULL
Vnější spojení - Outer PPan
Datové a procesní modely
DDama
Jm
Vyska
Adam
180
Bobo
165
David
177
Franta
Jm
Vyska
Ema
170
Gaby
159
193
Jana
164
Honza
182
Lucy
180
Jan
159
Nada
199
Kamil
169
Select SelectPan, Pan,VyskaP VyskaP From From (( Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Left Join From PPan PPan P P Left Join DDama D DDama D On P.Vyska > D.Vyska+10 On P.Vyska > D.Vyska+10 ) as TT ) as TT Where Dama IS NULL Where Dama ISNULL; NULL;
Pan
VyskaP Dama VyskaD
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
Adam
180
Jana
164
David
177
Gaby
159
David
177
Jana
164
Franta
193
Ema
170
Franta
193
Gaby
159
Franta
193
Jana
164
Franta
193
Lucy
180
Honza
182
Ema
170
Honza
182
Gaby
159
Honza
182
Jana
164
Jan
159
NULL
NULL
Kamil
169
NULL
NULL
Vnější spojení - Outer PPan
Datové a procesní modely
DDama
Jm
Vyska
Adam
180
Bobo
165
David
177
Franta
Jm
Vyska
Ema
170
Gaby
159
193
Jana
164
Honza
182
Lucy
180
Jan
159
Nada
199
Kamil
169
Select SelectPan, Pan,VyskaP VyskaP From From (( Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Left Join From PPan PPan P P Left Join DDama D DDama D On P.Vyska > D.Vyska+10 On P.Vyska > D.Vyska+10 ) as TT ) as TT Where Dama IS NULL Where Dama ISNULL; NULL;
Pan
VyskaP Dama VyskaD
Pan
VyskaP
Jan
159
Kamil
169
Vnější spojení - Outer PPan
Datové a procesní modely
DDama
Jm
Vyska
Adam
180
Bobo
165
David
177
Franta
Jm
Vyska
Ema
170
Gaby
159
193
Jana
164
Honza
182
Lucy
180
Jan
159
Nada
199
Kamil
169
Select SelectDama, Dama,VyskaD VyskaD From From (( Select P.Jm Pan, Select P.Jm Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm Dama, D.Jm Dama, D.Vyska D.Vyska VyskaD VyskaD From Right Join From PPan PPan P P Right Join DDama D DDama D On P.Vyska > D.Vyska+10 On P.Vyska > D.Vyska+10 ) as TT ) as TT Where Pan IS NULL Where Pan ISNULL; NULL;
Pan
VyskaP Dama VyskaD
Adam
180
Gaby
159
....
....
....
....
Honza
182
Jana
164
Null
Null
Nada
199
Dama
VyskaD
Nada
199
Datové a procesní modely
aa co co normy normy
Spojování tabulek a Ansi normy ––
SQL SQL 89 89 // SQL1 SQL1
Datové a procesní modely
implicitní implicitní
spojení spojení pomocí pomocí WHERE WHERE SELECT SELECT FROM FROM
....... ....... Tab1, Tab1,Tab2 Tab2
WHERE WHERE Tab1. Tab1.SloupA SloupA ==Tab2.SloupB Tab2.SloupB
SQL SQL 92 92 // SQL2 SQL2
explicitní explicitní operátor operátor JOIN JOIN vv klauzuli klauzuli FROM FROM SELECT SELECT FROM FROM
SQL SQL 2003 2003
....... ....... Tab1 Tab1Join JoinTab2 Tab2 [[
On On Tab1. Tab1.SloupA SloupA ==Tab2.SloupB Tab2.SloupB On en .... On ......>> << != != In In Betww Betwwen .... ] ]
[[
Using Using(IdXxxx) (IdXxxx)
]]
explicitní explicitní JOIN JOIN implicitní implicitní JOIN JOIN 88
Spojování tabulek Select Select Oso.* , Oso.* ,Odd.* Odd.* From From Oso, Oso, Odd Odd Where Where Oso.IdOdd Oso.IdOdd==Odd.IdOdd Odd.IdOdd
Datové a procesní modely kartézský součin tabulek Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Franta
10 000
100
200
Prodej
B
Franta
10 000
100
300
Propagace
A
Pepa
20 000
200
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Pepa
20 000
200
300
Propagace
A
Po WHERE Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
m ě se ák metodicky íbí pane čiteli mě seto toňňák metodickynel nelíbí panemetodický metodický uučiteli do doklauzule klauzuleWHERE WHERE jsme ávali podm ínky výb ěru jsmeddávali podmínky výběru vylu čovací vylučovací to ění ffér ér tonnění ddát át tam ínky spojovac í tam[[ii]]podm podmínky spojovací
klauzule klauzuleJOIN JOIN
JOIN - klauzule spojování
Datové a procesní modely
spojování spojováníse sezadává zadáváklauzulí klauzulíFROM FROM
Select Select
Oso.* , Oso.* ,Odd.* Odd.*
From From
Oso Oso
JOIN JOINOdd Odd
ON ON Oso. Oso.IdOdd IdOdd==Odd.IdOdd Odd.IdOdd
Where .IdOdd ==Odd .IdOdd Where Oso Oso.IdOdd Odd.IdOdd Odd
Oso Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Adam
30 000
200
300
Propagace
A
Karel
20 000
300
Fany
30 000
200
Select Select
Oso.* , Oso.* ,Odd.* Odd.*
From From
Oso Oso JOIN JOIN Odd Odd
Jmeno
Plat
IdOdd
IdOdd
Nazev
KodBudovy
Franta
10 000
100
100
Nakup
A
Pepa
20 000
200
200
Prodej
B
Adam
30 000
200
200
Prodej
B
Karel
20 000
300
300
Propagace
A
Fany
30 000
200
200
Prodej
B
USING USING(IdOdd) (IdOdd)
JOIN - klauzule spojování
Select Select
....... .......
From From
Tab1 Tab1 JOIN JOIN Tab2 Tab2
klauzule klauzuleJOIN JOIN
Datové a procesní modely
podm ínky spojov ání podmínky spojování Where Where
podm ínky filtrov ání [[výběru výběru //vylu čování] podmínky filtrování vylučování]
Datové a procesní modely
aa zas ěco caseovní ího caseovn zas nněco caseovního
Algoritmizace dotazu
Datové a procesní modely
Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
výši výši úvěru úvěru označte označte jeho jeho třídou třídou
dle dle rozpětí rozpětí
řešte řešte
Firma
MaxUver
700 000
B
20 000
D
1000 000
A
Alfa Beta sro BMV
Trida
Definice třídy úvěru Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
> 100 000
100 001
500 000
C
<= 100 000
1
100 000
D
ppane ane uučiteli, čiteli, to , dy ť to tonejde nejde, dyť tojejealgoritmus algoritmus to ákejma IF -ama tose sebude budemuset musetnaprogramovat naprogramovatňňákejma IF-ama vvňňákym ákym programovacim programovacimjazyku jazyku sakra, řina !!!! sakra,to tobude budeale aleddřina !!!! do ánoc jejeco ělat dovvánoc coddělat
93
Algoritmizace dotazu
Datové a procesní modely
Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
výši výši úvěru úvěru označte označte jeho jeho třídou třídou
dle dle rozpětí rozpětí
řešte řešte
Firma
MaxUver
Alfa
700 000
B
20 000
D
1000 000
A
Beta sro BMV
Trida
Definice třídy úvěru Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
> 100 000
100 001
500 000
C
<= 100 000
1
100 000
D
um íte vy brat řřádky ádky sstřtřídou ídou AA??----vyrobte umíte vybrat vyrobtejeje!!! !!!
Select Firma, MaxUver, 'A' Trida From Zakaznici Where MaxUver > 900000;
Firma
BMV
MaxUver
1000 000
Trida A
94
Algoritmizace dotazu
Datové a procesní modely
Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
výši výši úvěru úvěru označte označte jeho jeho třídou třídou
dle dle rozpětí rozpětí
řešte řešte
Firma
MaxUver
Alfa
700 000
B
20 000
D
1000 000
A
Beta sro BMV
Trida
Definice třídy úvěru Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
> 100 000
100 001
500 000
C
<= 100 000
1
100 000
D
um íte vy brat řřádky ádky sstřtřídou ídou BB??----vyrobte umíte vybrat vyrobtejeje!!! !!!
Select Firma, MaxUver, 'B' Trida From Zakaznici Where MaxUver > 500000 And MaxUver <= 900000;
Firma
Alfa
MaxUver
700 000
Trida B
95
Algoritmizace dotazu
Datové a procesní modely
Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
výši výši úvěru úvěru označte označte jeho jeho třídou třídou
dle dle rozpětí rozpětí
řešte řešte
Firma
MaxUver
Alfa
700 000
B
20 000
D
1000 000
A
Beta sro BMV
Trida
Definice třídy úvěru Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
> 100 000
100 001
500 000
C
<= 100 000
1
100 000
D
um íte vy brat řřádky ádky sstřtřídou ídou DD??----vyrobte umíte vybrat vyrobtejeje!!! !!!
Select Firma, MaxUver, 'D' Trida From Zakaznici Where MaxUver <= 100000;
Firma
Beta sro
MaxUver
20 000
Trida D
96
Algoritmizace dotazu
Datové a procesní modely
Definice třídy úvěru Firma
Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
Beta sro
> 100 000
100 001
500 000
C
BMV
<= 100 000
1
100 000
D
Alfa
Select Firma, MaxUver, 'A' Trida From Zakaznici Where MaxUver > 900000; 900000
Firma
Select From Where And
Firma, MaxUver, 'B' Trida Zakaznici MaxUver > 500000 MaxUver <= 900000; 900000
Firma
Select From Where And
Firma, MaxUver, 'C' Trida Zakaznici MaxUver > 100000 MaxUver <= 500000; 500000
Select Firma, MaxUver, 'D' Trida From Zakaznici Where MaxUver <= 100000; 100000
BMV
Alfa
MaxUver
Trida
700 000
B
20 000
D
1000 000
A
MaxUver
Trida A
1000 000
MaxUver
Trida B
700 000
Firma
MaxUver
Trida
Firma
MaxUver
Trida
Beta sro
20 000
D
97
Algoritmizace dotazu
Datové a procesní modely
Definice třídy úvěru Firma
Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
Beta sro
> 100 000
100 001
500 000
C
BMV
<= 100 000
1
100 000
D
Select From Where Select From Where And Select From Where And Select From Where
Firma, MaxUver, 'A' Trida Zakaznici MaxUver > 900000 UNION Firma, MaxUver, 'B' Trida Zakaznici MaxUver > 500000 MaxUver <= 900000 UNION Firma, MaxUver, 'C' Trida Zakaznici MaxUver > 100000 MaxUver <= 500000 UNION Firma, MaxUver, 'D' Trida Zakaznici MaxUver <= 100000; 100000
Alfa
Firma
Alfa Beta sro BMV
MaxUver
Trida
700 000
B
20 000
D
1000 000
A
MaxUver
Trida
700 000
B
20 000
D
1000 000
A
98
Datové a procesní modely
a rad ši radši zzpět pět kk problé ému probl problému
Algoritmizace dotazu
Datové a procesní modely
Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
výši výši úvěru úvěru označte označte jeho jeho třídou třídou
dle dle rozpětí rozpětí
řešte řešte
Firma
MaxUver
Alfa
700 000
B
20 000
D
1000 000
A
Beta sro BMV
Trida
Definice třídy úvěru Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
> 100 000
100 001
500 000
C
<= 100 000
1
100 000
D
SQL ální jazyk SQL--neprocedur neprocedurální jazyk nelze ěkolika povely ářet algoritmus nelzenněkolika povelyvytv vytvářet algoritmus
povely ě [procesn ě] nez ávislé povelyjsou jsouna nasob sobě [procesně] nezávislé SQL á vvšak šak vvsob ě bohatou SQLm má sobě bohatoualgoritmickou algoritmickoufunkcionalitu funkcionalitu
SQL žňuje zadat ř jednoho SQLumo umožňuje zadatalgoritmizaci algoritmizacidovnit dovnitř jednohopovelu povelu
100
Algoritmizace dotazu
Datové a procesní modely
Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
výši výši úvěru úvěru označte označte jeho jeho třídou třídou
dle IFIF rozpětí Uver dle rozpětí Uver>900 >900000 000Then Then..................
ELSE ELSEIFIFUver Uver>500 >500000 000Then Then.................. ELSE ELSEIFIFUver Uver>100 >100000 000Then Then.................. ELSE .... ELSE ........ .......; ...; Do DoWhile While.... .... ...... ...... End EndWhile; While; IFIF...... řešte END IF řešte END IF
Firma
MaxUver
Alfa
700 000
B
20 000
D
1000 000
A
Beta sro BMV
Trida
Definice třídy úvěru Výše
Od
Do
Třída
> 900 000
900 001
∞
A
> 500 000
500 001
900 000
B
> 100 000
100 001
500 000
C
<= 100 000
1
100 000
D
SQL ální jazyk SQL--neprocedur neprocedurální jazyk nelze ěkolika povely ářet algoritmus nelzenněkolika povelyvytv vytvářet algoritmus
SQL povel .. ;
povely ě [procesn ě] nez ávislé povelyjsou jsouna nasob sobě [procesně] nezávislé SQL á vvšak šak vvsob ě bohatou SQLm má sobě bohatoualgoritmickou algoritmickoufunkcionalitu funkcionalitu
SQL žňuje zadat ř jednoho SQLumo umožňuje zadatalgoritmizaci algoritmizacidovnit dovnitř jednohopovelu povelu
101
Podmíněný operátor Case
Datové a procesní modely
operátor operátorCASE CASE [neboli [nebolipodmíněný podmíněnývýraz] výraz]umožňuje umožňuje
provádět provádětjednoduchá jednoduchározhodnutí rozhodnutí ÊÊ
na naúrovni úrovniVÝRAZU VÝRAZU
struktura strukturaoperátoru operátorujejepodobná podobnákonstrukci konstrukci
IF IF
THEN THEN
ELSE ELSE
102
Podmíněný operátor Case CASE CASE
WHEN WHEN (a>b) (a>b) WHEN WHEN (a>c) (a>c)
Datové a procesní modely
THEN THEN... ... THEN THEN... ...
WHEN WHEN (a+b>c) (a+b>c) THEN THEN... ... ELSE ELSE END END
varianta varianta11
CASE CASE aaa WHEN WHEN (2) (2) WHEN WHEN (3) (3) WHEN WHEN (88) (88) ELSE ELSE END END
THEN THEN... ... THEN THEN... ...
CASE a=2 2) THEN CASEWHEN WHEN (a= (a=2) THEN......
THEN THEN... ...
WHEN a=88 88) THEN WHEN (a= (a=88) THEN....
WHEN a=3 3) THEN WHEN (a= (a=3) THEN......
ELSE ELSE
varianta varianta22
END END
varianta varianta11
103
Podmíněný operátor Case
Datové a procesní modely
CASE Length(Jmeno) ++Length(Prijmeni) 10 CASEWHEN WHEN ((Length(Jmeno) Length(Prijmeni)==10) 10) THEN THEN... ... WHEN Length(Jmeno) ++Length(Prijmeni) 11 WHEN ((Length(Jmeno) Length(Prijmeni)==11) 11) THEN THEN... ... WHEN Length(Jmeno) ++Length(Prijmeni) 12 WHEN ((Length(Jmeno) Length(Prijmeni)==12) 12) THEN THEN... ... ELSE ELSE
varianta varianta11
END END
CASE (Jmeno) ++Length(Prijmeni) 10) 10 THEN CASE Length Length(Jmeno) Length(Prijmeni) WHEN WHEN ((10) THEN... ... WHEN 11) 11 THEN WHEN ((11) THEN... ... WHEN 12) 12 THEN WHEN ((12) THEN... ... ELSE ELSE END END
varianta varianta22
104
Podmíněný operátor Case - varianta 1 CASE
WHEN
podmínka
THEN
Datové a procesní modely
výsledný výraz NULL
WHEN
podmínka
THEN
výsledný výraz NULL
WHEN
podmínka
THEN
výsledný výraz NULL
ELSE
výsledný výraz NULL
END 105
Podmíněný operátor Case - varianta 2 CASE
výraz
WHEN
výrazHodnoty
THEN
Datové a procesní modely
výsledný výraz NULL
WHEN
výrazHodnoty
THEN
výsledný výraz NULL
WHEN
výrazHodnoty
THEN
výsledný výraz NULL
ELSE
výsledný výraz NULL
END 106
Podmíněný operátor Case CASE
WHEN
Datové a procesní modely
podmínka
THEN
výsledný výraz NULL
podmínka
WHEN
THEN
výsledný výraz NULL
WHEN
podmínka
THEN
výsledný výraz NULL
ELSE
výsledný výraz
END
CASE
NULL
výraz
WHEN
výrazHodnoty
THEN
varianta 1 varianta 1
výsledný výraz NULL
WHEN
výrazHodnoty
THEN
výsledný výraz NULL
WHEN
výrazHodnoty
THEN
výsledný výraz NULL
ELSE
výsledný výraz
END NULL varianta 2 varianta 2
Podmíněný operátor Case
CASE CASEje jeoperátor operátor
vrací vracískalární skalárníhodnotu hodnotu
komplikovaný komplikovanýalgoritmus algoritmus ÊÊ
Datové a procesní modely
vracející vracejícíhodnotu hodnotu
108
Podmíněný operátor Case
Datové a procesní modely
Zakaznici Firma
Firma
MaxUver
Alfa
Alfa
700 000
Beta sro BMV
Beta sro
20 000 1000 000
řešte řešte
BMV
MaxUver
Trida
700 000
B
20 000
D
1000 000
A
SELECT Firma, MaxUver , a jako 3. sloupec si "vyrobíme" buď 'A' nebo 'B' nebo cokoliv jiného podmíněných operátorem CASE dle hodnoty ve sloupci MaxUver
FROM Zakaznici
109
Podmíněný operátor Case
Datové a procesní modely
Zakaznici Firma
Firma
MaxUver
Alfa
Alfa
700 000
Beta sro BMV
Beta sro
20 000 1000 000
MaxUver
řešte řešte
BMV
Trida
700 000
B
20 000
D
1000 000
A
SELECT Firma, MaxUver , CASE WHEN (MaxUver>900000)
THEN 'A'
WHEN (MaxUver>500000)
THEN 'B'
WHEN (MaxUver>100000)
THEN 'C'
ELSE
'D'
END FROM Zakaznici
110
Podmíněný operátor Case
Datové a procesní modely
Zakaznici Firma
MaxUver
700 000
Alfa Beta sro BMV
20 000
1000 000
pane čiteli pane uučiteli to áteřeštedob ře to nem nemáte dobře
řešte
Firma
MaxUver
Alfa Beta sro BMV
Trida
700 000
B
20 000
D
1000 000
A
SELECT Firma, MaxUver , CASE WHEN (MaxUver>900000)
THEN 'A'
WHEN (MaxUver>500000)
THEN 'B'
WHEN (MaxUver>100000)
THEN 'C'
ELSE
'D'
END FROM Zakaznici
aa cotak ůžu dob ře cotak m můžu dobře
nem ít copak nemít copak ??? ??? 111
Podmíněný operátor Case Zakaznici Firma
MaxUver
Alfa
700 000
Beta sro BMV
20 000 1000 000
pane čiteli pane uučiteli to áte dob ře to nem nemáte dobře řešte proto že řešte protože
Datové a procesní modely
Firma
MaxUver
Alfa Beta sro BMV
Trida
700 000
B
20 000
D
1000 000
A
SELECT Firma, MaxUver , CASE WHEN (MaxUver>900000)
THEN 'A'
WHEN (MaxUver>500000)
THEN 'B'
WHEN (MaxUver>100000)
THEN 'C'
ELSE
'D'
END FROM Zakaznici
112
Podmíněný operátor Case
Datové a procesní modely
Zakaznici Firma
Firma
MaxUver
Alfa
Alfa
700 000
Beta sro BMV
Beta sro
20 000 1000 000
MaxUver
řešte řešte
BMV
Trida
700 000
B
20 000
D
1000 000
A
SELECT Firma, MaxUver , CASE WHEN (MaxUver>900000)
THEN 'A'
WHEN (MaxUver>500000)
THEN 'B'
WHEN (MaxUver>100000)
THEN 'C'
ELSE END
'D'
as Trida
FROM Zakaznici
Firma
Alfa Beta sro BMV
MaxUver
Trida
700 000
B
20 000
D
1000 000
A
113
Podmíněný operátor Case
Datové a procesní modely
ToAuto aId
aId
iBarva
Nazev
iBarva
1
1
1
1
zelena
2
2
2
2
modra
3
3
3
3
bila
4
1
4
1
zelena
5
10
5
10
====
SELECT
řešte řešte
aid,iBarva, CASE (iBarva) WHEN (1) THEN 'zelena' WHEN WHEN (2) (2) THEN THEN 'modra' 'modra' WHEN WHEN (3) (3) THEN THEN 'bila' 'bila'
FROM
ELSE END CASE ToAuto
'==='
114
Podmíněný operátor Case
Datové a procesní modely
ToAuto aId
aId
iBarva
1
1
2
2
3
3
4
1
5
10
SELECT
pane čiteli pane uučiteli m áte tam máte tam 22 chyby chyby
řešte řešte
Nazev
iBarva
1
1
zelena
2
2
modra
3
3
bila
4
1
zelena
5
10
====
no proto no proto aid,iBarva,
aid,iBarva, CASE (iBarva) WHEN (1) THEN 'zelena' WHEN WHEN (2) (2) THEN THEN 'modra' 'modra' WHEN WHEN (3) (3) THEN THEN 'bila' 'bila'
FROM
ELSE END CASE ToAuto
'===' AS Nazev error error
115
Podmíněný operátor Case ToAuto aId
iBarva
1
1
2
2
3
3
4
1
5
10
není neníoperátor operátorCASE CASE ani anižádný žádnýpodobný podobný vyřešte vyřešteúkol úkol bez bezpoužití použitíCASE CASE
SELECT SELECTvyrobí vyrobítotéž totéž
Datové a procesní modely
aId
Nazev
iBarva
1
1
zelena
2
2
modra
3
3
bila
4
1
zelena
5
10
====
řešte řešte
SELECT aid,iBarva, 'zelena' From ToAuto Where iBarva=1
aId 1
SELECT aid,iBarva, 'modra' From To ToAuto Where iBarva=2
aId
From To ToAuto Where iBarva=3
aId
SELECT aid,iBarva, 'bila'
Nazev
iBarva 1
Nazev
iBarva
2
2
modra
Nazev
iBarva
3
zelena
3
bila
SELECT aid,iBarva, '===' From To ToAuto Auto Where Where iBarva iBarva not in (1,2,3) (1,2,3) aId 5
iBarva 10
Nazev ====
116
Podmíněný operátor Case ToAuto aId
iBarva
1
1
2
2
3
3
4
1
5
10
není neníoperátor operátorCASE CASE ani anižádný žádnýpodobný podobný vyřešte vyřešteúkol úkol bez bezpoužití použitíCASE CASE
SELECT SELECTvyrobí vyrobítotéž totéž
Datové a procesní modely
aId
Nazev
iBarva
1
1
zelena
2
2
modra
3
3
bila
4
1
zelena
5
10
====
řešte řešte
aId
SELECT 1 SELECT aid,iBarva, aid,iBarva, 'zelena' 'zelena' From From ToAuto ToAuto Where Where iBarva=1 iBarva=1 UNION UNION aId SELECT SELECT aid,iBarva, aid,iBarva, 'modra' 'modra' From From ToAuto ToAuto Where Where iBarva=2 iBarva=2 2 UNION UNION aId SELECT SELECT aid,iBarva, aid,iBarva, 'bila' 'bila' From From ToAuto ToAuto Where Where iBarva=3 iBarva=3 3 UNION UNION SELECT SELECT aid,iBarva, aid,iBarva, '===' '===' From From ToAuto ToAuto Where Where iBarva iBarva not not in in (1,2,3) (1,2,3) ORDER aid ORDER BY BY aid; aid; aId 5
Nazev
iBarva 1
zelena
Nazev
iBarva 2
modra
Nazev
iBarva 3
iBarva 10
bila
Nazev ====
117
Podmíněný operátor Case ToAuto aId
iBarva
1
1
2
2
3
3
4
1
5
10
není neníoperátor operátorCASE CASE ani anižádný žádnýpodobný podobný vyřešte vyřešteúkol úkol bez bezpoužití použitíCASE CASE
SELECT SELECTvyrobí vyrobítotéž totéž
Datové a procesní modely
aId
Nazev
iBarva
1
1
zelena
2
2
modra
3
3
bila
4
1
zelena
5
10
====
řešte řešte
SELECT SELECT aid,iBarva, aid,iBarva, 'zelena' 'zelena' From From ToAuto ToAuto Where Where iBarva=1 iBarva=1 aId UNION 1 UNION 2 SELECT SELECT aid,iBarva, aid,iBarva, 'modra' 'modra' From From ToAuto ToAuto Where Where iBarva=2 iBarva=2 3 UNION UNION 4 5 SELECT SELECT aid,iBarva, aid,iBarva, 'bila' 'bila' From From ToAuto ToAuto Where Where iBarva=3 iBarva=3 UNION UNION SELECT SELECT aid,iBarva, aid,iBarva, '===' '===' From From ToAuto ToAuto Where Where iBarva iBarva not not in in (1,2,3) (1,2,3) ORDER aid ORDER BY BY aid; aid;
Nazev
iBarva 1
zelena
2
modra
3
bila
1
zelena
10
====
118
Datové a procesní modely
aa zas ěco jiné ého jin zas nněco jiného
Coalesce - varianta Case
Datové a procesní modely
Prodejci Jmeno
PlanProdeje
Prodej
Hanka
2000
3500
Hanka
2000
Pavel
NULL
1500
Pavel
1500
Marie
NULL
NULL
Marie
0
Jmeno
SELECT SELECT From From Where Where
Jmeno, Jmeno,PlanProdeje PlanProdeje Prodejci Prodejci PlanProdeje PlanProdejeIs IsNot NotNull Null
SELECT SELECT From From Where Where
Jmeno, Jmeno,Prodej Prodej Prodejci Prodejci PlanProdeje PlanProdejeIs Is
And And SELECT SELECT From From Where Where And And
Prodej Prodej
Null Null Is IsNot NotNull Null
Jmeno, Jmeno, 00 Prodejci Prodejci PlanProdeje PlanProdejeIs IsNull Null Prodej Is Prodej IsNull Null
řešte řešte
as asCosi Cosi Jmeno Hanka
2000
Jmeno Pavel
1500
Jmeno Marie
0
120
Coalesce - varianta Case
Datové a procesní modely
Prodejci Jmeno
PlanProdeje
Hanka
2000
3500
Hanka
2000
Pavel
NULL
1500
Pavel
1500
Marie
NULL
NULL
Marie
0
SELECT SELECT From From Where Where UNION UNION SELECT SELECT From From Where Where
Jmeno
Jmeno, Jmeno,PlanProdeje PlanProdeje Prodejci Prodejci PlanProdeje PlanProdejeIs IsNot NotNull Null Jmeno, Jmeno,Prodej Prodej Prodejci Prodejci PlanProdeje PlanProdejeIs Is
And Prodej And Prodej UNION UNION SELECT SELECT From From Where Where And And
Prodej
Null Null Is IsNot NotNull Null
Jmeno, Jmeno, 00 Prodejci Prodejci PlanProdeje PlanProdejeIs IsNull Null Prodej Is Prodej IsNull Null
řešte řešte
as asCosi Cosi
Jmeno Hanka
2000
Pavel
1500
Marie
0
121
Coalesce - varianta Case
Datové a procesní modely
Prodejci Jmeno
PlanProdeje
Prodej
Hanka
2000
3500
Hanka
2000
Pavel
NULL
1500
Pavel
1500
Marie
NULL
NULL
Marie
0
Jmeno
řešte řešte
SELECT SELECT Jmeno, Jmeno, CASE CASE WHEN WHENPlanProdeje PlanProdeje IS ISNOT NOTNULL NULL WHEN IS WHENProdej Prodej ISNOT NOTNULL NULL ELSE ELSE END END AS ASCosi Cosi
THEN THEN THEN THEN
PlanProdeje PlanProdeje Prodej Prodej 00
FROM FROM PRODEJCI; PRODEJCI;
máme mámeseznam seznamzdrojových zdrojovýchhodnot hodnot
[PlanProdeje, [PlanProdeje, Prodej, Prodej,0]0]
ze zeseznamu seznamuchceme chcemezobrazit zobrazit první prvníznámou známou[NOT [NOTNULL] NULL]hodnotu hodnotu 122
Coalesce - varianta Case
Datové a procesní modely
Prodejci Jmeno
PlanProdeje
Prodej
Hanka
2000
3500
Hanka
2000
Pavel
NULL
1500
Pavel
1500
Marie
NULL
NULL
Marie
0
SELECT SELECT Jmeno, Jmeno, CASE CASE WHEN WHENPlanProdeje PlanProdeje IS ISNOT NOTNULL NULL WHEN IS WHENProdej Prodej ISNOT NOTNULL NULL ELSE ELSE END END AS ASCosi Cosi
Jmeno
THEN THEN THEN THEN
PlanProdeje PlanProdeje Prodej Prodej 00
FROM FROM PRODEJCI; PRODEJCI;
toto totoCASE CASElze lzezapsat zapsat ÊÊ
jednoduseji jednoduseji
ÊÊ
COALESCE COALESCE
pomocí pomocíspeciální speciálnívarianty variantyoperátoru operátoruCASE CASE
123
Coalesce - varianta Case
Datové a procesní modely
Prodejci Jmeno
PlanProdeje
Prodej
Hanka
2000
3500
Hanka
2000
Pavel
NULL
1500
Pavel
1500
Marie
NULL
NULL
Marie
0
SELECT SELECT Jmeno, Jmeno, CASE CASE WHEN WHENPlanProdeje PlanProdeje IS ISNOT NOTNULL NULL WHEN IS WHENProdej Prodej ISNOT NOTNULL NULL ELSE ELSE END END AS ASCosi Cosi
Jmeno
THEN THEN THEN THEN
PlanProdeje PlanProdeje Prodej Prodej 00
FROM FROM PRODEJCI; PRODEJCI; SELECT SELECT FROM FROM
Jmeno, Jmeno, COALESCE COALESCE(PlanProdeje, (PlanProdeje,Prodej Prodej,0) ,0) PRODEJCI; PRODEJCI;
obkreslete obkreslete
COALESCE COALESCE (výraz1, (výraz1,výraz2, výraz2,výraz3, výraz3,...) ...) 124
Coalesce - varianta Case
Datové a procesní modely
COALESCE COALESCE(výraz1, (výraz1,výraz2, výraz2,výraz3, výraz3,...) ...)
vv pořadí pořadí výraz1, výraz1, výraz2, výraz2, ... ... se se vybere vybere první první NOT NOT NULL NULL výraz výraz konstrukce-operátor konstrukce-operátor pro pro odstranění odstranění nežádoucích nežádoucích NULL NULL
SELECT SELECTCOALESCE(NULL,1) COALESCE(NULL,1)FROM FROMDUAL DUAL
1
SELECT SELECTCOALESCE(NULL,55,NULL,33) COALESCE(NULL,55,NULL,33) FROM FROMDUAL DUAL
55
SELECT SELECTCOALESCE(NULL, COALESCE(NULL,NULL, NULL,NULL) NULL) FROM FROMDUAL DUAL
Null 125
Coalesce - varianta Case
Datové a procesní modely
COALESCE COALESCE(výraz1, (výraz1,výraz2, výraz2,výraz3, výraz3,...) ...)
vv pořadí pořadí výraz1, výraz1, výraz2, výraz2, ... ... se se vybere vybere první první NOT NOT NULL NULL výraz výraz kostrukce-operátor kostrukce-operátor pro pro odstranění odstranění nežádoucích nežádoucích NULL NULL
coalesce coalesce ÊÊ splynout, splynout,spojit spojit coalescence coalescence ÊÊ koalice koalice
SELECT SELECTCOALESCE(NULL,1) COALESCE(NULL,1)FROM FROMDUAL DUAL
1
SELECT SELECTCOALESCE(NULL,55,NULL,33) COALESCE(NULL,55,NULL,33) FROM FROMDUAL DUAL
55
SELECT SELECTCOALESCE(NULL, COALESCE(NULL,NULL, NULL,NULL) NULL) FROM FROMDUAL DUAL
Null 126
Podmíněný operátor Case
Datové a procesní modely
Sarada S1
S2
S3
S4
S5
1
null
null
null
null
1
null
2
null
null
null
2
null
null
3
null
null
3
null
null
null
4
null
null
null
null
null
5
4 5
v každém řádku vypište první nenulový sloupec
řešte řešte
SELECT SELECTCOALESCE COALESCE (S1, (S1,S2, S2,S3, S3,S4, S4,S5) S5) From FromSarada; Sarada;
úlohu řešte pomocí CASE
řešte řešte
127
Podmíněný operátor Case
Datové a procesní modely
Sarada S1
S2
S3
S4
S5
1
null
null
null
null
1
null
2
null
null
null
2
null
null
3
null
null
3
null
null
null
4
null
null
null
null
null
5
4 5
SELECT SELECTCOALESCE COALESCE (S1, (S1,S2, S2,S3, S3,S4, S4,S5) S5) From FromSarada; Sarada; SELECT SELECTCASE CASE WHEN WHEN (S1 (S1 IS ISNOT NOTNULL) NULL) WHEN WHEN (S2 (S2 IS ISNOT NOTNULL) NULL) WHEN WHEN (S3 (S3 IS ISNOT NOTNULL) NULL) WHEN WHEN (S4 (S4 IS ISNOT NOTNULL) NULL) WHEN WHEN (S5 (S5 IS ISNOT NOTNULL) NULL) ELSE NULL ELSE NULL END END FROM FROMSarada; Sarada;
THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN
S1 S1 S2 S2 S3 S3 S4 S4 S5 S5
128
Coalesce - varianta Case
Datové a procesní modely
COALESCE COALESCE (výraz1, (výraz1,výraz2, výraz2,výraz3,.., výraz3,..,výrazN) výrazN)
CASE CASE WHEN WHEN WHEN WHEN WHEN WHEN ......... ......... WHEN WHEN ELSE ELSE END END
(výraz1 (výraz1 IS ISNOT NOTNULL) NULL) (výraz2 (výraz2 IS ISNOT NOTNULL) NULL) (výraz3 (výraz3 IS ISNOT NOTNULL) NULL) (výrazN (výrazN IS ISNOT NOTNULL) NULL) NULL NULL
THEN THEN THEN THEN THEN THEN
výraz1 výraz1 výraz2 výraz2 výraz3 výraz3
THEN THEN výrazN výrazN
129
Podmíněný operátor Case standard SQL2008
ve ve standardu standardu SQL SQL 2008 2008 byla byla rozšířena rozšířena funkcionalita funkcionalita CASE CASE
pro pro jedno jedno THEN THEN
ÊÊ ÊÊ ÊÊ ÊÊ ÊÊ
Datové a procesní modely
se se dá dá uvést uvést SEZNAM SEZNAM WHEN WHEN podmínek podmínek či či seznam seznam WHEN WHEN hodnost hodnost ne ne pouze pouze jedna jedna WHEN WHEN podmínka podmínka či či jedna jedna WHEN WHEN hodnota hodnota
WHEN ...
THEN ...
WHEN ...
, WHEN ...
, WHEN ...
, WHEN ...
THEN ... 130
Podmíněný operátor Case standard SQL2008
Datové a procesní modely
CASE
WHEN podm , WHEN podm ,
WHEN podm
THEN
výsledek NULL
WHEN podm , WHEN podm ,
WHEN podm
THEN
výsledek NULL
ELSE
výsledek
END 131
Podmíněný operátor Case standard SQL2008 CASE
Datové a procesní modely
výraz
WHEN hodn , WHEN hodn ,
WHEN hodn
THEN
výsledek NULL
WHEN hodn , WHEN hodn ,
WHEN hodn
THEN
výsledek NULL
ELSE
výsledek
END 132
Podmíněný operátor Case standard SQL2008 CASE CASEIdBarva IdBarva WHEN WHEN (1) (1),,WHEN(2) WHEN(2),,WHEN(3) WHEN(3) WHEN WHEN (4) (4) ELSE ELSE END END
THEN THEN THEN THEN
Datové a procesní modely
výraz1 výraz1 výraz2 výraz2 výraz3 výraz3
CASE CASE WHEN WHEN (a>b) (a>b),,WHEN(c>d) WHEN(c>d),,WHEN(e>0) WHEN(e>0) THEN THEN výraz1 výraz1 ............ ............ ELSE výrazN ELSE výrazN END END CASE CASE WHEN WHEN (a>b) (a>b)OR OR (c>d) (c>d)OR OR(e>0) (e>0) THEN THEN výraz1 výraz1 ............ ............ ELSE výrazN ELSE výrazN END END
133
Užití operátou CASE - hlavní body
potřeba potřeba konverze konverze zz data-typu data-typu na na jiný jiný datový datový typ typ Ê Ê
netradičně, netradičně, zvláštním zvláštním způsobem, způsobem, podmíněně podmíněně
potřeba potřeba podmíněného podmíněného procesu procesu [větvení, [větvení, IF] IF] Ê Ê
žádná žádná funkce funkce pro pro to to neexistuje neexistuje
sumární sumární řádky řádky [group [group by] by] je je třeba třeba vytvářet vytvářet zz detailu detailu Ê Ê
Datové a procesní modely
kk určení určení výsledku výsledku
UNIONem UNIONem se se "slepují "slepují dohromady" dohromady" Ê Ê různé různé části části jedné jedné tabulky tabulky COALESCE COALESCE -- varianta varianta CASE CASE Ê Ê pro pro odstranění odstranění nežádoucích nežádoucích hodnot hodnot NULL NULL výsledku výsledku
134
Užití operátou CASE - hlavní body
Datové a procesní modely
potřeba potřeba konverze konverze zz data-typu data-typu na na jiný jiný datový datový typ typ Ê Ê
žádná žádná funkce funkce pro pro to to neexistuje neexistuje
sumární řádky [group by] je třeba z detailu [group by] je vytvářet sumární sumární řádky řádky [group by] vytvářet je třeba třeba vytvářet zz detailu detailu
Ê
Ê Ê
netradičně, netradičně, zvláštním zvláštním způsobem, způsobem, podmíněně podmíněně
vysv ětlíme vysvětlíme pozd ěji později
potřeba potřeba podmíněného podmíněného procesu procesu [větvení, [větvení, IF] IF] Ê Ê
netradičně, zvláštním způsobem, podmíněně
kk určení určení výsledku výsledku
UNIONem UNIONem se se "slepují "slepují dohromady" dohromady" Ê Ê různé různé části části jedné jedné tabulky tabulky COALESCE COALESCE -- varianta varianta CASE CASE Ê Ê pro pro odstranění odstranění nežádoucích nežádoucích hodnot hodnot NULL NULL výsledku výsledku
135
Operátor CASE
přináší přináší obrovskou obrovskou sílu sílu pro pro alikace alikace DB DB zjednodušuje zjednodušuje přístup přístup [prezentace [prezentace -SELECT] -SELECT] ii aktualizaci aktualizaci [UPDATE] [UPDATE] DB DB dat dat ÊÊ většinou většinou ii efektivnější efektivnější SELECT SELECT či či UPDATE UPDATE činí činí SQL SQL zápis zápis čtivější čtivější
mnohdy mnohdy pouhým pouhým CASE CASE výrazem výrazem ÊÊ lze lze nahradit nahradit potřebu potřebu psaní psaní uživatelských uživatelských DB DB rutin rutin
zkracuje zkracuje dobu dobu vývoje vývoje aplikace aplikace CASE CASE konstrukce konstrukce
ÊÊ
Datové a procesní modely
by by měla měla být být komponentou komponentou každémo každémo SQL SQL vývojáře vývojáře
nepřehánět, ěžovat DB nepřehánět, nezat nezatěžovat DB prostředí prostředí nevytvářet nevytvářet zbytečně zbytečně komplikované komplikované konstrukce konstrukce 136
Datové a procesní modely
trochu trochu to to zdramatizujeme zdramatizujeme
Součty
Datové a procesní modely
zjistěte zjistěte součty součty částek částek zz tabulky tabulky
Select Select Sum(Castka1) Sum(Castka1) Sum(Castka2) Sum(Castka2) From From Lid; Lid;
Suma1, Suma1, Suma2 Suma2
řešte řešte
Lid Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma1 406
Suma2 64
138
Součty
Datové a procesní modely
zjistěte čet částek zjistěte sou součet částek zz tabulky tabulky
Lid
av šak avšak pro pro ženy ženy načítejte načítejte Částku1 Částku1 pro pro muže muže
Částku2 Částku2
Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma1
řešte řešte
Suma 460
Select Select Sum(Castka1) Sum(Castka1) Suma1 Suma1 From From Lid Lid
Suma2 406
64
Suma1
Where WherePoh='z'; Poh='z';
400
Select Select Sum(Castka2) Sum(Castka2) Suma2 Suma2 From From Lid Lid Where WherePoh='m'; Poh='m';
Suma2 60
139
Součty
Datové a procesní modely
zjistěte čet částek zjistěte sou součet částek zz tabulky tabulky
Lid
avšak avšak pro pro ženy ženy načítejte načítejte Částku1 Částku1 pro pro muže muže
Částku2 Částku2
Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma1
řešte řešte
Suma 460
Select Select Sum(Castka1) Sum(Castka1) Suma1 Suma1 From From Lid Lid
Where WherePoh='m'; Poh='m';
406
64
????
Where WherePoh='z' Poh='z'
Select Select Sum(Castka2) Sum(Castka2) Suma2 Suma2 From From Lid Lid
Suma2
460
Union Union ???? Suma1 400 60
140
Součty
Datové a procesní modely
zjistěte čet částek zjistěte sou součet částek zz tabulky tabulky
pro pro ženy ženy načítejte načítejte Částku1 Částku1
pro pro muže muže
Částku2 Částku2
Select Select Sum(Suma1) Sum(Suma1) From From( (
Lid Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma1
Suma2 406
Select Select Sum(Castka1) Sum(Castka1) Suma1 Suma1 From From Lid Lid
64
Where WherePoh='z' Poh='z'
Select Select Sum(Castka2) Sum(Castka2) Suma2 Suma2 From Lid From Lid
Union Union
Where WherePoh='m' Poh='m' ) )T; T;
Sum(Suma1) 460
aaje jeto to!!! !!! 141
Operátor Case - Coalesce v agregaci SUM
zjistěte čet částek zjistěte sou součet částek zz tabulky tabulky
Lid
avšak avšak pro pro ženy ženy načítejte načítejte Částku1 Částku1 pro pro muže muže
Datové a procesní modely
Částku2 Částku2
Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma1
řešte řešte
Suma 460
Suma2 406
64
aanebo ěláme takhle neboto toud uděláme takhle Select Select Sum( Sum( CCase ase Poh Poh When When 'z''z' When When 'm' 'm' From From Lid; Lid;
End) End End)
Suma Suma
Then Then Castka1 Castka1 Then Castka2 Then Castka2
Suma 460
142
Operátor Case - Coalesce v agregaci SUM
zjistěte čet částek zjistěte sou součet částek zz tabulky tabulky
Lid
avšak avšak pro pro ženy ženy načítejte načítejte Částku1 Částku1 pro pro muže muže
Datové a procesní modely
Částku2 Částku2
Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma1
řešte řešte
Suma 460
Suma2 406
64
aanebo ěláme takhle neboto toud uděláme takhle Select Select Sum( Sum( CCase ase Poh Poh When When 'z''z' When When 'm' 'm' From From Lid; Lid;
End) End End)
Suma Suma
Then Then Castka1 Castka1 Then Castka2 Then Castka2
Suma 460
143
Operátor Case - Coalesce v agregaci SUM
zjistěte čet částek zjistěte sou součet částek zz tabulky tabulky
Lid
avšak avšak jméno jméno max max 33 znaky znaky -- Částku1 Částku1 -- Částku2 Částku2
jinak jinak
řešte řešte
Datové a procesní modely
Jm
Poh
Anna
z
Bobo
m
Dana
z
Emil
m
Castka1
Castka2
100
1
2
20
300
3
4
40
Suma 163
Select Case Select Sum( Sum(Case When WhenLength(Jm) Length(Jm)<=3 <=3Then Then Castka1 Castka1
From From Lid; Lid;
Else Else End) End End)
Suma Suma
Castka2 Castka2
Suma 163
144
Datové a procesní modely
aa teď ď nněco ěco nestandardní ího te nestandardn teď nestandardního
Nestandardní funkce a operátory pro NULL IFNull IFNull(___, (___,___) ___) IFNull IFNull(Zdroj, (Zdroj,Náhrada) Náhrada)
pokud pokudzdroj zdrojje jeNULL NULL navrací navracínáhradní náhradníhodnotu hodnotu pokud pokudzdroj zdrojnení neníNULL NULL navrací navracízdroj zdroj
MySQL MySQL
=
NVL NVL
(Zdroj, (Zdroj,Náhrada) Náhrada)
IsNull IsNull
(Zdroj, (Zdroj,Náhrada) Náhrada)
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada)
IFNull IFNull(158, (158,1000); 1000);
158 158
IFNull IFNull(NULL, (NULL,1000); 1000);
1000 1000
IFNull IFNull('Modrá', ('Modrá','Bez 'BezBarvy'); Barvy');
Modrá Modrá
IFNull IFNull(NULL, (NULL,'Bez 'BezBarvy'); Barvy');
Bez BezBarvy Barvy
IFNull IFNull(1/0, (1/0,333); 333);
333,0000 333,0000
IFNull IFNull(1/0, (1/0,'Malér') 'Malér')
Malér Malér
Select Select
Select Select
Select Select
Select Select
Select Select
Select Select
Datové a procesní modely
146
Nestandardní funkce a operátory pro NULL IFNull IFNull(___, (___,___) ___) IFNull IFNull(Zdroj, (Zdroj,Náhrada) Náhrada)
pokud pokudzdroj zdrojje jeNULL NULL navrací navracínáhradní náhradníhodnotu hodnotu pokud pokudzdroj zdrojnení neníNULL NULL navrací navracízroj zroj
MySQL MySQL
=
NVL NVL
(Zdroj, (Zdroj,Náhrada) Náhrada)
IsNull IsNull
(Zdroj, (Zdroj,Náhrada) Náhrada)
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada)
IFNull IFNull(158, (158,1000); 1000);
158 158
IFNull IFNull(NULL, (NULL,1000); 1000);
1000 1000
IFNull IFNull('Modrá', ('Modrá','Bez 'BezBarvy'); Barvy');
Modrá Modrá
IFNull IFNull(NULL, (NULL,'Bez 'BezBarvy'); Barvy');
Bez BezBarvy Barvy
IFNull ); IFNull(1/0, (1/0,00);
00
IFNull IFNull(1/0, (1/0,'Malér') 'Malér')
Malér Malér
Select Select
Select Select
Select Select
Select Select
Select Select
Select Select
Datové a procesní modely
147
Nestandardní funkce a operátory pro NULL IFNull IFNull(___, (___,___) ___) IFNull IFNull(Zdroj, (Zdroj,Náhrada) Náhrada)
pokud pokudzdroj zdrojje jeNULL NULL navrací navracínáhradní náhradníhodnotu hodnotu pokud pokudzdroj zdrojnení neníNULL NULL navrací navracízroj zroj
MySQL MySQL
=
NVL NVL
(Zdroj, (Zdroj,Náhrada) Náhrada)
IsNull IsNull
(Zdroj, (Zdroj,Náhrada) Náhrada)
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada)
NVL NVL(158, (158,1000); 1000);
158 158
NVL NVL(NULL, (NULL,1000); 1000);
1000 1000
NVL NVL('Modrá', ('Modrá','Bez 'BezBarvy'); Barvy');
Modrá Modrá
NVL NVL(NULL, (NULL,'Bez 'BezBarvy'); Barvy');
Bez BezBarvy Barvy
NVL ); NVL(1/0, (1/0,00);
00
NVL NVL(1/0, (1/0,'Malér') 'Malér')
Malér Malér
Select Select
Select Select
Select Select
Select Select
Select Select
Select Select
Datové a procesní modely
148
Standardní funkce a operátory pro NULL IFNull IFNull(___, (___,___) ___) IFNull IFNull(Zdroj, (Zdroj,Náhrada) Náhrada)
pokud pokudzdroj zdrojje jeNULL NULL navrací navracínáhradní náhradníhodnotu hodnotu pokud pokudzdroj zdrojnení neníNULL NULL navrací navracízroj zroj
Datové a procesní modely
MySQL MySQL
=
NVL NVL
(Zdroj, (Zdroj,Náhrada) Náhrada)
IsNull IsNull
(Zdroj, (Zdroj,Náhrada) Náhrada)
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada)
Coalesce Coalesce(158, (158,1000); 1000);
158 158
Coalesce Coalesce(NULL, (NULL,1000); 1000);
1000 1000
Coalesce Coalesce('Modrá', ('Modrá','Bez 'BezBarvy'); Barvy');
Modrá Modrá
Coalesce Coalesce(NULL, (NULL,'Bez 'BezBarvy'); Barvy');
Bez BezBarvy Barvy
Coalesce ); Coalesce(1/0, (1/0,00);
00
Coalesce Coalesce(1/0, (1/0,'Malér') 'Malér')
Malér Malér
Select Select
Select Select
Select Select
Select Select
Select Select
Select Select
149
Datové a procesní modely
aa zase át dr zase na na drá drát
Clovek
Datové a procesní modely
vypište vypište tabulku tabulku seřazanou seřazanou dle dle jmen jmen
dle dle příjmení příjmení
Select Select
Pr, Pr, Jm Jm
From Clovek From Clovek Order OrderBy ByPr; Pr;
Pr
Jm
Balbin
Pepa
Danek
Franta
Neco
Zdenek Hynek Kubat
Mirek
Pr
Jm Zdenek Hynek
Balbin
Pepa
Danek
Franta
Kubat
Mirek
151
Clovek
Datové a procesní modely
vypište vypište tabulku tabulku seřazanou seřazanou dle dle jmen jmen
dle dle příjmení příjmení
av šak avšak není není -li -li příjmení, příjmení, pak pak dle dle jmen jmen
Pr
Jm
Balbin
Pepa
Danek
Franta
Neco
Zdenek Hynek
Pr
Jm
Kubat
Mirek
Pr
Jm
Balbin
Pepa
Danek
Franta
Zdenek
Select Select
Hynek
řešte řešte
Pr, Pr, Jm, Jm,
Coalesce(Pr, Coalesce(Pr,Jm) Jm)PrJm PrJm Clovek Clovek
From From Order OrderBy By PrJm; PrJm;
Balbin
Pepa
Danek
Franta
Kubat
Mirek
Hynek Kubat
Mirek Zdenek
Clovek Pr
Jm
PrJm
Balbin
Pepa
Balbin
Danek
Franta
Danek
Hynek
Hynek
Mirek
Kubat
Zdenek
Zdenek
Kubat
152
Operátor Case - Coalesce v klauzuli Order
vypište vypište tabulku tabulku seřazanou seřazanou dle dle jmen jmen
dle dle příjmení příjmení
av šak avšak není není -li -li příjmení, příjmení, pak pak dle dle jmen jmen
řešte řešte
Clovek
Datové a procesní modely Pr
Jm
Balbin
Pepa
Danek
Franta
Neco
Zdenek Hynek Kubat
Mirek
Pr
Jm
Balbin
Pepa
Danek
Franta Hynek
Kubat
Mirek Zdenek
Select Select
Pr, Pr, Jm Jm
From Clovek From Clovek Order (Pr, Jm); Jm OrderBy By Coalesce Coalesce(Pr, Jm);
Clovek Pr
Jm
Balbin
Pepa
Danek
Franta Hynek
Kubat
Mirek Zdenek
153
Operátor Case - Coalesce v klauzuli Order
vypište vypište tabulku tabulku seřazanou seřazanou dle dle jmen jmen
dle dle příjmení příjmení
avšak avšak není není -li -li příjmení, příjmení, pak pak dle dle jmen jmen
řešte řešte
Clovek
Datové a procesní modely Pr
Jm
Balbin
Pepa
Danek
Franta
Neco
Zdenek Hynek Kubat
Mirek
Pr
Jm
Balbin
Pepa
Danek
Franta Hynek
Kubat
Mirek Zdenek
Select Select
Pr, Pr, Jm Jm
From Clovek From Clovek Order (Pr, Jm, 'ZZZZ' OrderBy By Coalesce Coalesce(Pr, Jm,'ZZZZ'); 'ZZZZ');
Clovek Pr
Jm
Balbin
Pepa
Danek
Franta Hynek
Kubat
Mirek Zdenek
154
Operátor Case - Coalesce v klauzuli Order
vypište vypište tabulku tabulku seřazanou seřazanou dle dle jmen jmen
dle dle příjmení příjmení
avšak avšak není není -li -li příjmení, příjmení, pak pak dle dle jmen jmen
řešte řešte
Clovek
Datové a procesní modely Pr
Jm
Balbin
Pepa
Danek
Franta
Neco
Zdenek Hynek Kubat
Mirek
Pr
Jm
Balbin
Pepa
Danek
Franta Hynek
aajak ím prob íhá ?? jakto topros prosím probíhá Select Select
Pr, Pr, Jm Jm
From Clovek From Clovek Order (Pr, Jm, ); OrderBy By Coalesce Coalesce(Pr, Jm,'Aaa' 'Aaa');
Kubat
Mirek Zdenek
Clovek Pr
Jm
Balbin
Pepa
Danek
Franta Hynek
Kubat
Mirek Zdenek
155
Operátor Case - Coalesce v klauzuli Order
vypište vypište tabulku tabulku seřazanou seřazanou dle dle jmen jmen
dle dle příjmení příjmení
avšak avšak není není -li -li příjmení, příjmení, pak pak dle dle jmen jmen
Select Select
Clovek
Datové a procesní modely Pr
Jm
Balbin
Balbin
Pepa
Danek
Danek
Franta
Zdenek
Zdenek
Hynek
Hynek
Kubat
Kubat
Neco
Mirek
Aaa
řešte řešte
Pr, Pr, Jm Jm
From Clovek From Clovek Order (Pr, Jm, ); OrderBy By Coalesce Coalesce(Pr, Jm,'Aaa' 'Aaa');
Clovek Pr
Jm
Balbin
Balbin
Pepa
Danek
Danek
Franta
Aaa
Hynek
Hynek Kubat Zdenek
Kubat
Mirek Zdenek
156
Datové a procesní modely
tabulka tabulka TabX TabX má má 33 Sloupce Sloupce některá některá data data jsou jsou NULL NULL proveďte proveďte součet součet za za sloupce sloupce A, A, B, B, CC
TabX A
B
C
100
0
0
200
10
9
20
8
30
7
300
Select A), Sum( B), Sum( C) Select Sum Sum ((A), Sum(B), Sum(C) From From TabX; TabX;
6 5
řešte řešte
600
50
5
600
50
5
157
Datové a procesní modely
tabulka tabulka TabX TabX má má 33 Sloupce Sloupce některá některá data data jsou jsou NULL NULL proveďte proveďte součet součet za za sloupec sloupec AA ov šem ovšem A A je je Null Null :: načtěte načtěte sloupec sloupec BB B B je je Null Null :: načtěte načtěte sloupec sloupec CC vvšechny šechny sloupce sloupce Null Null odečtěte odečtěte jedničku jedničku
TabX A
B
C
100
0
0
200
10
9
20
8
30
7
300
6 5
600
50
5
158
Operátor Case - Coalesce v agregaci SUM
tabulka tabulkaTabX TabXmá má33Sloupce Sloupce některá některádata datajsou jsouNULL NULL
Datové a procesní modely
TabX A
B
C
100
0
0
200
10
9
20
8
proveďte proveďtesoučet součetza zasloupec sloupec AA ov šem ovšem AAje jeNull Null::načtěte načtětesloupec sloupecBB BBje jeNull Null::načtěte načtětesloupec sloupecCC
30
7
vvšechny šechny sloupce sloupceNull Null odečtěte odečtětejedničku jedničku
300
6 5
Select Select Sum Sum (( Case Case When When AA is is not not Null Null Then Then When When BB is is not not Null Null Then Then When When CC is is not not Null Null Then Then Else Else End) End) Suma Suma From From TabX; TabX;
řešte řešte
600
50
5
AA BB CC -1 -1 Suma 654
Select Coalesce (( A, 1)) Select Sum Sum ((Coalesce A, B, B, C, C, --1)) From From TabX; TabX;
Suma Suma
Suma 654
159
Operátor Case - Coalesce v klauzuli Where
Pobocka Datové a procesní modely Plan Prodej
Pobo
vypište vypište pobočky pobočky plnící plnící >= >= 200% 200%
Prodej/Plan Prodej/Plan >= >= 22
řešte řešte
Brno
2000
4500
Davle
100
1500
Hana
200
420
Chlum
500
780
Jenec
0
20
1000
2200
Kladno
Select Select Pobo, Pobo,Plan, Plan,Prodej, Prodej,Round(Prodej/Plan),1) Round(Prodej/Plan),1)PP From From Pobocka Pobocka Where Where Prodej/Plan Prodej/Plan>=2.0; >=2.0;
Select Select Pobo, Pobo,Plan, Plan,Prodej, Prodej,Round(Prodej/Plan,1) Round(Prodej/Plan,1)PP From From Pobocka Pobocka Where Where Case CaseWhen When Plan Plan==00 Then Then False False Else Else
End; End End;
Prodej/Plan Prodej/Plan>=2.0 >=2.0
Pobo
Plan
Prodej
P
Brno
2000
4500
2.3
Hana
200
420
2.1
1000
2200
2.2
Kladno
160
Operátor Case - Coalesce v klauzuli Where
Pobocka Datové a procesní modely Plan Prodej
Pobo
vypište vypište pobočky pobočky plnící plnící >= >= 200% 200%
když když Plan Plan < < 11 000 000
stačí stačí plnění plnění 150 150 % %
řešte řešte
Brno
2000
4500
Davle
100
1500
Hana
200
420
Chlum
500
780
Jenec
0
20
1000
2200
Kladno
Select Select Pobo, Pobo,Plan, Plan,Prodej, Prodej,Round(Prodej/Plan,1) Round(Prodej/Plan,1)PP From From Pobocka Pobocka Where Where Case CaseWhen When Plan Plan==00 Then Then False False When When Plan Plan<<1000 1000 Then Prodej/Plan Then Prodej/Plan>=1.5 >=1.5 Else Else End; End End;
Prodej/Plan Prodej/Plan>=2.0 >=2.0
Pobo
Plan
Prodej
P
Brno
2000
4500
2.3
Hana
200
420
2.1
Chlum
500
780
1.6
Kladno
1000
2200
2.2
161
IsNull funkce
Datové a procesní modely
IsNull IsNull(Zdroj, (Zdroj,Náhrada) Náhrada)
MySql MySql
IfNull IfNull(Zdroj, (Zdroj,Náhrada) Náhrada)
=
vypište vypište tabulku tabulku
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada) Statista Jmeno
Vlas
Vaha
Ê Ê
implicitní implicitní vlasy vlasy jsou jsou 'pleš' 'pleš'
Pepa
brunet
NULL
Franta
blond
NULL
Ê Ê
implicitní implicitní váha váha je je 60 60
Tom
NULL
120
Statista
Select SelectJmeno, Jmeno, IfNull IfNull(Vlas, (Vlas,'pleš') 'pleš')Vlas, Vlas,
IfNull IfNull(Vaha, (Vaha,60) 60) Vaha Vaha From From Statista; Statista;
řešte řešte
Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120 Statista
Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120
162
IfNull funkce
Datové a procesní modely
IfNull IfNull(Zdroj, (Zdroj,Náhrada) Náhrada)
MySql MySql
IfNull IfNull(Zdroj, (Zdroj,Náhrada) Náhrada)
=
vypište vypište tabulku tabulku
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada) Statista Jmeno
Vlas
Vaha
Ê Ê
implicitní implicitní vlasy vlasy jsou jsou 'pleš' 'pleš'
Pepa
brunet
NULL
Franta
blond
NULL
Ê Ê
implicitní implicitní váha váha je je 60 60
Tom
NULL
120
Statista
Select SelectJmeno, Jmeno, IfNull IfNull(Vlas, (Vlas,'pleš') 'pleš')Vlas, Vlas,
IfNull IfNull(Vaha, (Vaha,60) 60) Vaha Vaha From From Statista; Statista;
řešte řešte
Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120 Statista
Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120
163
IfNull funkce
Datové a procesní modely
IfNull IfNull(Zdroj, (Zdroj,Náhrada) Náhrada)
MySql MySql
IfNull IfNull(Zdroj, (Zdroj,Náhrada) Náhrada)
=
vypište vypište tabulku tabulku
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada) Statista Jmeno
Vlas
Vaha
Ê Ê
implicitní implicitní vlasy vlasy jsou jsou 'pleš' 'pleš'
Pepa
brunet
NULL
Franta
blond
NULL
Ê Ê
implicitní implicitní váha váha je je 60 60
Tom
NULL
120
Statista
Select SelectJmeno, Jmeno, Coalesce Coalesce(Vlas, (Vlas,'pleš') 'pleš')Vlas, Vlas,
Coalesce Coalesce(Vaha, (Vaha,60) 60) Vaha Vaha From From Statista; Statista;
řešte řešte
Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120 Statista
Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120
164
IfNull funkce IfNull IfNull(Zdroj, (Zdroj,Náhrada) Náhrada)
spočtěte spočtěte váhu váhu všech všech statistů statistů
Select SelectSum Sum(Vaha) (Vaha)VahaVsichni VahaVsichni From From Statista; Statista;
Datové a procesní modely
MySql MySql Statista Jmeno
Vlas
Vaha
Pepa
brunet
NULL
Franta
blond
NULL
Tom
NULL
120
VahaVsichni 120
nen í to álo na není tom málo na 33 chlapy chlapy?? Select Null (Vaha, SelectSum Sum( (IfIfNull (Vaha,60) 60)) ) as as VahaVsichni VahaVsichni From From Statista; Statista;
VahaVsichni 240
165
IsNull funkce
Datové a procesní modely
IsNull IsNull(Zdroj, (Zdroj,Náhrada) Náhrada)
IsNull IsNull(Zdroj, (Zdroj,Náhrada) Náhrada)
Sql Sql Server Server
=
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada)
Statista
Select SelectJmeno, Jmeno, IsNull IsNull(Vlas, (Vlas,'pleš') 'pleš')Vlas, Vlas,
IsNull IsNull(Vaha, (Vaha,60) 60) Vaha, Vaha, From From Statista; Statista;
Jmeno
Vlas
Vaha
Pepa
brunet
NULL
Franta
blond
NULL
Tom
NULL
120
Statista Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120
166
Nestandardní funkce a operátory pro NULL NVL NVL(Zdroj, (Zdroj,Náhrada) Náhrada) NVL NVL(Zdroj, (Zdroj,Náhrada) Náhrada)
Datové a procesní modely
Oracle Oracle
=
IsNull IsNull
(Zdroj, (Zdroj,Náhrada) Náhrada)
Coalesce Coalesce(Zdroj, (Zdroj,Náhrada) Náhrada)
pokud pokudzdroj zdrojjejeNULL NULL navrací navracínáhradní náhradníhodnotu hodnotu pokud pokudzdroj zdrojnení neníNULL NULL navrací navracízroj zroj
IsNull IsNull(158, (158,1000) 1000)
158 158
IsNull IsNull(NULL, (NULL,1000) 1000)
1000 1000
IsNull IsNull('Modrá', ('Modrá','Bez 'BezBarvy') Barvy')
Modrá Modrá
IsNull IsNull(NULL, (NULL,'Bez 'BezBarvy') Barvy')
Bez BezBarvy Barvy 167
NVL [oracle] funkce
Datové a procesní modely
Statista
Select SelectJmeno, Jmeno, NVL NVL(Vlas, (Vlas,'pleš') 'pleš')Vlas, Vlas,
NVL NVL(Vaha, (Vaha,60) 60) Vaha, Vaha, From From Statista; Statista;
Select ) )) ( (Vaha,60 SelectSum Sum( (NVL NVL(Vaha, 60) as as VahaVsichni VahaVsichni From From Statista; Statista;
Jmeno
Vlas
Vaha
Pepa
brunet
NULL
Franta
blond
NULL
Tom
NULL
120
Statista Jmeno
Vlas
Vaha
Pepa
brunet
60
Franta
blond
60
Tom
pleš
120
VahaVsichni 240
168
Datové a procesní modely ii ss kaž ždým CASE ka každým CASE je je jednou jednou
KONEC KONEC
aa zase ěco limitují ícího nněco limituj zase ně limitujícího
Ta zvědavost SELECT SELECTJmeno, Jmeno,Plat PlatFROM FROM OOsoba OOsoba
Datové a procesní modely
Jmeno Pepa Hana Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma
Plat 90 85 84 83 82 80 77 74 72 70 60 59 58 56 53 52 51 50
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
Ta zvědavost SELECT SELECTJmeno, Jmeno,Plat PlatFROM FROM OOsoba OOsoba
Datové a procesní modely
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000
Zuzi
70 000
Karel Pavel Petr Mirek Vasil Cecil Marie Vilma
60 59 58 56 53 52 51 50
Hera
47 000
000 000 000 000 000 000 000 000
Ta zvědavost SELECT SELECTJmeno, Jmeno,Plat PlatFROM FROM OOsoba OOsoba
A DOST !!!
Datové a procesní modely
Jmeno Jana Adam Tomáš Vilém Jan Blanka
Plat 83 000 82 000 80 000 77 000 74 000 72 000
Zuzi
70 000
Karel Pavel Petr Mirek Vasil Cecil Marie Vilma
60 59 58 56 53 52 51 50
Hera Věra
47 000
000 000 000 000 000 000 000 000
45 000
Limitace výstupu
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
někdy někdy je je rozumné rozumné
omezit omezit počet počet výstupních výstupních řádek řádek dotazu dotazu SELECT SELECT
Důvody Důvody omezení: omezení:
ladění ladění SQL SQL povelů povelů
zobrazení zobrazení výsledných výsledných dat dat do do okna okna ss NN řádky řádky
zamezení zamezení zbytečného zbytečného čerpání čerpání zdrojů zdrojů
Datové a procesní modely Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Jmeno Zuzi Karel Pavel Petr Mirek
pro pro nepotřebné nepotřebné informace informace (pokud (pokud dotaz dotaz vrací vrací více více informací, informací, než než potřebujeme) potřebujeme)
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Plat 70 000 60 000 59 000 58 000 56 000
Limitace výstupu Jak Jak na na to to
Datové a procesní modely Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
??: ??:
použitím použitím Kurzoru Kurzoru tomu ím !!!! tomunerozum nerozumím
aaž ž pak pak!!!!
nestandardně (každý DBS stroj jinak) nestandardně DBS stroj nestandardně (každý (každý DBS stroj jinak) jinak)
standardně standardně omezením omezením (SQL (SQL 2008) 2008)
pomocí pomocí SQL SQL window window funkcí funkcí (SQL (SQL 2003) 2003) tomu ím !!!! tomunerozum nerozumím
aaž ž pak pak!!!!
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Nestandardní limitace výstupu Top N
před
First N
před
Limit N
za
Rows N
za
RowNum Select TOP
Datové a procesní modely Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Where OOsoba
3 * FROM OOsoba
Select FIRST 3 * FROM OOsoba Select * FROM OOsoba Limit 3 Select * FROM OOsoba Rows 3 Select * FROM OOsoba Where RowNum <= 3
Jmeno
Plat
Dana
84 000
Jana
83 000
Adam
82 000
Nestandardní limitace výstupu Top N
před
First N
před
Limit N
za
Rows N
za
RowNum Select TOP
Datové a procesní modely Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
nejdříve třídění
pak limitace
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Where OOsoba
3 * FROM OOsoba Order By Jmeno
Select FIRST 3 * FROM OOsoba Order By Jmeno Select * FROM OOsoba Order By Jmeno
Limit 3
Select * FROM OOsoba Order By Jmeno
Rows 3
Jmeno
Plat
Adam
82 000
Adolf
43 000
Blanka
72 000
Nestandardní limitace výstupu Top N
před
First N
před
Limit N
za
Rows N
za
RowNum Select TOP
Datové a procesní modely Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
nejdříve filter
pak limitace
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Where OOsoba
3 * FROM OOsoba Where Plat < 50 000
Select FIRST 3 * FROM OOsoba Where Plat < 50000 Select * FROM OOsoba Where Plat < 50000
Limit 3
Select * FROM OOsoba Where Plat < 50000
Rows 3
Jmeno
Plat
Hera
47 000
Vera
45 000
Adolf
43 000
Nestandardní limitace výstupu
Datové a procesní modely Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
aaco ž chci cokdy když chci2. 2.stranku stranku nebo ádky 50 nebood odřřádky 50??? ???
pou žijte offset použijte offset!!! !!! uuTOP áte sm ůlu TOPm máte smůlu SQL á SQLserver serverOffset OffsetNem Nemá
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Limitace výstupu s offsetem Top N
First N před
Skip M First N
Limit N
Limit N Offset M
Rows N za
Rows N To M
RowNum
RowNum
Where
Select TOP
Jmeno Dana Jana Adam Tomáš Vilém jan Jan Blanka Suzi Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
před
za
Datové a procesní modely
od nuly
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 70 000 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Where .... OOsoba
3 * FROM OOsoba
Select Skip 5 FIRST 3 * FROM OOsoba Select * FROM OOsoba Limit 3 Offset 5 Select * FROM OOsoba Rows 6 TO 8 Select * FROM OOsoba Where RowNum Between 6 and 8
Jmeno
Plat
Jan
74 000
Blanka
72 000
Zuzi
70 000
Limitace výstupu - příklady
vypište vypište prvních prvních 55 osob osob řazení řazení dle dle jmen jmen Select *
OOsoba Jmeno
Plat
Adam
82 000
Order By Jmeno
Adolf
43 000
Limit 5
Blanka
72 000
Cecil
52 000
Dana
84 000
FROM OOsoba
Datové a procesní modely
vypište vypište druhých druhých 55 osob osob řazení řazení dle dle jmen jmen
OOsoba
Select * FROM OOsoba Order By Jmeno Limit 5 Offset 5
Jmeno
Plat
Egon
40 000
Hera
47 000
Jan
74 000
Jana
83 000
Karel
60 000
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Který DBS užívá jakou limitaci výstupu Top N
před
Sql Server Sybase SQL Anywhere MS Access
First N před
Ingres
Skip M
First N
před
Informix
First N
Skip M
před
FirdBird
Limit N
Rows N RowNum
za
[To M]
Where
za
PostgreSQL MySQL
FirdBird
Oracle
Datové a procesní modely Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
Jmeno Dana Jana Adam Tomáš Vilém jan Jan Blanka Suzi Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 70 000 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Limitace výstupu - DB2
Datové a procesní modely
SELECT SELECT FROM FROM WHERE WHERE GROUP GROUPBY BY ORDER ORDERBY BY
FETCH FETCH FIRST FIRST
nn
ROWS ROWS
ONLY ONLY
Limitace výstupu - ANSI Sql
Datové a procesní modely
SQL řevzala DB2 SQL 2008 2008 norma norma -- ppřevzala DB2 SELECT SELECT FROM FROM WHERE WHERE GROUP GROUPBY BY ORDER ORDERBY BY [[Offset Offsetm m{{Rows Rows||Row Row}}]] FETCH FETCH{{FIRST FIRST||NEXT NEXT}}nn{{ ROWS ROWS||ROW ROW}}ONLY ONLY
not in DB2
Limitace výstupu - PosgreSQL
SELECT FROM WHERE GROUP BY ORDER BY Limit { n | ALL } [ Offset m ] i[ Offset m { Rows | Row } ] Ansi
FETCH { FIRST | NEXT } n { ROWS | ROW } ONLY
Datové a procesní modely
Limitace výstupu - ANSI Sql
Datové a procesní modely
OOsoba
Select * FROM OOsoba FETCH FIRST 3 ROWS ONLY
Jmeno
Plat
Dana
84 000
Jana
83 000
Adam
82 000
Select *
OOsoba
FROM OOsoba
Jmeno
Plat
Order By Jmeno
Jan
74 000
Blanka
72 000
Zuzi
70 000
OFFSET 5 ROWS FETCH FIRST 3 ROWS ONLY
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Zadání limitace - konstanta či výraz
Datové a procesní modely
OOsoba
Select * FROM OOsoba Limit 3
Select *
Jmeno
Plat
Dana
84 000
Jana
83 000
Adam
82 000
MySQL
FROM OOsoba Limit (2+1)
Select *
er
OOsoba
PostgreSQL
FROM OOsoba Limit (2+1)
ok
Select * FROM OOsoba
er
Limit (Select .... )
ok
Jmeno
Plat
Dana
84 000
Jana
83 000
Adam
82 000
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Datové a procesní modely
aajak iní jakse seto toččiní vvOracle Oracle ??? ???
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select *
Id
Jmeno
1
Ada
2
Zuzi
OLidi
3
Bobo
Id
Jmeno
4
Emil
1
Ada
5
Hana
2
Zuzi
6
Karel
3
Bobo
7
Pavel
4
Emil
8
Marie
9
Radek
OLidi
10
Saly
Id
Jmeno
11
Vanda
1
Ada
12
Franta
2
Zuzi
13
Jan
3
Bobo
14
Kuba
4
Emil
15
Leo
5
Hana
16
Nada
6
Karel
17
Ivo
7
Pavel
18
Hera
8
Marie
19
Gusta
29
Lubor
30
Udo
From OLidi;
Select * From OLidi Where RowNum < 5;
ok
Select * From OLidi Where RowNum < 9 ;
Select * From OLidi Where RowNum > 5 And RowNum < 9 ;
ok
?
OLidi Id
Jmeno
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select * From OLidi Order By Jmeno;
Select * From OLidi Where RowNum < 6 Order By Jmeno;
?
OLidi
Id
Jmeno
Id
Jmeno
1
Ada
1
Ada
27
Adolf
2
Zuzi
3
Bobo
3
Bobo
28
Bozena
4
Emil
20
Cecil
5
Hana
...
...
6
Karel
...
...
7
Pavel
...
...
8
Marie
...
...
9
Radek
29
Xena
10
Saly
2
Zuzi
11
Vanda
12
Franta
13
Jan
14
Kuba
OLidi
15
Leo
Id
Jmeno
16
Nada
1
Ada
17
Ivo
2
BoBo
18
Hera
3
Emil
19
Gusta
4
Hana
5
Zuzi
29
Lubor
30
Udo
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select * From OLidi Order By Jmeno Desc;
Select * From OLidi Where RowNum < 6 Order By Jmeno Desc;
?
OLidi
Id
Jmeno
Id
Jmeno
2
Zuzi
1
Ada
29
Xena
2
Zuzi
11
Vanda
3
Bobo
30
Udo
4
Emil
23
Tana
5
Hana
25
Standa
6
Karel
10
Saly
7
Pavel
...
...
8
Marie
20
Cecil
9
Radek
28
Bozena
10
Saly
3
Bobo
11
Vanda
27
Adolf
12
Franta
1
Ada
13
Jan
14
Kuba
OLidi
15
Leo
Id
Jmeno
16
Nada
5
Zuzi
17
Ivo
4
Hana
18
Hera
3
Emil
19
Gusta
2
BoBo
1
Ada
29
Lubor
30
Udo
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select * From OLidi Order By Jmeno;
Select * From
Id
Jmeno
Id
Jmeno
1
Ada
1
Ada
27
Adolf
2
Zuzi
3
Bobo
3
Bobo
28
Bozena
4
Emil
20
Cecil
5
Hana
...
...
6
Karel
...
...
7
Pavel
...
...
8
Marie
...
...
9
Radek
29
Xena
10
Saly
2
Zuzi
11
Vanda
12
Franta
13
Jan
14
Kuba
OLidi
15
Leo
Id
Jmeno
16
Nada
1
Ada
17
Ivo
27
Adolf
18
Hera
3
Bobo
19
Gusta
28
Bozena
20
Cecil
29
Lubor
30
Udo
( Select * From OLidi Order By Jmeno ) Where RowNum < 6; ok
OLidi
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select * From OLidi Order By Jmeno Desc;
Select * From ( Select *
Id
Jmeno
Id
Jmeno
2
Zuzi
1
Ada
29
Xena
2
Zuzi
11
Vanda
3
Bobo
30
Udo
4
Emil
23
Tana
5
Hana
25
Standa
6
Karel
10
Saly
7
Pavel
...
...
8
Marie
20
Cecil
9
Radek
28
Bozena
10
Saly
3
Bobo
11
Vanda
27
Adolf
12
Franta
1
Ada
13
Jan
14
Kuba
OLidi
15
Leo
Id
Jmeno
16
Nada
From OLidi Order By Jmeno Desc
OLidi
2
Zuzi
)
17
Ivo
29
Xena
18
Hera
Where RowNum < 6;
11
Vanda
19
Gusta
30
Udo
23
Tana
29
Lubor
30
Udo
ok
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select *
Id
From OLidi Where RowNum > 5 And RowNum < 9 ;
Select L.*, Rownum RN From OLidi L;
OLidi
Jmeno OLidi
Id
Jmeno
1
Ada
2
Zuzi
3
Bobo
4
Emil
5
Hana
6
Karel
7
Pavel
8
Marie
9
Radek
10
Saly
11
Vanda
12
Franta
13
Jan
14
Kuba
15
Leo
16
Nada
17
Ivo
18
Hera
19
Gusta
Id
Jmeno
RN
1
Ada
1
2
Zuzi
2
3
Bobo
3
4
Emil
4
5
Hana
5
6
Karel
6
7
Pavel
7
8
Marie
8
9
Radek
9
10
Saly
10
11
Vanda
11
12
Franta
12
13
Jan
13
14
Kuba
14
15
Leo
15
16
Nada
16
17
Ivo
17
...
...
...
29
Lubor
29
29
Lubor
30
Udo
30
30
Udo
Limitace výstupu - Oracle
Datové a procesní modely OLidi
Select *
Id
From OLidi
Jmeno
Where RowNum > 5 And RowNum < 9 ;
Select Id, Jmeno From
OLidi
( Select L.*, Rownum RN From OLidi L ) Where RN > 5 And RN < 9 ; ok
Id
Jmeno
6
Karel
7
Pavel
8
Marie
OLidi Id
Jmeno
1
Ada
2
Zuzi
3
Bobo
4
Emil
5
Hana
6
Karel
7
Pavel
8
Marie
9
Radek
10
Saly
11
Vanda
12
Franta
13
Jan
14
Kuba
15
Leo
16
Nada
17
Ivo
18
Hera
19
Gusta
29
Lubor
30
Udo
Úkol - limitace výstupu Oracle
Datové a procesní modely OLidi
Select * From OLidi Order By Jmeno;
vypište vypište 6..8 6..8 člověka člověka setříděného setříděného dle dle jmen jmen
řřešte ešte
tak taksisitaky taky zastr ánkujme vvOracle zastránkujme Oracle
Id
Jmeno
1
1
Ada
2
27
Adolf
3
3
Bobo
4
28
Bozena
5
20
Cecil
6
21
David
7
4
8
12
Franta
9
19
Gusta
10
5
Hana
11
18
Hera
12
17
Ino
13
13
Jan
14
6
Karel
15
14
Kuba
16
15
Leo
17
26
Li
18
29
Lubor
19
8
Marie
Emil
....
....
29
29
Xena
30
2
Zuzi
Úkol - limitace výstupu Oracle
Datové a procesní modely
vypište vypište 6..8 6..8 člověka člověka
OLidi RN
1
Ada
2
27
Adolf
3
3
Bobo
4
28
Bozena
Jmeno
5
20
Cecil
David
6
21
David
Emil
7
4
Franta
8
12
Franta
9
19
Gusta
10
5
Hana
11
18
Hera
12
17
Ino
13
13
Jan
14
6
Karel
15
14
Kuba
16
15
Leo
17
26
Li
18
29
Lubor
19
8
Marie
OLidi Id 21
From (
4
Select Id, Jmeno, RowNum RN
12
From ( Select * From OLidi Order By Jmeno ) ) Where RN > 5 And RN < 9;
Jmeno
1
setříděného setříděného dle dle jmen jmen
Select Id, Jmeno
Id
Emil
....
....
29
29
Xena
30
2
Zuzi
ok
Oracle pseudosloupec RowNum
Datové a procesní modely
OCisla
Select *
Id
From OCisla Where RowNum < 4;
ok
Hodn
OCisla Id
Hodn
1
1
2
2
3
3 4 OCisla
Select *
Id
From OCisla Where RowNum > 4;
Hodn
5 6 7 8
?
9 10 OCisla
Select *
Id
Hodn
From OCisla Where RowNum > 1;
11 12 13 14
?
15 16
Select *
OCisla Id
From OCisla Where RowNum = 1;
Hodn 1
ok
17 18 19 20
Oracle pseudosloupec RowNum OCisla
Update OCisla Set
Hodn = RowNum; RowNum
Select * From OCisla;
Datové a procesní modely
Id
ok
OCisla
Hodn
Id
Hodn
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
7
7
7
8
8
8
9
9
9
10
10
10
11
11
11
12
12
12
13
13
13
14
14
14
15
15
15
16
16
16
17
17
17
18
18
18
19
19
19
20
20
20
Oracle pseudosloupec RowNum
Oracle Oracle pro pro každou každou řádku řádku vrácenou vrácenou dotazem dotazem generuje generuje pseudosloupec pseudosloupec RowNum RowNum aa přiřazuje přiřazuje mu mu postupně postupně číslo číslo řádku řádku 1,2,3,... 1,2,3,...
resp. resp.
Datové a procesní modely
OCisla Id
OCisla
Hodn
Id
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
7
7
7
8
8
8
9
9
9
10
10
10
11
11
11
12
12
12
13
13
13
14
14
14
15
15
15
16
16
16
17
17
17
18
18
18
19
19
19
20
20
20
Hodn
Oracle pseudosloupec RowNum
generování generování RowNum RowNum činí činí pro pro Where Where
postup postup WHERE WHERE
začínám filtrovat
[WHERE]
Datové a procesní modely
OCisla Id
OCisla
Hodn
Id
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
RovNum = 1
6 7
7
7
vezmu 1. řádlu From
8
8
8
9
9
9
10
10
10
11
11
11
12
12
12
13
13
13
14
14
14
15
15
15
16
16
16
17
17
17
18
18
18
19
19
19
20
20
20
vyhovuje podmínce ?
IF ne
If ano strč RowNum do vybrané řádky
nic
RowNum = RowNum + 1 vezmi další řádku From
Hodn
Oracle pseudosloupec RowNum
začínám filtrovat [WHERE] RovNum = 1 vezmu 1. řádlu From vyhovuje podmínce ? IF ne nic If ano strč RowNum do vybrané řádky RowNum = RowNum + 1 vezmi další řádku From
OCisla Id
OCisla
Select *
Id
From OCisla Where RowNum > 1;
Datové a procesní modely
?
uu první první řádky řádky FROM FROM RowNum RowNum = = 11 první první řádek řádek se se nevybere nevybere RowNum RowNum se se nikdy nikdy nezvýší nezvýší nevybere nevybere se se vůbec vůbec nic nic
Hodn
OCisla
Hodn
Id
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
7
7
7
8
8
8
9
9
9
10
10
10
11
11
11
12
12
12
13
13
13
14
14
14
15
15
15
16
16
16
17
17
17
18
18
18
19
19
19
20
20
20
Hodn
Oracle pseudosloupce
Datové a procesní modely
Oracle Oracle má má několik několik pseudosloupců pseudosloupců
při při práci práci ss každou každou tabulkou tabulkou se se generují generují pseudosloupce pseudosloupce
tabulka tabulka pseudosloupce pseudosloupce neobsahuje neobsahuje
pseudosloupec pseudosloupec se se chová chová jako jako sloupec sloupec
není není však však vv tabulce tabulce uložen uložen
pseudoslopce SELECT pseudoslopce lze lze uvést uvést uu SELECTu SELECTu
vv klauzuli klauzuli WHERE WHERE uu ostatních ostatních povelů povelů
Oracle pseudosloupce
Datové a procesní modely
do do pseudosloupců pseudosloupců nelze nelze vkládat vkládat hodnoty hodnoty
[Insert] [Insert]
ani ani je je měnit měnit
[Update] [Update]
pseudoslopec pseudoslopec je je podobný podobný volání volání funkce funkce bez bez argumentů argumentů
nevrací nevrací však však neutále neutále stejnou stejnou hodnotu hodnotu
parametrem parametrem je je ve ve skupečnosti skupečnosti daná daná řádka řádka
Oracle pseudosloupec Ora_RowScn
navrací navrací přibližné přibližné číslo číslo SCN SCN
číslo číslo poslední poslední změny změny řádku řádku
Datové a procesní modely
System SystemChange ChangeNumber Number
OCisla
Select Id, Ora_RowScn From OCisla;
Id
ok
1
62742745
2
62742745
3
62742745
...
.......
OCisla
Select Id,
Id
Scn_To_Timestamp(Ora_RowScn) From OCisla;
Ora_..Scn
ok
Ora_..Scn
1
20.11.12 10:34:22,00000
2
20.11.12 10:34:22,00000
3
20.11.12 10:34:22,00000
...
.......
Oracle pseudosloupec RowId
Datové a procesní modely
navrací navrací adresu adresu řádky řádky
číslo číslo bloku bloku vv datovém datovém souboru souboru
pozici pozici řádky řádky vv datovém datovém bloku bloku
číslo číslo souboru souboru vv table-space table-space [v [v tabulkovém tabulkovém prostoru] prostoru]
OCisla
Select Id, RowId From OCisla;
Id
ok
RowID
1
AAAi3aAACVaDAAA
2
AAAi3aAACVaDAAB
3
AAAi3aAACVaDAAC
...
.......
Datové a procesní modely
aa co co si si takhle ěco takhle nněco
zasimulovat
Příklad na simulaci klauzule Offset
Datové a procesní modely OLidi
Select *
Id
Jmeno
1
Ada
2
Zuzi
3
Bobo
strany strany vv okně okně pro pro 10 10 řádek řádek
4
Emil
5
Hana
6
Karel
zobrazte zobrazte druhou druhou stranu stranu tj. tj. řádky řádky 11..20 11..20
7
Pavel
8
Marie
9
Radek
From OLidi Order By Id;
tříděno tříděno dle dle Id Id
SELECT * FROM OLidi ORDER BY Id LIMIT 10 OFFSET 10
řřešte ešte
OLidi Id
Jmeno
10
Saly
11
Vanda
11
Vanda
12
Franta
12
Franta
13
Jan
13
Jan
14
Kuba
14
Kuba
15
Leo
15
Leo
16
Nada
16
Nada
17
Ivo
17
Ivo
18
Hera
18
Hera
19
Gusta
19
Gusta
20
Cecil
20
Cecil
30
Udo
11 .. ss tt rr aa nn aa
22 .. ss tt rr aa nn aa
Příklad na simulaci klauzule Offset
zobrazte zobrazte druhou druhou srtanu srtanu tj. tj. řádky řádky 11..20 11..20 tříděno tříděno dle dle Id Id bez bez užití užití klauzule klauzule Offset Offset pouze pouze pomocí pomocí klauzule klauzule Limit Limit tedy tedy ekvivalent ekvivalent dotazu dotazu
SELECT * FROM OLidi ORDER BY Id LIMIT 10 OFFSET 10
řřešte ešte
Datové a procesní modely OLidi Id
Jmeno
1
Ada
2
Zuzi
3
Bobo
4
Emil
5
Hana
6
Karel
7
Pavel
8
Marie
9
Radek
10
Saly
11
Vanda
12
Franta
13
Jan
14
Kuba
15
Leo
16
Nada
17
Ivo
18
Hera
19
Gusta
20
Cecil
30
Udo
11 .. ss tt rr aa nn aa
22 .. ss tt rr aa nn aa
Simulace zadání Offset pro omezení Limit Select
* From
( Select
* From
(
Id
Id
Id
1
20
11
2
19
12
3
18
4
17
5
16
6
15
7
Select
8
* From OLidi
9
Order By Id
10 11
Limit 20
12
) T1
) T2 Order By Id ok
14 13 12
22 .. ss tt rr aa nn aa
13 14 15 16 17 18 19
11
20
10 9
OLidi Jmeno
11
Vanda
7
12
Franta
15
6
13
Jan
16
5
14
Kuba
17
4
15
Leo
18
3
16
Nada
2
17
Ivo
19
18
Hera
20
1
19
Gusta
20
Cecil
14
Limit 10
11 ++ 22 .. ss tt rr aa nn aa
22 .. ss tt rr aa nn aa
Id
13
Order By Id DESC
Datové a procesní modely
21 22
8
Simulace zadání Offset pro omezení Limit Postup
Order By Id Limit 20 Order By Id Desc Limit 10
Id
Id
Id
1
20
11
2
19
12
3
18
4
17
5
16
6
15
7 8 9 10
Order By Id
11 12
Hotovo
11 ++ 22 .. ss tt rr aa nn aa
14 13 12
22 .. ss tt rr aa nn aa
22 .. ss tt rr aa nn aa
13 14 15 16 17 18 19
11
20
10 9
OLidi Id
Jmeno
11
Vanda
7
12
Franta
15
6
13
Jan
16
5
14
Kuba
17
4
15
Leo
18
3
16
Nada
2
17
Ivo
19
18
Hera
20
1
19
Gusta
20
Cecil
13
Datové a procesní modely
14
21 22
8
Simulace zadání Offset pro omezení Limit Select
* From
( Select
* From
(
Id
Id
Id
1
20
11
2
19
12
3
18
4
17
5
16
6
15
7
Select
8
* From OLidi
9
Order By Id
10 11
Limit 20
12
) T1
) T2 Order By Id ok
14 13 12
22 .. ss tt rr aa nn aa
13 14 15 16 17 18 19
11
20
10 9
OLidi Jmeno
11
Vanda
7
12
Franta
15
6
13
Jan
16
5
14
Kuba
17
4
15
Leo
18
3
16
Nada
2
17
Ivo
19
18
Hera
20
1
19
Gusta
20
Cecil
14
Limit 10
11 ++ 22 .. ss tt rr aa nn aa
22 .. ss tt rr aa nn aa
Id
13
Order By Id DESC
Datové a procesní modely
21 22
8
Simulace zadání Offset pro omezení Limit Select
* From
( Select
* From
(
Id
Id
Id
1
20
11
2
19
12
3
18
4
17
5
16
6
15
7
Select
8
* From OLidi
9
Order By Id
10 11
Limit 20
12
) T1
) T2 Order By Id ok
14 13 12
22 .. ss tt rr aa nn aa
13 14 15 16 17 18 19
11
20
10 9
OLidi Jmeno
11
Vanda
7
12
Franta
15
6
13
Jan
16
5
14
Kuba
17
4
15
Leo
18
3
16
Nada
2
17
Ivo
19
18
Hera
20
1
19
Gusta
20
Cecil
14
Limit 10
11 ++ 22 .. ss tt rr aa nn aa
22 .. ss tt rr aa nn aa
Id
13
Order By Id DESC
Datové a procesní modely
21 22
8
Datové a procesní modely
simulace simulace
konec
Nestandardní limitace výstupu
Datové a procesní modely Jmeno Plat Zuzi 70 000 Karel 60 000 Pavel 59 000 Petr 58 000 Mirek 56 000
aanyn í nněkteré ěkteré speciality nyní speciality nestandardn ích řřešení ešení nestandardních kter é ddávají ávají netu šené mo žnosti které netušené možnosti aanněkdy ěkdy nněkteré ěkteré by ěly bym měly být ášeny trestn í malov ěrností býtprohl prohlášeny trestní malověrností
Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Top n - SQL Server - limitace výstupu TOP výraz] TOP [[výraz]
[PERCENT] WITH TIES [PERCENT] [[WITH TIES]]
SELECT SELECT TOP TOP 55 PERCENT PERCENT ** FROM FROM OOsoba OOsoba OOsoba Jmeno
Plat
Dana
84 000
SELECT SELECT TOP TOP 15 15 PERCENT PERCENT ** FROM FROM OOsoba OOsoba
OOsoba Jmeno
Plat
Dana
84 000
Jana
83 000
Adam
82 000
Datové a procesní modely Jmeno Dana Jana Adam Tomáš Vilém Jan Blanka Zuzi Karel Pavel Petr Mirek Vasil Cecil Marie Vilma Hera
Plat 84 000 83 000 82 000 80 000 77 000 74 000 72 000 70 000 60 000 59 000 58 000 56 000 53 000 52 000 51 000 50 000 47 000
Top n - SQL Server - limitace výstupu TOP výraz] TOP [[výraz]
[PERCENT] WITH TIES [PERCENT] [[WITH TIES]]
Datové a procesní modely
OOsoba2 Jmeno
Plat
Dana
84 000
Beta
80 000
Hana
80 000
Kveta
80 000
Olina
70 000
Pavla
60 000 OOsoba
SELECT SELECT TOP TOP 22 ** FROM FROM
OOsoba2 OOsoba2
Jmeno
Plat
Order Order
By By Plat Plat Desc; Desc;
Dana
84 000
Beta
80 000 OOsoba
Jmeno
Plat
SELECT SELECT TOP TOP 22 With With Ties Ties **
Dana
84 000
FROM FROM
Beta
80 000
Hana
80 000
Kveta
80 000
OOsoba2 OOsoba2
Order Order By By Plat Plat Desc; Desc;
Top n - SQL Server TOP [výraz]
[PERCENT] [WITH TIES]
SELECT TOP ... FROM INSERT TOP ... INTO UPDATE TOP ... SET DELETE TOP FROM ...
UPDATE UPDATETOP TOP33LIDI LIDISET SETPlat=Plat+333; Plat=Plat+333;
Datové a procesní modely
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Pepa
10 333
Adolf
40 333
Béda
30 333
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Top n - SQL Server TOP [výraz]
[PERCENT] [WITH TIES]
Datové a procesní modely
Jmeno
Plat
SELECT TOP ... FROM
Pepa
10 000
INSERT TOP ... INTO
Adolf
40 000
UPDATE TOP ... SET
Béda
30 000
DELETE TOP FROM ...
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Pepa
10 333
Adolf
40 333
Béda
30 333
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
DELETE DELETETOP TOP22FROM FROMLIDI; LIDI;
Top n - SQL Server TOP [výraz]
[PERCENT] [WITH TIES]
Datové a procesní modely
Jmeno
Plat
SELECT TOP ... FROM
Pepa
10 000
INSERT TOP ... INTO
Adolf
40 000
UPDATE TOP ... SET
Béda
30 000
DELETE TOP FROM ...
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Béda
30 333
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
DELETE DELETETOP TOP22FROM FROMLIDI; LIDI;
Top n - SQL Server TOP [výraz]
[PERCENT] [WITH TIES]
Datové a procesní modely
Jmeno
Plat
SELECT TOP ... FROM
Pepa
10 000
INSERT TOP ... INTO
Adolf
40 000
UPDATE TOP ... SET
Béda
30 000
DELETE TOP FROM ...
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
INSERT INSERTTOP TOP33INTO INTOLIDI LIDI VALUES VALUES('Pepa', ('Pepa', 10000), 10000), ('Adolf', ('Adolf', 40000), 40000), ('Béda', ('Béda', 30000), 30000), ('Hana', ('Hana', 20000), 20000), ('Zdenda', ('Zdenda',40000), 40000), ('Kaja', ('Kaja', 30000), 30000), ('Jan', ('Jan', 20000); 20000);
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
Top n - SQL Server
použití s
proměnnou
DECLARE @p AS int ; SET @p='3' ; SELECT TOP(@p) * FROM LIDI ;
Datové a procesní modely
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
SQL Server - Set RowCount SET ROWCOUNT N Nastaví počet zpracovávaných vět pro
SELECT
INSERT
UPDATE DELETE
SET ; SETROWCOUNT ROWCOUNT33; .... .... .... .... SELECT SELECT**FROM FROMLIDI; LIDI; Toto řešení by mělo být trestně stíháno !!!
Datové a procesní modely
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
SQL Server - Set RowCount SET ROWCOUNT N Nastaví počet zpracovávaných vět pro
SELECT
INSERT
UPDATE DELETE
UPDATE TOP 3 LIDI SET Plat=Plat+333;
SET ROWCOUNT 3; 3 UPDATE LIDI SET Plat=Plat+333;
Datové a procesní modely
Jmeno
Plat
Pepa
10 000
Adolf
40 000
Béda
30 000
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Pepa
10 333
Adolf
40 333
Béda
30 333
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Datové a procesní modely
konec žností mo ností konec mož možností Microsoftu Microsoftu
SQL Serveru
DB2 - Fetch first rows only FETCH FIRST n ROWS ONLY
Datové a procesní modely
Jmeno
Plat
Pepa
10 000
SELECT SELECT ** FROM FROM table table WHERE ... WHERE ...
Adolf
40 000
Béda
30 000
ORDER ORDER BY BY ... ... FETCH FETCH FIRST FIRST n n ROWS ROWS ONLY ONLY
Hana
20 000
Zdenda
40 000
Kaja
30 000
Jan
20 000
Jmeno
Plat
Pepa
10 333
Adolf
40 333
Béda
30 333
Hana
20 000
SELECT SELECT ** FROM FROM LIDI LIDI FETCH FETCH FIRST FIRST 44 ROWS ROWS ONLY ONLY NELZE POUŽÍT V
UPDATE, DELETE, INSERT
CREATE VIEW
Chvály Chvály hodné hodné !!! !!!
DB2 - Fetch first rows only Úkol v DB2:
za použití FETCH FIRST ROWS ONLY
zrušit prvních pět vět tabulky LIDI
DELETE FROM LIDI WHERE Id IN (SELECT Id FROM LIDI FETCH FIRST 5 ROWS ONLY)
Datové a procesní modely
Id
Jmeno
Plat
2
Pepa
10 000
4
Adolf
40 000
5
Béda
30 000
6
Hana
20 000
7
Zdenda
40 000
8
Kaja
30 000
9
Jan
20 000
Datové a procesní modely
aa zas ěco jiné ého jin zas nněco jiného