Cvičení 05 Joins, isNull, case when Ing. Pavel Bednář
Klasické spojení dvou tabulek na základě společného atributu. Spojí pouze záznamy z levé (první) relace, které mají shodný záznam v pravé (druhé) relaci. Záznamy z první tabulky, které nemají shodný záznam na pravé straně, nebudou ve výsledné relaci.
Select * from Student s Join Vyznamenani v On s.login = v.login Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva232 Nov098NovákBohumil281 Sip001ŠípkováRůžena182 Vid021VidlákováKateřina283 Vyznamenani LoginRok Zub Sip Zub s.Logins.Příjmenís.Jménos.Věks.Id_Fakultav.Loginv.rok Dra025DrábekTomáš251Zub Zub011ZubatáEva232Sip Zub011ZubatáEva232Sip
Výsledná relace bude obsahovat všechny záznamy z levé relace i když nemají shodné záznam v relaci na pravé straně. Všechny atributy relace z pravé strany budou NULL pokud záznam v levé relaci nemá shodný záznam v relaci na pravé straně.
Select * from Student s LEFT Join Vyznamenani v On s.login = v.login Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva232 Nov098NovákBohumil281 Sip001ŠípkováRůžena182 Vid021VidlákováKateřina283 Vyznamenani LoginRok Zub Sip Zub s.Logins.Příjmenís.Jménos.Věks.Id_Fakultav.Loginv.rok Dra025DrábekTomáš251NULL Zub011ZubatáEva232Zub Zub011ZubatáEva232Zub Nov098NovákBohumil281NULL Sip001ŠípkováRůžena182Sip Vid021VidlákováKateřina283NULL
Výsledná relace bude obsahovat všechny záznamy z pravé relace i když nemají shodné záznam v relaci na levé straně. Všechny atributy relace z levé strany budou NULL pokud záznam v pravé relaci nemá shodný záznam v relaci na levé straně.
Select * from Student s RIGHT Join Vyznamenani v On s.login = v.login Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva232 Nov098NovákBohumil281 Sip001ŠípkováRůžena182 Vid021VidlákováKateřina283 Vyznamenani LoginRok Zub Sip Zub s.Logins.Příjmenís.Jménos.Věks.Id_Fakultav.Loginv.rok Zub011ZubatáEva232Zub Zub011ZubatáEva232Zub Sip001ŠípkováRůžena182Sip
Pokud je nějaký atribut NULL, nahradí ho jinou hodnotou.
Select login, IsNull(Id_fakulta,-1) from Student s Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva23NULL Nov098NovákBohumil281 Sip001ŠípkováRůžena18NULL Vid021VidlákováKateřina283 Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva23 Nov098NovákBohumil281 Sip001ŠípkováRůžena18 Vid021VidlákováKateřina283
Jednoduchý rozhodovací blok Syntaxe: CASE WHEN condition THEN value1 ELSE value2 END Lze použít v agregačních funkcích jako SUM(), atd.
Kolik záznamů nemá vyplněnou fakultu Select sum(case when s.id_Fakulta is null then 0 else 1 end) as Pocet from Student s Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva23NULL Nov098NovákBohumil281 Sip001ŠípkováRůžena18NULL Vid021VidlákováKateřina283 Student Pocet 3
Spočítá počet unikátních výskytů atributu. Select count(distinct Věk) as Pocet From Student Student LoginPříjmeníJménoVěkId_Fakulta Dra025DrábekTomáš251 Zub011ZubatáEva23NULL Nov098NovákBohumil281 Sip001ŠípkováRůžena18NULL Vid021VidlákováKateřina283 Student Pocet 4