Dagens föreläsning (den sista!) Databasteknik och informationssystem DD1370 Allmän information Information om tentan Repetition - Från text till SQL-fråga Föreläsning 8 (info om tentan och repetition) Idag: Inga knappar L Vill gå lite mer på djupet Dock - Om ni vill föreslå användandet av mentometerknappar i någon annan kurs kan ni Säga att de går att låna av Mikael Cronhjort (pedagogisk utvecklare, mikaelc@kth.se) Föreslå ett smartphone-alternativ (t.ex. Viewpipe.com) Även: Kursenkäten kommer att dyka upp på kurswebben, tillsamman med en kursanalys över hur kursen skall förbättras till nästa år Motivera med kokbok! är ni löser - ER-modell à Databasstruktur - Databasstruktur à ER-modell Motivera era val genom att referera till vad Kokboks-regeln säger Antingen - Regel 4: :M-samband bildar egen tabell - Regel: :M-samband bildar egen tabell i måste inte skriva regelnumret i måste skriva hur regeln lyder Annars är det svårt att veta om fel beror på missuppfattningar eller misstag Dagens föreläsning Information om Tentan Allmän information Information om tentan Repetition - Text à SQL Tidigare tentor, inklusive betygsgränser, finns på kurswebben otera: Inga hjälpmedel tillåtna Avsikt: Förstår man föreläsningsanteckningar, kompendier, övningar, labbar och inlämningsuppgifter så har man mycket goda chanser att klara tentan. 1
Information om Tentan Dagens föreläsning Viktiga kursmoment som förmodligen kommer: Problem-text à ER-modell ER-modell à Databasstruktur Databasstruktur à Databas (t.ex. datatyper) Problem-text à SQL Databasstruktur à ER-modell Allmänt om Databaser, Excel och beslutsstöd (F1,F7) Allmän information Information om tentan Repetition - Text à SQL Kombinera tabeller: Alla möjliga rad-kombinationer Kombinera tabeller: Alla möjliga rad-kombinationer Select * from Siffra, Bokstav Kolumn 1 Kolumn 2 Kolumn 1 Kolumn 2 1 11 A Aa 1 11 B Bb 1 11 C Cc 2 22 A Aa 2 22 B Bb 2 22 C Cc Bokstav Kolumn 1 Kolumn 2 A Aa B Bb C Cc Siffra Kolumn 1 Kolumn 2 1 11 2 22 Select * from Siffra, Bokstav Where Siffra. Kolumn 1 = Bokstav. Kolumn 2 Bokstav Kolumn 1 Kolumn 2 A 1 B 2 Kolumn 1 Kolumn 2 Kolumn 1 Kolumn 2 C 3 1 11 A 1 1 11 B 2 Siffra 1 11 C 3 Kolumn 1 Kolumn 2 2 22 A 1 1 11 2 22 B 2 2 22 2 22 C 3 ya tabellen har *M rader om resp M rader från början. Här 2*3=6 rader. SQL-frågor (step by step) Idag: Stallet Gyllene Gnägget Steg för att skiva SQL-frågor 1. Förstå Databasstrukturen 1. Vilka tabeller finns 2. Vilka attribut finns 3. Hur sitter tabellerna ihop (samband?) 2. Förstå vad som söks 1. Behövs info från en eller flera tabeller? 3. Hitta SQL-kommandon som plockar fram rätt info 1. Leta i SQL-kommandon som ingår i kursen 4. Kombinera ihop ovanstående TävlingsId, Har betalt, Placering) Medlr Ryttare HästId Placering Hästar Har betalt Anmälda Timpris Tävlingar 2
Databasstruktur otera: samma information i 3 olika former TävlingsId, Har betalt, Placering) Medlr Ryttare HästId Placering Hästar Anmälda Timpris Har betalt ER-modell Relations i Base Tävlingar Kan man kombinera tabellinfo hur som helst? Ja, notera att man kan skriva frågor som kombinerar lite hur som helst - T.ex. Hitta hästar och ryttare med samma namn Ofta är det dock via sambanden (här: Anmälda) som man vill kombinera tabeller - T.ex. Vilka häst-ryttarekombinationer som vunnit mest etc SQL-frågor (step by step) Steg för att skiva SQL-frågor 1. Förstå Databasstrukturen 1. Vilka tabeller finns 2. Vilka attribut finns 3. Hur sitter tabellerna ihop (samband?) 2. Förstå vad som söks 1. Behövs info från en eller flera tabeller? 3. Hitta SQL-kommandon som plockar fram rätt info 1. Leta i SQL-kommandon som ingår i kursen 4. Kombinera ihop ovanstående Anmälda(Ryttare, Hästar, Tävlingar, Har betalt, Placering) Uppgift: Vilka Hästar (HästID) har hamnat på prispallen? Uppgift: Vilka Hästar (HästID) har hamnat på prispallen? 3
Uppgift: Vilka Hästar (HästID) har hamnat på prispallen? Select HästId from Anmälda where Placering < 4 Uppgift: Vilka Hästar () har hamnat på prispallen? All info finns i tabellerna Anmälda och Hästar Vi måste klistra ihop (join) dessa två för att koppla placering till namn Uppgift: Vilka Hästar () har hamnat på prispallen? Join on (alt2) Join on Uppgift: Vilka Hästar () har hamnat på prispallen? Uppgift: Vilka Hästar () har hamnat på prispallen? Select HästId from Anmälda where Placering < 4 (förra) Select from Anmälda join Hästar on Anmälda. HästId = Hästar. HästId where Placering < 4 Select HästId from Anmälda where Placering < 4 (ger bara HästId) Select from Hästar where HästId in (Select HästId from Anmälda where Placering < 4) 4
Uppgift: Hur mycket har de olika hästarna tävlat? Vi måste räkna förekomsten av varje häst TävlingsId, Har betalt, Placering) Count( ) Group by TävlingsId, Har betalt, Placering) Count( ) Group by Uppgift: Hur mycket har de olika hästarna tävlat? Uppgift: Hur mycket har de olika hästarna tävlat? Select HästId, count(*) from Anmälda group by HästId TävlingsId, Har betalt, Placering) Count( ) Group by Hur mycket har de olika ryttarna tävlat? Select HästId, count(*) from Anmälda group by HästId (förra) Select Medlr, count(*) from Anmälda group by Medlr 5
Steg4: (nu vill vi ha namnen!) Hur mycket har de olika ryttarna (namn) tävlat? TävlingsId, Har betalt, Placering) Hur mycket har de olika ryttarna (namn) tävlat? Count( ) Group by join on SELECT Medlr, COUT(*) FROM Anmälda GROUP BY Medlr SELECT "Ryttare"."", COUT( * ) FROM "Anmälda" JOI "Ryttare" O "Anmälda"."Medlr" = "Ryttare"."Medlr" GROUP BY "Ryttare"."" Snittplacering för Ryttare? Häst? Par av Ryttare&Häst? Uppgift: Beräkna snittplacering för hästarna. Ändra namnet på den beräknade kolumnen till snittplacering Vi måste räkna räkna ut snittet för varje häst Och byta namn på den nya kolumnen Select as from where avg( ) Group by Uppgift: Beräkna snittplacering för hästarna. Ändra namnet på den beräknade kolumnen till snittplacering Select as from where Avg( ) Group by Uppgift: Beräkna snittplacering för hästarna. Ändra namnet på den beräknade kolumnen till snittplacering Select HästID, avg(placering) as snittplacering from Anmälda group by HästID 6
För par av Ryttare&Häst Select as from where Avg( ) Group by Uppgift: Beräkna snittplacering för par av häst & ryttare. Ändra namnet på den beräknade kolumnen till snittplacering Snittplacering för Ryttare? Häst? Par av Ryttare&Häst Select Medlr, HästID, avg(placering) as snittplacering from Anmälda group by HästID, Medlr Vi måste hitta rader som är FALSE eller inte ifyllda Is ULL = FALSE and, or Uppgift: Lista de Ryttare (Medlr) som inte har betalt sina tävlingar Uppgift: Lista de Ryttare (Medlr) som inte har betalt sina tävlingar Anmälda(Ryttare, Hästar, Tävlingar, Har betalt, Placering) Uppgift: Lista de Ryttare (Medlr) som inte har betalt sina tävlingar Is ULL = FALSE and, or select Ryttare from "Anmälda" where "Har betalt" is ULL or "Har betalt"='false' Skapa en sorterad topplista (flest segrar) över Ryttare-Häst-par T.ex. Både Kalle oc Lisa har vunnit VM 7
Steg3: Hitta SQL kommandon Uppgift: Har någon (Medlr) rapporterat samma placering i samma Vi vill hitta rader som har samma Tävlingar och Placering men olika Ryttare Vi vill kunna jämföra tabellen med sig själv Vi joinar tabellen med sig själv! (lite klurigt ) Uppgift: Har någon rapporterat samma placering i samma tävling (alltså anmält fel)? Select from join on Uppgift: Har någon rapporterat samma placering i samma tävling (alltså anmält fel)? SELECT "Anmälda". Medlr", "Anmälda". TävlingsId", "Anmälda"."Placering" FROM "Anmälda JOI "Anmälda" AS "Anmälda2" O "Anmälda"."TävlingsId" = "Anmälda2"."TävlingsId" AD "Anmälda"."Placering" = "Anmälda2"."Placering" AD "Anmälda". Medlr" <> "Anmälda2". Medlr" Skapa en sorterad topplista (flest segrar) över Ryttare-Häst-par, med namn på både häst och ryttare Direkt på Slut. Uppgift: Skapa en sorterad topplista (flest segrar) över Ryttare-Häst-par, med namn på både häst och ryttare SELECT Ryttare". ", Hästar". ", count(*) FROM Ryttare, Hästar,"Anmälda" WHERE Ryttare. Medlr = Anmälda. Medlr AD Hästar. HästId = Anmälda. HästId and Placering =1 GROUP BY Ryttare., Hästar. ORDER BY count(*) DESC Lycka till på tentan! 8