Påminnelse: Deadline på tisdag Databasteknik och informationssystem DD1370 F3 Petter Ögren Inlämningsuppgift 1 - Skall mailas in senast 23:59 på tisdag. - Redovisas på övningen på onsdag - Inspireras av Övningar, Föreläsningar och SQLkommandon som ingår i kursen Notera: - Datorer är petiga, Base kräver exakta SQL-frågor - För att fokusera på förståelse, så godkänner vi svar som är nästan rätt - Om ni tror på er lösning, men Base vägrar, skriv ned, lämna in, och förbered er att redovisa den - I lab1 (inte nu) måste alla svar gå att köra i Base Påminnelse: Vad är en Databas? Förra föreläsningen Ett antal tabeller Referenser (pilar) mellan tabellerna l SQL Structured Query Language Ex: register abc123 BMW 830101-0000 def100 Volvo 830101-0000 930101-0000 070-000000 830101-0000 073-000000 Ett urval ur databasen bestäms av en SQL-fråga Men först F2 Idag Repetition av de 5 frågor som gav flest osäkra svar 1
SQL-fråga: select from where selectwhere like _a% Select as Dudes from where Lön >10000 AND Lön < 30000! Vad blir svaret? Select from where like _a%! svaret? Kajsa Dudes Dudes 950101-0000 20000 930101-0000 25000 910101-0000 30000 Kajsa Kajsa 950101-0000 20000 930101-0000 25000 910101-0000 30000 910201-0000 Kajsa 28000 _ betyder ett tecken, vilket som helst SQL-fråga: select order by SQL-fråga: select order by Select from order by Lön! Vad blir svaret? Select from order by! Vad blir svaret? ORDER BY sorterar (i stigande ordning) 950101-0000 20000 930101-0000 25000 910101-0000 30000 ORDER BY sorterar (i stigande ordning) 950101-0000 20000 930101-0000 25000 910101-0000 30000 selectwhere group by having Select Skostorlek, avg( Lön ) from group by Skostorlek having avg( Lön )>25000! svaret? 35 20000 40 25000 HAVING gör urval av delresultat 35 25000 40 26000 40 26000 Skostorlek 35 20000 40 25000 35 30000 40 Kajsa 27000 2
Vad är en vy? (i SQL) Create view as Ett sätt att se en databas En SQL-fråga som fått ett eget namn En ny tabell som får sitt värde definierat av andra tabeller Select Skostorlek, avg( Lön ) from group by Skostorlek! Create view Diskriminering as Select Skostorlek, avg( Lön ) from group by Skostorlek! Ny tabell! - Får värde från andra tabeller! - Går att använda precis som vanliga tabeller! Visa i Base Diskriminering 35 25000 40 26000 Skostorlek 35 20000 40 25000 35 30000 40 Kajsa 27000 Create view as SQL standard: - Create view Diskriminering as Select Skostorlek, avg( Lön ) from group by Skostorlek I Base: - I Base skriver vi bara frågan i ett annat fönster (Tabell/Skapa vy) Alltså: skriv precis som vanlig SQL-fråga (utan create view ) Varför vill man söka från flera tabeller? Vem äger bilen ABC123? Vilka bilar äger? Två sätt: - - Kombinera tabellerna, sök i resultatet Vad heter den som äger bilen ABC123? - Hitta Pnr på den som äger bilen - Hitta på den som har det Pnr Vilka bilar äger? - Hitta Pnr på - Hitta bilar som ägs av det Pnr DEF100 Volvo 830101-0000 930101-0000 070-000000 830101-0000 073-000000 DEF100 Volvo 830101-0000 930101-0000 070-000000 830101-0000 073-000000 3
Vad heter den som äger bilen ABC123? - Hitta Pnr på den som äger bilen Select Ägare from where RegNr = ABC123 - Hitta på den som har det Pnr Select from where Pnr = X - Kombinera Select from where Pnr in (Select Ägare from where RegNr = ABC123 ) - Select Telefon from where Pnr in (Select Ägare from where Modell = BMW ) 070-000000 073-000000 930101-0000 DEF100 Volvo 830101-0000 930101-0000 070-000000 830101-0000 073-000000 IN istället för = bra om hel tabell 930101-0000 070-000000 830101-0000 073-000000 Urval: in, not in - Select Modell from where Ägare in (Select Pnr from where Telefon = 070-000000 ) Hur får vi en lista på alla bilägare? Select * from personer where Pnr in (select Pnr from bilägare) Volvo 930101-0000 BMW Alla icke-bilägare? Select * from personer where Pnr not in (select Pnr from bilägare) 930101-0000 070-000000 830101-0000 073-000000 930101-0000 070-000000 830101-0000 073-000000 Slå ihop tabeller: join on - Select * from join on Ägare = Pnr 830101-0000 073-000000 930101-0000 070-000000 930101-0000 070-000000 830101-0000 073-000000 4
Slå ihop tabeller: join on - Select Name from join on Ägare = Pnr where RegNr = ABC123 Slå ihop tabeller: join on - Select Name from join on Ägare = Pnr where RegNr = DEF100 830101-0000 073-000000 930101-0000 070-000000 BMV Volvo 930101-0000 070-000000 830101-0000 073-000000 930101-0000 070-000000 830101-0000 073-000000 Slå ihop tabeller: join on - Select Modell from join on Ägare = Pnr where RegNr = DEF100 BMV Volvo 930101-0000 070-000000 830101-0000 073-000000 Slå hop tabeller utan join Hittils - Select * from Tabell where : - Select * from Tabell1, Tabell2 where Vad betyder det att lista flera tabeller? Raderna i Tabell1 kopplas ihop med raderna i Tabell2 i alla möjliga kombinationer Alla möjliga rad-kombinationer Hundar Ludde Select * from hästar, hundar Lady Lufsen Hästar Brunte Brunte 300kg Ludde 300kg Pålle Brunte 300kg Lady 15kg Brunte 300kg Lufsen 20kg Pålle 400kg Ludde 300kg Pålle 400kg Lady 15kg Pålle 400kg Lufsen 20kg 300kg 15kg 20kg 300kg 400kg Nya tabellen har N*M rader om N resp M rader från början. Här 2*3=6 rader. 5
Slå ihop tabeller: 2 olika sätt - Select * from join on Ägare = Pnr - Select * from, where Ägare = Pnr - Ger samma resultat 830101-0000 073-000000 930101-0000 070-000000 930101-0000 070-000000 830101-0000 073-000000 Idag - Select from join on Ägare = Pnr where RegNr = ABC_% - Select from, where Ägare = Pnr and RegNr = 100 930101-0000 070-000000 830101-0000 073-000000 730101-0000 072-000000 930101-0000 070-000000 830101-0000 073-000000 730101-0000 072-000000 - Select from, where Ägare = Pnr and RegNr = 100 order by - Select from where Telefon is NULL order by 930101-0000 070-000000 830101-0000 073-000000 730101-0000 072-000000 930101-0000 070-000000 830101-0000 073-000000 730101-0000 6
- Select from where Lön < 27000 order by - Select count( Modell ) from where Modell = Volvo 3 2 930101-0000 20000 830101-0000 25000 730101-0000 30000 930101-0000 20000 830101-0000 25000 730101-0000 30000 - Select Modell, avg( Lön ) from join on Ägare = Pnr group by Modell Slut BMW 25000 Volvo 25000 BMW 30000 Volvo 25000 20000 930101-0000 20000 830101-0000 25000 730101-0000 30000 7