[ Relační databáze ] Přednáška 4 Marian Kamenický Syntea software group a.s. marian.kamenicky kamenicky@syntea.cz MFFUK Praha 2013/14 1
Jednotabulkov tabulkové dotazy PK FK1 Oso Jmeno Plat IdOdd Oso Jmeno Plat IdOdd 10 000 100 Pepa 20 000 200 Fany 30 000 300 Gaby 25 000 100 Karel 20 000 200 Select * From Oso Oso Jmeno Oso Plat IdOdd 10 000 100 Pepa 20 000 200 Fany 30 000 300 Gaby 25 000 100 Karel 20 000 200 Select * From Oso Oso Where IdOdd = 200 200 Jmeno Pepa Karel Oso Plat 20 000 20 000 IdOdd 200 200 Select Jmeno, Plat Plat From Oso Oso Where IdOdd = 100 100 Oso Jmeno Plat 10 000 Gaby 25 000
Vícetabulkové dotazy vícetabulkový dotaz = klauzule FROM == více tabulek == spojování tabulek Jmeno Pepa Oso Plat IdOdd dr Mesto Ulice Cislo Brno Chlum Karel Select... From Oso Oso,, dr dr Jmeno Plat IdOdd Mesto Ulice Cislo Brno Pepa Chlum Karel
Vícetabulkové dotazy vícetabulkový dotaz = klauzule FROM == více tabulek == spojování tabulek Jmeno Pepa Oso Plat IdOdd dr Mesto Ulice Cislo Brno Chlum Karel Select... From Oso Oso,, dr dr Jmeno Plat IdOdd Mesto Ulice Cislo Brno Pepa Chlum Karel
Vícetabulkové dotazy spojováním tabulek se spojí sloupce řádku jedné tabulky [Oso] chceme doplnit o informace z druhé tabulky [dr] propojením jejich sloupců [ Mesto, Ulice, Cislo] Jmeno Pepa Karel Jmeno Pepa Karel Oso Plat Plat IdOdd IdOdd dr Mesto Ulice Cislo Brno Chlum Mesto Ulice Cislo Brno Chlum spojování tabulek == obohacování řádek jedné tabulky o data jiné tabulky Select... From Oso Oso,, dr dr
Vícetabulkové dotazy 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 Oso dr Jmeno Plat IdOdd Mesto Ulice Cislo Brno Chlum Pepa Karel Jmeno Plat IdOdd Mesto Ulice Cislo Brno Pepa Brno Chlum Karel
Vícetabulkové dotazy 2 způsoby spojování tabulek explicitní Select... From Oso Oso...... Join...... dr dr...... implicitní Select... From Oso Oso,, dr dr jakmile v klauzuli FROM jsou dvě či více tabulek jde vždy o spojování [join] explicitní / implicitní
kartézský součin popsal poprvé Standhal v knize Kartouza parmská [ [ nebo snad ne ne? ] ]
Spojování tabulek přirozené (NTURL JOIN) křížové (CROSS JOIN) vnitřní (INNER JOIN) vnější (OUTER JOIN) úplné vnější (FULL OUTER JOIN) částečné vnější z z leva (LEFT JOIN) z z prava (RIGHT JOIN) 9
Cross Join Select * From Tab1 Cross Join Tab2 1 2 3 Tab 1 1 2 3 Tab 2 Z Tab 1 1 radka z Tab 2 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1 Cross Join Tab2 Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1 Cross Join Tab2 Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1 Cross Join Tab2 Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1 Cross Join Tab2 Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1, Tab2 Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1 Cross Join Tab2 explicitní křížové spojení Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 2 3 Tab 1 1 2 3 Tab 2 Select * From Tab1, Tab2 implicitní křížové spojení Tab 1 Jm RokNar 1960 Pepa 1970 Vojta 1990 Tab 2 Ovoce Barva banan zluty jablko zelene jahoda ruda Jm RokNar Ovoce Barva 1960 banan zluty 1960 jablko zelene 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 Odd Oso Odd PK Jmeno PK IdOdd Jmeno Plat IdOdd IdOdd Nazev KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy 10 000 100 Pepa 20 000 200 100 200 Nakup Prodej B 300 Propagace Select Oso.*,, Odd.* From Oso, Odd Odd implicitní Cross Join Jmeno Plat IdOdd IdOdd Nazev KodBudovy explicitní Cross Join Select Oso.*,, Odd.* From Oso Oso Cross Join Join Odd Odd kartézský součin tabulek
Spojení Cross Oso Odd Oso Odd PK Jmeno PK IdOdd Jmeno Plat IdOdd IdOdd Nazev KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy 10 000 100 Pepa 20 000 200 100 200 Nakup Prodej B 300 Propagace Select Oso.*,, Odd.* From Oso, Odd Odd Select Oso.*,, Odd.* From Oso Oso Cross Join Join Odd Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 200 Prodej B 10 000 100 300 Propagace kartézský součin tabulek
Spojení Cross Oso Odd Oso Odd PK Jmeno PK IdOdd Jmeno Plat IdOdd IdOdd Nazev KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy Pepa 10 000 20 000 100 200 100 200 Nakup Prodej B 300 Propagace Select Oso.*,, Odd.* From Oso, Odd Odd Select Oso.*,, Odd.* From Oso Oso Cross Join Join Odd Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 200 Prodej B 10 000 100 300 Propagace Pepa 20 000 200 100 Nakup Pepa 20 000 200 200 Prodej B Pepa 20 000 200 300 Propagace kartézský součin tabulek
Spojení Cross Oso Odd Oso Odd PK Jmeno PK IdOdd Jmeno Plat IdOdd IdOdd Nazev KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy Pepa 10 000 20 000 100 200 100 200 Nakup Prodej B 300 Propagace Select Oso.*,, Odd.* From Oso, Odd Odd Select Oso.*,, Odd.* From Oso Oso Cross Join Join Odd Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 200 Prodej B 10 000 100 300 Propagace Pepa 20 000 200 100 Nakup Pepa 20 000 200 200 Prodej B Pepa 20 000 200 300 Propagace kartézský součin tabulek
Spojení Cross Oso Odd Oso Odd PK Jmeno PK IdOdd Jmeno Plat IdOdd IdOdd Nazev KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy Pepa 10 000 20 000 100 200 100 200 Nakup Prodej B 300 Propagace Select Oso.*,, Odd.* From Oso, Odd Odd Select Oso.*,, Odd.* From Oso Oso Cross Join Join Odd Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 200 Prodej B 10 000 100 300 Propagace Pepa 20 000 200 100 Nakup Pepa 20 000 200 200 Prodej B Pepa 20 000 200 300 Propagace kartézský součin tabulek Jmeno Plat Nazev 10 000 Nakup Select Jmeno,, Plat, Plat, Nazev From Oso, Oso, Odd Odd [From Oso Oso Cross Join Join Odd] Pepa Pepa Pepa 10 000 10 000 20 000 20 000 20 000 Prodej Propagace Nakup Prodej Propagace
Spojení Cross Oso Odd Budova PK Jmeno PK IdOdd PK KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy Barva dresa Oso Odd Budova Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nazev Nakup KodBudovy KodBudovy Barva žlutá dresa Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B implicitní Cross Jmeno Plat Nazev KodBudovy Barva drresa Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B explicitní Cross kartézský součin dvou prvních tabulek Oso Oso a Odd Odd
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Plat 10 000 10 000 10 000 Nazev Nakup Prodej Propagace KodBudovy Barva drresa Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B kartézský součin dvou prvních tabulek Oso Oso a Odd Odd
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva drresa Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B Pepa 20 000 Propagace kartézský součin dvou prvních tabulek Oso Oso a Odd Odd
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva drresa Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B Pepa 20 000 Propagace kartézský součin dvou prvních tabulek Oso Oso a Odd Odd spojíme s každým řádkem 3. 3.
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva žlutá žlutá žlutá žlutá žlutá drresa Krátká 10 Krátká 10 Krátká 10 Krátká 10 Krátká 10 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B Pepa 20 000 Propagace žlutá Krátká 10 kartézský součin dvou prvních tabulek Oso Oso a Odd Odd spojíme s každým řádkem 3. 3.
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva žlutá žlutá žlutá žlutá žlutá drresa Krátká 10 Krátká 10 Krátká 10 Krátká 10 Krátká 10 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B Pepa Pepa Pepa 20 000 10 000 10 000 10 000 20 000 20 000 Propagace Nakup Prodej Propagace Nakup Prodej žlutá Krátká 10 kartézský součin dvou prvních tabulek Oso Oso a Odd Odd spojíme s každým řádkem 3. 3. Pepa 20 000 Propagace
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva žlutá žlutá žlutá žlutá žlutá drresa Krátká 10 Krátká 10 Krátká 10 Krátká 10 Krátká 10 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B Pepa Pepa Pepa 20 000 10 000 10 000 10 000 20 000 20 000 Propagace Nakup Prodej Propagace Nakup Prodej B B B B B žlutá modrá modrá modrá modrá modrá Krátká 10 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 kartézský součin dvou prvních tabulek Oso Oso a Odd Odd spojíme s každým řádkem 3. 3. Pepa 20 000 Propagace B modrá Dlouhá 16
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C Oso PK Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova Krátká 10 Dlouhá 16 korát 20 KodBudovy Barva dresa Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva žlutá žlutá žlutá žlutá žlutá drresa Krátká 10 Krátká 10 Krátká 10 Krátká 10 Krátká 10 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O Cross Cross Join Join Odd Odd as as D Cross Cross Join Join Budova Budova as as B Pepa Pepa Pepa 20 000 10 000 10 000 10 000 20 000 20 000 Propagace Nakup Prodej Propagace Nakup Prodej B B B B B žlutá modrá modrá modrá modrá modrá Krátká 10 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 kartézský součin dvou prvních tabulek Oso Oso a Odd Odd spojíme s každým řádkem 3. 3. Pepa 20 000 Propagace B modrá Dlouhá 16
Spojení Cross Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Odd Propagace KodBudovy KodBudovy B C PK Oso Jmeno Plat FK1 IdOdd PK Budova Barva žlutá modrá bílá Odd IdOdd Nazev FK1 KodBudovy PK dresa Budova KodBudovy Barva dresa Krátká 10 Dlouhá 16 korát 20 Select Select O.Jmeno, O.Plat, O.Plat, D.Nazev, B.* B.* From From Oso Oso as as O, O, Odd Odd as as D, D, Budova Budova as as B Jmeno Pepa Pepa Plat 10 000 10 000 10 000 20 000 20 000 Nazev Nakup Prodej Propagace Nakup Prodej KodBudovy Barva žlutá žlutá žlutá žlutá žlutá drresa Krátká 10 Krátká 10 Krátká 10 Krátká 10 Krátká 10 kartézský součin dvou prvních tabulek Oso Oso a Odd Odd spojíme s každým řádkem 3. 3. Pepa Pepa Pepa Pepa 20 000 10 000 10 000 10 000 20 000 20 000 20 000 Propagace Nakup Prodej Propagace Nakup Prodej Propagace B B B B B B žlutá modrá modrá modrá modrá modrá modrá Krátká 10 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 Dlouhá 16 10 000 Nakup C bílá korát 20 celkem řádek 2 [Oso] [Oso] xx3 [Odd] [Odd] xx3 [Budova] ---> ---> 18 18 Pepa Pepa Pepa 10 000 10 000 20 000 20 000 20 000 Prodej Propagace Nakup Prodej Propagace C C C C C bílá bílá bílá bílá bílá korát 20 korát 20 korát 20 korát 20 korát 20
příklad skoro reálný
Spojení Cross - příklad Pan Jm Bobo Pepa Dama Jm Ema Jana Lucy Tanec Nazev polka čača tango vytvořte podklady pro testování dvojic z tanců řešte řešte Test Pan Dama Tanec............ Pan Bobo Bobo Bobo Dama Ema Jana Lucy Test Tanec Znamka Znamka Select P.Jm P.Jm Pan, Pan, D.Jm D.Jm Dama, T. T. Nazev Tanec, '' '' Znamka From Pan Pan P Cross Join Join Dama D Cross Join Join Tanec T
Spojení Cross - příklad Pan Jm Bobo Pepa Dama Jm Ema Jana Lucy Tanec Nazev polka čača tango vytvořte podklady pro testování dvojic z tanců Select P.Jm P.Jm Pan, Pan, D.Jm D.Jm Dama, T. T. Nazev Tanec, '' '' Znamka From Pan Pan P Cross Join Join Dama D Cross Join Join Tanec T řešte řešte Test Pan Dama Tanec............ Pan Bobo Bobo Bobo Pepa Pepa Pepa Dama Ema Jana Lucy Ema Jana Lucy Test Tanec Znamka Znamka
Spojení Cross - příklad Pan Jm Bobo Pepa Dama Jm Ema Jana Lucy Tanec Nazev polka čača tango vytvořte podklady pro testování dvojic z tanců Select P.Jm P.Jm Pan, Pan, D.Jm D.Jm Dama, T. T. Nazev Tanec, '' '' Znamka From Pan Pan P Cross Join Join Dama D Cross Join Join Tanec T řešte řešte Test Pan Dama Tanec............ Pan Bobo Bobo Bobo Pepa Pepa Pepa Dama Ema Jana Lucy Ema Jana Lucy Test Tanec polka polka polka polka polka polka Znamka Znamka
Spojení Cross - příklad Pan Jm Bobo Pepa Dama Jm Ema Jana Lucy Tanec Nazev polka čača tango vytvořte podklady pro testování dvojic z tanců Select P.Jm P.Jm Pan, Pan, D.Jm D.Jm Dama, T. T. Nazev Tanec, '' '' Znamka From Pan Pan P Cross Join Join Dama D Cross Join Join Tanec T řešte řešte Test Pan Dama Tanec............ Pan Bobo Bobo Bobo Pepa Pepa Pepa Bobo Bobo Bobo Pepa Pepa Pepa Dama Ema Jana Lucy Ema Jana Lucy Ema Jana Lucy Ema Jana Lucy Test Tanec polka polka polka polka polka polka čača čača čača čača čača čača Znamka Znamka
Spojení Cross - příklad Pan Jm Bobo Pepa Dama Jm Ema Jana Lucy Tanec Nazev polka čača tango vytvořte podklady pro testování dvojic z tanců Select P.Jm P.Jm Pan, Pan, D.Jm D.Jm Dama, T. T. Nazev Tanec, '' '' Znamka From Pan Pan P Cross Join Join Dama D Cross Join Join Tanec T řešte řešte Test Pan Dama Tanec Znamka............ Pan Dama Test Tanec Znamka Bobo Ema polka Bobo Jana polka Bobo Lucy polka Pepa Ema polka Pepa Jana polka Pepa Lucy polka Bobo Ema čača Bobo Jana čača Bobo Lucy čača Pepa Ema čača Pepa Jana čača Pepa Lucy čača Bobo Ema tango Bobo Jana tango Bobo Lucy tango Pepa Ema tango Pepa Jana tango Pepa Lucy tango
Spojení Cross - příklad Pan Jm Bobo Pepa Dama Jm Ema Jana Lucy Tanec Nazev polka čača tango vytvořte podklady pro testování dvojic z tanců Select P.Jm P.Jm Pan, Pan, D.Jm D.Jm Dama, T. T. Nazev Tanec, '' '' Znamka From Pan Pan P Cross Join Join Dama D Cross Join Join Tanec T řešte řešte Test Pan Dama Tanec Znamka............ Pan Dama Test Tanec Znamka Bobo Ema polka Bobo Jana polka Bobo Lucy polka Pepa Ema polka Pepa Jana polka Pepa Lucy polka Bobo Ema čača Bobo Jana čača Bobo Lucy čača Pepa Ema čača Pepa Jana čača Pepa Lucy čača Bobo Ema tango Bobo Jana tango Bobo Lucy tango Pepa Ema tango Pepa Jana tango Pepa Lucy tango
mrkněmě se na to jinak
Vztahy mezi tabulkami Oso Odd Budova PK FK1 Jmeno Plat IdOdd PK FK1 IdOdd Nazev KodBudovy PK KodBudovy Barva dresa vraťme se se zpět zpět!!!! Oso Odd Budova Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Propagace KodBudovy KodBudovy B C Barva žlutá modrá bílá dresa Krátká 10 Dlouhá 16 korá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 Budova PK FK1 Jmeno Plat IdOdd PK FK1 IdOdd Nazev KodBudovy PK KodBudovy Barva dresa vraťme se se zpět zpět!!!! Oso Odd Budova Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Propagace KodBudovy KodBudovy B C Barva žlutá modrá bílá dresa Krátká 10 Dlouhá 16 korá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 Budova PK FK1 Jmeno Plat IdOdd PK FK1 IdOdd Nazev KodBudovy PK KodBudovy Barva dresa vraťme se se zpět zpět!!!! Oso Odd Budova Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B 300 Nazev Propagace KodBudovy KodBudovy B C Barva žlutá modrá bílá dresa Krátká 10 Dlouhá 16 korá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 přirozené (NTURL JOIN) křížové (CROSS JOIN) vnitřní (INNER JOIN) vnější (OUTER JOIN) úplné vnější (FULL OUTER JOIN) částečné vnější z z leva (LEFT JOIN) z z prava (RIGHT JOIN) 44
Vnitřní spojení - Inner Oso Odd Oso Odd PK Jmeno PK IdOdd Jmeno Plat IdOdd IdOdd Nazev KodBudovy FK1 Plat IdOdd FK1 Nazev KodBudovy 10 000 100 100 Nakup Pepa 20 000 200 200 Prodej B 300 Propagace Select O.Jmeno, O.Plat, O.IdOdd, Jmeno Plat IdOdd Nazev KodBudovy D.Nazev, O.KodBudovy From Oso Oso as as O Inner Join Join Odd Odd D On On O.IdOdd = D.IdOdd Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd
Vnitřní spojení - Inner PK FK1 Oso Jmeno Plat IdOdd PK FK1 Odd IdOdd Nazev KodBudovy Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B Jmeno Plat 300 IdOdd Nazev Odd Propagace Nazev KodBudovy KodBudovy 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
Vnitřní spojení - Inner PK FK1 Oso Jmeno Plat IdOdd PK FK1 Odd IdOdd Nazev KodBudovy Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B Jmeno Plat 10 000 300 IdOdd 100 Nazev Odd Propagace Nazev Nakup KodBudovy KodBudovy
Vnitřní spojení - Inner PK FK1 Oso Jmeno Plat IdOdd PK FK1 Odd IdOdd Nazev KodBudovy Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Oso Jmeno Plat IdOdd 10 000 100 IdOdd 100 Nakup Pepa 20 000 200 200 Prodej B Jmeno Pepa Plat 10 000 20 000 300 IdOdd 100 200 Nazev Odd Propagace Nazev Nakup Prodej KodBudovy KodBudovy B
Vnitřní spojení - Inner Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Jmeno Plat IdOdd Nazev KodBudovy Barva dresa Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Join Join Budova B On On B.KodBudovy = D. D. KodBudovy
Vnitřní spojení - Inner Budova Jmeno Plat IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 Nakup žlutá Krátká 10 Pepa 20 000 200 Prodej B B modrá Dlouhá 16 C bílá korát 20 Jmeno Plat IdOdd Nazev KodBudovy Barva dresa 10 000 100 Nakup žlutá Krátká 10 Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Join Join Budova B On On B.KodBudovy = D. D. KodBudovy
Vnitřní spojení - Inner Budova Jmeno Plat IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 Nakup žlutá Krátká 10 Pepa 20 000 200 Prodej B B modrá Dlouhá 16 C bílá korát 20 Jmeno Plat IdOdd Nazev KodBudovy Barva dresa 10 000 100 Nakup žlutá Krátká 10 Pepa 20 000 200 Prodej B modrá Dlouhá 16 Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Join Join Budova B On On B.KodBudovy = D. D. KodBudovy
Vnitřní spojení - Inner Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso Oso as as O Join Join Odd Odd D On On O.IdOdd = D.IdOdd Join Join Budova B On On B.KodBudovy = D. D. KodBudovy Jmeno Plat IdOdd Nazev KodBudovy Barva dresa 10 000 100 Nakup žlutá Krátká 10 Pepa 20 000 200 Prodej B modrá Dlouhá 16
Vnitřní spojení - Inner Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Select O.Jmeno, O.Plat, O.IdOdd, From D.Nazev, O.KodBudovy, B.Barva, B.dresa Oso as O Join Join pokud On podmínka je "=" [rovnost] a jména sloupců obou tabulek shodná lze užít podmínku Using Odd D On O.IdOdd = D.IdOdd Budova B On B.KodBudovy = D. KodBudovy
Vnitřní spojení - Inner Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Select O.Jmeno, O.Plat, O.IdOdd, From D.Nazev, O.KodBudovy, B.Barva, B.dresa Oso as O Join Odd D Using (IdOdd( IdOdd) Join Budova B pokud On podmínka je "=" [rovnost] a jména sloupců obou tabulek shodná lze užít podmínku Using Using (KodBudovy( KodBudovy);
Vnitřní spojení - Inner Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso as O Join Odd D Using (IdOdd( IdOdd) Join Budova B Using (KodBudovy( KodBudovy);
Vnitřní spojení - Inner Dluh Oso Id Dat Castka Jm Pr Jm Pr Mesto Ulice Cis 1 10.1.12 10 000 Pepa Pudil Jara Juda z 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 D.*, D.*, O.Mesto, O.Ulice, O.Cislo From Dluh Dluh D Join Join Oso Oso O On On D.Jm =O.Jm ND D.Pr D.Pr =O.Pr ; ; podmínka On může být složená pokud podmínky jsou ND z rovností a shodná jména lze užít podmínku Using(,, )
Vnitřní spojení - Inner Dluh Oso Id Dat Castka Jm Pr Jm Pr Mesto Ulice Cis 1 10.1.12 10 000 Pepa Pudil Jara Juda z 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 D.*, D.*, O.Mesto, O.Ulice, O.Cislo From Dluh Dluh D Join Join Oso Oso O Using (Jm, (Jm, Pr); Pr); podmínka On může být složená pokud podmínky jsou ND z rovností a shodná jména lze užít podmínku Using(,, )
Vnitřní spojení - Inner Dluh Oso Id Dat Castka Jm Pr Jm Pr Mesto Ulice Cis 1 10.1.12 10 000 Pepa Pudil Jara Juda z 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.*, From O.Mesto, O.Ulice, O.Cisllo Dluh D Join Oso O Using (Jm,Pr); podmínka On může být složená pokud podmínky jsou ND z rovností a shodná jména lze užít podmínku Using(,, )
Vnitřní spojení - Inner Dluh Oso Id Dat Castka Jm Pr Jm Pr Mesto Ulice Cis 1 10.1.12 10 000 Pepa Pudil Jara Juda z 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.*, D.*, O.Mesto, O.Ulice, O.Cisllo From Dluh Dluh D Join Join Oso Oso O Using (Jm,Pr); podmínka On může být složená pokud podmínky jsou ND z rovností a shodná jména lze užít podmínku Using(,, )
Vnitřní spojení - Inner Oso PK Jmeno Plat FK1 IdOdd Odd PK IdOdd Oso Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup Nazev FK1 KodBudovy Pepa 20 000 200 200 Prodej? B 300 Propagace Select Oso.*,, Odd.* From Oso Oso Join Join Odd Odd ON ON 1 = 1; 11; Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 200 Prodej B 10 000 100 300 Propagace Pepa 20 000 200 100 Nakup Pepa 20 000 200 200 Prodej B Pepa 20 000 200 300 Propagace podmínka vždy splněna výsledek == kartézský součin
Vnitřní spojení - Inner Oso PK Jmeno Plat FK1 IdOdd Odd PK IdOdd Oso Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup Nazev FK1 KodBudovy Pepa 20 000 200 200 Prodej? B 300 Propagace Select Oso.*,, Odd.* From Oso Oso Join Join Odd Odd ON ON 1 = 0; 0; Jmeno Plat IdOdd IdOdd Nazev KodBudovy podmínka vždy nesplněna výsledek == prázdná tabulka
Vnitřní spojení - Inner PPan DDama Jm dam Vyska 180 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Jm Ema Gaby Jana Lucy Nada Vyska 170 159 164 180 199? Pan Pan dam dam David David VyskaP VyskaP 180 180 177 177 Dama Dama Gaby Jana Gaby Jana VyskaD VyskaD 159 164 159 164 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Join Join DDama D On On P.Vyska > D.Vyska+10; Honza Honza Honza 193 193 193 193 182 182 182 Ema Gaby Jana Lucy Ema Gaby Jana 170 159 164 180 170 159 164
Vnitřní spojení - Inner PPan DDama Jm dam Vyska 180 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Jm Ema Gaby Jana Lucy Nada Vyska 170 159 164 180 199? Pan Pan dam dam David David VyskaP VyskaP 180 180 177 177 Dama Dama Gaby Jana Gaby Jana VyskaD VyskaD 159 164 159 164 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Join Join DDama D On On P.Vyska > D.Vyska+10; Honza Honza Honza 193 193 193 193 182 182 182 Ema Gaby Jana Lucy Ema Gaby Jana 170 159 164 180 170 159 164
Vnitřní spojení - Inner Jm PPan DDama dam 180 Bobo 165 David 177 193 Honza Jan 159 Kamil Vyska 182 169 Jm Ema Gaby Jana Lucy Nada Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Jan a Kamil si si ani neškrtnoun ale nedovědí se se to to From PPan PPan P Join Join DDama D nebylo On On by P.Vyska slušný > D.Vyska+10; to tam Vyska lenit i "nespojené" Pan VyskaP řádky 170? 159 164 Pan VyskaP 180 dam 180 199 dam 180 David 177 David 177 193 193 193 193 krtnou Honza 182 Honza 182 jak do do výsledku začlenit i i "nespojené" řádky s indikací že e se se nespojili vnějším m spojením Honza nebylo by slušný to to tam ňák k naznačit načit??? 182 Dama Dama Gaby Jana Gaby Jana Ema Gaby Jana Lucy Ema Gaby Jana VyskaD VyskaD 159 164 159 164 170 159 164 180 170 159 164
Spojování tabulek přirozené (NTURL JOIN) křížové (CROSS JOIN) vnitřní (INNER JOIN) vnější (OUTER JOIN) úplné vnější (FULL OUTER JOIN) částečné vnější z z leva (LEFT JOIN) z z prava (RIGHT JOIN) 65
Vnitřní spojení - Inner Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Gaby Jana Lucy Nada 159 164 180 199 Pan dam dam David David VyskaP 180 180 177 177 193 Dama Gaby Jana Gaby Jana Ema VyskaD 159 164 159 164 170 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Honza Honza 193 193 193 182 182 Gaby Jana Lucy Ema Gaby 159 164 180 170 159 From PPan PPan P Join Join DDama D On On P.Vyska > D.Vyska+10; Honza 182 Jana 164
Vnější spojení - Outer Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Gaby Jana Lucy Nada 159 164 180 199 Pan dam dam David David VyskaP 180 180 177 177 193 Dama Gaby Jana Gaby Jana Ema VyskaD 159 164 159 164 170 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Honza Honza 193 193 193 182 182 Gaby Jana Lucy Ema Gaby 159 164 180 170 159 From PPan PPan P Left Left Join Join DDama D On On P.Vyska > D.Vyska+10; Honza Jan Kamil 182 159 169 Jana 164
Vnější spojení - Outer Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Gaby Jana Lucy Nada 159 164 180 199 Pan dam dam David David VyskaP 180 180 177 177 193 Dama Gaby Jana Gaby Jana Ema VyskaD 159 164 159 164 170 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Honza Honza 193 193 193 182 182 Gaby Jana Lucy Ema Gaby 159 164 180 170 159 From PPan PPan P Right Join Join DDama D On On P.Vyska > D.Vyska+10; Honza 182 Jana Nada 164 199
Vnější spojení - Outer Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Gaby Jana Lucy Nada 159 164 180 199 Pan dam dam David David VyskaP 180 180 177 177 193 Dama Gaby Jana Gaby Jana Ema VyskaD 159 164 159 164 170 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Honza Honza 193 193 193 182 182 Gaby Jana Lucy Ema Gaby 159 164 180 170 159 From PPan PPan P Full Full Join Join DDama D On On P.Vyska > D.Vyska+10; Honza Jan Kamil 182 159 169 Jana Nada 164 199
Vnější spojování tabulek - outer join vnitřní spojení vyřadí z výsledku řádky pro které se se v druhé tabulce nenalezne žádná spojovací shoda nespojené řádky z výsledku vypadnou někdy žádoucí ponechat nespojené řádky ve ve výsledku s indikací nespojení s druhou tabulkou nespojené řádky se se spojí se se simulovanou NULL řádkou druhé tabulky to to je je vnější spojení [outer join]
Spojování tabulek přirozené (NTURL JOIN) křížové (CROSS JOIN) vnitřní (INNER JOIN) vnější (OUTER JOIN) úplné vnější (FULL OUTER JOIN) částečné vnější z z leva (LEFT JOIN) z z prava (RIGHT JOIN) 71
Spojování tabulek přirozené (NTURL JOIN) křížové (CROSS JOIN) vnitřní (INNER JOIN) vnější (OUTER JOIN) úplné vnější (FULL OUTER JOIN) částečné vnější z z leva (LEFT JOIN) z z prava (RIGHT JOIN) 72
Vnitřní spojení - Inner Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso Oso as as O Natural Join Join Odd Odd D Natural Join Join Budova B; B; žádné podmínky nezadány sloupce tabulek stejně se jmenující se porovnají na rovnost
Přirozené spojení Oso Odd Budova Jmeno Plat IdOdd IdOdd Nazev KodBudovy KodBudovy Barva dresa 10 000 100 100 Nakup žlutá Krátká 10 Pepa 20 000 200 200 Prodej B B modrá Dlouhá 16 300 Propagace C bílá korát 20 Select O.Jmeno, O.Plat, O.IdOdd, D.Nazev, O.KodBudovy, B.Barva, B.dresa From Oso Oso as as O Natural Join Join Odd Odd D Natural Join Join Budova B; B; Jmeno Plat IdOdd Nazev KodBudovy Barva dresa 10 000 100 Nakup žlutá Krátká 10 Pepa 20 000 200 Prodej B modrá Dlouhá 16
Přirozené spojení Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 Gaby Jana 159 164 Pan VyskaP Dama VyskaD 193 Lucy 180 Honza 182 Nada 199 Jan 159 Kamil 169 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Natural Join Join DDama D; D;
Přirozené spojení Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 Gaby Jana 159 164 Pan VyskaP Dama VyskaD 193 Lucy 180 Honza 182 Nada 199 Jan 159 Kamil 169 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Natural Join Join DDama D; D; Select Select P.Jm P.Jm Pan, Pan, P.Vyska P.Vyska VyskaP, VyskaP, D.Jm D.Jm Dama, Dama, D.Vyska D.Vyska VyskaD VyskaD From From PPan PPan P Join Join DDama DDama D; D; ON ON P.Jm P.Jm = D.Jm D.Jm ND ND P.Vyska = D.Vyska;
Přirozené spojení JmP PPan Vyska JmD DDama Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Gaby Jana Lucy 159 164 180 Pan dam VyskaP 180 Dama Lucy VyskaD 180 Honza 182 Nada 199 Jan 159 Kamil 169 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Natural Join Join DDama D; D;
Přirozené spojení JmP PPan Vyska JmD DDama Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Gaby Jana Lucy 159 164 180 Pan dam VyskaP 180 Dama Lucy VyskaD 180 Honza 182 Nada 199 užívání Natural l Join lze posuzovat jako trestný čin Jan 159 Kamil lze 169 posuzovat jako trestný Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Natural Join Join DDama D; D;
Přirozené spojování tabulek - natural join natural join použití v aplikaci je je závažným trestním činem techniku přirozeného spojení ihned po po přednášce zapomeneme kdo u zkoušky bude vědět co co to to je je natural join dopouští se se přestupku držení nebezpečné zbraně a nemůže být klasifikován dostatečně!!!!!!
Spojování tabulek přirozené (NTURL JOIN) křížové (CROSS JOIN) vnitřní (INNER JOIN) vnější (OUTER JOIN) úplné vnější (FULL OUTER JOIN) částečné vnější z z leva (LEFT JOIN) z z prava (RIGHT JOIN) výlučné spojení (neexistuje klauzule --exclusion) 80
Výlučné spojení - exclusion zjištění něčeho co není co nemá nějakou vlastnost co nemá nějakou vazbu zjištění pánů [dam] DDama Jm Vyska Ema 170 Gaby 159 Jana 164 Lucy 180 Nada 199 kteří / které si dle daných pravidel nezatancují PPan Jm dam Vyska 180 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 užije se vnější spojení [pravé, levé, úplné]
Vnější spojení - Outer Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Gaby Jana Lucy Nada 159 164 180 199 Pan dam dam David David VyskaP 180 180 177 177 193 Dama Gaby Jana Gaby Jana Ema VyskaD 159 164 159 164 170 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Honza Honza 193 193 193 182 182 Gaby Jana Lucy Ema Gaby 159 164 180 170 159 From PPan PPan P Left Left Join Join DDama D On On P.Vyska > D.Vyska+10; Honza Jan Kamil 182 159 169 Jana 164
Vnější spojení - Outer Jm PPan Vyska DDama Jm Vyska Pan VyskaP Dama VyskaD dam 180 Ema 170 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Gaby Jana Lucy Nada 159 164 180 199 Pan dam dam David David VyskaP 180 180 177 177 193 Dama Gaby Jana Gaby Jana Ema VyskaD 159 164 159 164 170 Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Honza Honza 193 193 193 182 182 Gaby Jana Lucy Ema Gaby 159 164 180 170 159 From PPan PPan P Left Left Join Join DDama D On On P.Vyska > D.Vyska+10; Honza Jan Kamil 182 159 169 Jana NULL NULL 164 NULL NULL
Vnější spojení - Outer PPan Jm dam Vyska 180 Bobo 165 David 177 193 Jm Ema Gaby Jana DDama Vyska 170 159 164 Pan VyskaP Dama VyskaD Honza 182 Jan 159 Kamil 169 Lucy Nada 180 199 Pan dam VyskaP 180 Dama Gaby VyskaD 159 Select Pan, Pan, VyskaP From (( Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD dam David David Honza 180 177 177 193 193 193 193 182 Jana Gaby Jana Ema Gaby Jana Lucy Ema 164 159 164 170 159 164 180 170 From PPan PPan P Left Left Join Join DDama D On On P.Vyska > D.Vyska+10 )) as as TT TT Where Dama IS IS NULL; Honza Honza Jan Kamil 182 182 159 169 Gaby Jana NULL NULL 159 164 NULL NULL
Vnější spojení - Outer PPan Jm dam Vyska 180 Bobo 165 David 177 193 Jm Ema Gaby Jana DDama Vyska 170 159 164 Pan VyskaP Dama VyskaD Honza 182 Lucy 180 Jan 159 Kamil 169 Nada 199 Select Pan, Pan, VyskaP From (( Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD From PPan PPan P Left Left Join Join DDama D On On P.Vyska > D.Vyska+10 )) as as TT TT Where Dama IS IS NULL; Pan Jan Kamil VyskaP 159 169
Vnější spojení - Outer PPan Jm dam Vyska 180 Bobo 165 David 177 193 Honza Jan 182 159 Kamil 169 Jm Ema Gaby Jana Lucy Nada DDama Vyska 170 159 164 180 199 Pan dam... Honza VyskaP 180... 182 Dama Gaby... Jana VyskaD 159... 164 Select Dama, VyskaD From (( Select P.Jm P.Jm Pan, Pan, P.Vyska VyskaP, D.Jm D.Jm Dama, D.Vyska VyskaD Null Dama Nada Null VyskaD 199 Nada 199 From PPan PPan P Right Join Join DDama D On On P.Vyska > D.Vyska+10 )) as as TT TT Where Pan PanIS IS NULL;
a co normy
Spojování tabulek a nsi normy SQL 89 89 / SQL1 implicitní spojení pomocí WHERE SQL 92 92 / SQL2 SQL 2003 SELECT SELECT...... FROM FROM Tab1, Tab1, Tab2 Tab2 WHERE WHERE Tab1. Tab1. Sloup Sloup = Tab2.SloupB Tab2.SloupB explicitní operátor JOIN v klauzuli FROM SELECT SELECT...... FROM FROM Tab1 Tab1Join JoinTab2 On On Tab1. Tab1. Sloup Sloup = Tab2.SloupB Tab2.SloupB [ [ On On...... > <!=!= In In Betwwen Betwwen en...... ] ] [ [ Using Using (IdXxxx) (IdXxxx) ] ] explicitní JOIN implicitní JOIN 88
Spojování tabulek Select Oso.*,, Odd.* From Oso, Oso, Odd Odd Where Oso.IdOdd = Odd.IdOdd kartézský součin tabulek Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 200 Prodej B 10 000 100 300 Propagace Pepa 20 000 200 100 Nakup Pepa 20 000 200 200 Prodej B Pepa 20 000 200 300 Propagace Po WHERE Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup Pepa 20 000 200 200 Prodej B mě se se to to ňák k metodicky nelíbí pane metodický učiteliu do do klauzule WHERE jsme dávali d podmínky výběru vylučovací to to něnín fér fér dát t tam [[ i i ]] podmínky spojovací
JOIN - klauzule spojování klauzule klauzule JOIN JOIN spojování se se zadává zadáváklauzulí klauzulífrom Select Oso.*,, Odd.* From Oso Oso JOIN Odd Odd ON ON Oso. IdOdd = Odd.IdOdd Where Oso.IdOdd = Odd.IdOdd Oso Odd Jmeno Plat IdOdd IdOdd Nazev KodBudovy Jmeno Plat IdOdd IdOdd Nazev KodBudovy 10 000 100 100 Nakup 10 000 100 100 Nakup Pepa dam 20 000 30 000 200 200 200 300 Prodej Propagace B Pepa 20 000 200 200 Prodej B dam 30 000 200 200 Prodej B Karel 20 000 300 Karel 20 000 300 300 Propagace Fany 30 000 200 Fany 30 000 200 200 Prodej B Select Oso.*,, Odd.* From Oso Oso JOIN Odd Odd USING (IdOdd)
JOIN - klauzule spojování klauzule klauzule JOIN JOIN Select...... From Tab1 JOIN Tab2 podmínky spojování Where podmínky filtrování [výběru / / vylučování]
a zas něco caseovního
lgoritmizace dotazu Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 BMV 1000 000 výši úvěru označte jeho třídou dle rozpětí Výše > 900 000 Definice třídy úvěru Od 900 001 Do Třída > 500 000 500 001 900 000 B řešte řešte > 100 000 <= 100 000 100 001 1 500 000 100 000 C D pane učiteli, u to to nejde,, dyť dyťto to je je algoritmus to to se se bude muset naprogramovat ňákejma IF-ama v ňákym programovacim jazyku sakra, to to bude ale ale dřina d!!!!!!!! do do vánoc v je je co co dělatd 93
lgoritmizace dotazu Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 BMV 1000 000 výši úvěru označte jeho třídou dle rozpětí Výše > 900 000 Definice třídy úvěru Od 900 001 Do Třída > 500 000 500 001 900 000 B řešte řešte > 100 000 <= 100 000 100 001 1 500 000 100 000 C D umíte vybrat řádky s třídou t? -- --vyrobte je je!!!!!! Select Firma, MaxUver, '' Trida From Zakaznici Where MaxUver > 900000; Firma MaxUver Trida BMV 1000 000 94
lgoritmizace dotazu Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 BMV 1000 000 výši úvěru označte jeho třídou dle rozpětí Výše > 900 000 Definice třídy úvěru Od 900 001 Do Třída > 500 000 500 001 900 000 B řešte řešte > 100 000 <= 100 000 100 001 1 500 000 100 000 C D umíte vybrat řádky s třídou t B? -- --vyrobte je je!!!!!! Select Firma, MaxUver, 'B' Trida From Zakaznici Where MaxUver > 500000 nd MaxUver <= 900000; Firma lfa MaxUver 700 000 Trida B 95
lgoritmizace dotazu Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 BMV 1000 000 výši úvěru označte jeho třídou dle rozpětí Výše > 900 000 Definice třídy úvěru Od 900 001 Do Třída > 500 000 500 001 900 000 B řešte řešte > 100 000 <= 100 000 100 001 1 500 000 100 000 C D umíte vybrat řádky s třídou t D? -- --vyrobte je je!!!!!! Select Firma, MaxUver, 'D' Trida From Zakaznici Where MaxUver <= 100000; Firma MaxUver Trida Beta sro 20 000 D 96
lgoritmizace dotazu Definice třídy úvěru Výše Od Do > 900 000 900 001 > 500 000 500 001 900 000 B > 100 000 100 001 500 000 C <= 100 000 1 100 000 D Třída Firma lfa Beta sro BMV MaxUver Trida 700 000 20 000 1000 000 B D Select Firma, MaxUver, '' Trida From Zakaznici Where MaxUver > 900000; Firma BMV MaxUver 1000 000 Trida Select Firma, MaxUver, 'B' Trida From Zakaznici Where MaxUver > 500000 nd MaxUver <= 900000; Firma lfa MaxUver 700 000 Trida B Select Firma, MaxUver, 'C' Trida From Zakaznici Where MaxUver > 100000 nd MaxUver <= 500000; Firma MaxUver Trida Select Firma, MaxUver, 'D' Trida From Zakaznici Where MaxUver <= 100000; Firma Beta sro MaxUver 20 000 Trida D 97
lgoritmizace dotazu Definice třídy úvěru Výše Od Do Třída > 900 000 900 001 > 500 000 500 001 900 000 B > 100 000 100 001 500 000 C Firma lfa Beta sro BMV MaxUver 700 000 20 000 1000 000 Trida B D <= 100 000 1 100 000 D Select Firma, MaxUver, '' Trida From Zakaznici Where MaxUver > 900000 UNION Select Firma, MaxUver, 'B' Trida From Zakaznici Where MaxUver > 500000 nd MaxUver <= 900000 UNION Select Firma, MaxUver, 'C' Trida From Zakaznici Where MaxUver > 100000 nd MaxUver <= 500000 UNION Select Firma, MaxUver, 'D' Trida From Zakaznici Where MaxUver <= 100000; Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 98
a radši zpět t k problému
lgoritmizace dotazu Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 BMV 1000 000 výši úvěru označte jeho třídou dle rozpětí Výše > 900 000 Definice třídy úvěru Od 900 001 Do Třída > 500 000 500 001 900 000 B řešte řešte > 100 000 <= 100 000 100 001 1 500 000 100 000 C D SQL SQL -- neprocedurální jazyk nelze několika n povely vytvářet algoritmus povely jsou jsou na na sobě [procesně] nezávislé SQL SQL mám mávšak v sobě bohatou algoritmickou funkcionalitu SQL SQL umožňuje uje zadat algoritmizaci dovnitř jednoho povelu 100
lgoritmizace dotazu Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 BMV 1000 000 výši úvěru označte jeho třídou dle rozpětí IF IF Uver Uver >900 >900 000 000 Then Then.................. ELSE ELSE IF IF Uver Uver >500 >500 000 000 Then Then.................. ELSE ELSE IF IF Uver Uver >100 >100 000 000 Then Then.................. ELSE ELSE...............;...; Do Do While While............ End End While; While; IF řešte IF...... END řešte END IF IF Výše > 900 000 > 500 000 > 100 000 <= 100 000 Definice třídy úvěru Od 900 001 500 001 100 001 1 Do 900 000 500 000 100 000 Třída B C D SQL SQL -- neprocedurální jazyk nelze SQL několika n povely povel vytvářet.. ; povely jsou jsou na na sobě [procesně] nezávislé SQL SQL mám mávšak v sobě bohatou algoritmickou funkcionalitu SQL SQL umožňuje uje zadat algoritmizaci dovnitř jednoho povelu 101
Podmíněný ný operátor Case operátor CSE CSE [neboli [neboli podmíněný výraz] výraz] umožňuje provádět jednoduchá rozhodnutí na na úrovni úrovni VÝRZU struktura operátoru je je podobná konstrukci IF IF THEN THEN ELSE ELSE 102
Podmíněný ný operátor Case CSE CSE WHEN WHEN (a>b) (a>b) THEN THEN...... WHEN WHEN (a>c) (a>c) THEN THEN...... WHEN WHEN (a+b>c) (a+b>c) THEN THEN...... ELSE ELSE END END varianta varianta 1 CSE CSE aa awhen WHEN (2) (2) THEN THEN...... WHEN WHEN (3) (3) THEN THEN...... WHEN WHEN (88) (88) THEN THEN...... ELSE ELSE END END varianta varianta 2 CSE CSE WHEN WHEN (a= a=2) (a=2) THEN THEN...... END END WHEN WHEN (a= a=3) (a=3) THEN THEN...... WHEN WHEN (a= a=88 (a=88) 88) THEN THEN.... ELSE ELSE varianta varianta 1 1 103
Podmíněný ný operátor Case CSE CSE WHEN WHEN (Length (Length(Jmeno) (Jmeno) + Length(Prijmeni) Length(Prijmeni) = 10) 10) THEN THEN...... WHEN WHEN (Length (Length(Jmeno) (Jmeno) + Length(Prijmeni) Length(Prijmeni) = 11) 11) THEN THEN...... WHEN WHEN (Length (Length(Jmeno) (Jmeno) + Length(Prijmeni) Length(Prijmeni) = 12) 12) THEN THEN...... ELSE ELSE END END varianta varianta 1 1 CSE CSE Length(Jmeno) Length(Jmeno) + Length(Prijmeni) Length(Prijmeni) WHEN WHEN (10 (10) THEN THEN...... WHEN WHEN (11 (11) THEN THEN...... WHEN WHEN (12 (12) THEN THEN...... ELSE ELSE varianta END varianta 2 2 END 104
Podmíněný ný operátor Case - varianta 1 CSE WHEN podmínka THEN 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ý ný operátor Case - varianta 2 CSE výraz WHEN výrazhodnoty THEN 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ý ný operátor Case CSE WHEN podmínka THEN 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 END NULL varianta 1 varianta 1 CSE výraz WHEN výrazhodnoty THEN výsledný výraz NULL WHEN výrazhodnoty THEN výsledný výraz NULL WHEN výrazhodnoty THEN výsledný výraz NULL END ELSE výsledný výraz NULL varianta 2 varianta 2
Podmíněný ný operátor Case CSE je je operátor vrací vracískalární hodnotu komplikovaný algoritmus vracející hodnotu 108
Podmíněný ný operátor Case Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 řešte řešte BMV 1000 000 SELECT Firma, MaxUver, a jako 3. sloupec si "vyrobíme" buď ''nebo'b'nebo cokoliv jiného podmíněných operátorem CSE dle hodnoty ve sloupci MaxUver FROM Zakaznici 109
Podmíněný ný operátor Case Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 Firma lfa Beta sro MaxUver 700 000 20 000 Trida B D BMV 1000 000 řešte řešte BMV 1000 000 SELECT Firma, MaxUver, CSE WHEN (MaxUver>900000) WHEN (MaxUver>500000) WHEN (MaxUver>100000) ELSE THEN '' THEN 'B' THEN 'C' 'D' END FROM Zakaznici 110
Podmíněný ný operátor Case Zakaznici Firma MaxUver lfa 700 000 Beta sro 20 000 BMV 1000 000 pane učiteliu to to nemáte dobře řešte řešte Firma lfa Beta sro BMV MaxUver 700 000 20 000 1000 000 Trida B D SELECT Firma, MaxUver, CSE WHEN (MaxUver>900000) THEN '' WHEN (MaxUver>500000) THEN 'B' WHEN (MaxUver>100000) THEN 'C' ELSE 'D' END FROM Zakaznici a cotak mmůžu u dobře nemít t copak??? 111