Allmänna frågor Databasteknik och informationssystem DD1370 F2 Petter Ögren Är Kurswebben svårbegriplig? Är lab0 svårbegriplig? Är bonus-poängen tydliga? Har ni lyckats installera Open Office? Fungerar kommentarsfältet? Har ni sagt något till årskursrepresentanterna? : Clickers Är Kurswebben svårbegriplig? Är Lab0 svårbegriplig? Är bonuspoängen tydliga? Fungerar kommentarsfältet? 1
Har du lyckats installera Open/Libre Office? Har du sagt något Pll Årskursrepresentanterna? B. Har inte försökt, men ska C. Kommer an använda datorsalen D. Försökte men misslyckades Förra föreläsningen Påminnelse: Vad är en Databas? Hur ser ett databasprogram ut? Varför är Databaser viktiga? Examination (vad krävs för att klara kursen?) Kursens mål Lite SQL Idag: Mer SQL! Bil Ett antal tabeller Referenser (pilar) mellan tabellerna Ex: Bilregister RegNr Modell Ägare abc123 BMW 830101-0000 def100 Volvo 830101-0000 Person Pnr Telefon 930101-0000 070-000000 830101-0000 073-000000 Ett urval ur databasen bestäms av en SQL-fråga Vad är ett frågespråk? Google har också ett frågespråk Vad får vi för svar om vi skriver: - imagine all the people - "imagine all the people (exakt fras inklusive alla ord) - jaguar speed - jaguar speed car (hemsidor utan ordet car ) - "ingen * utan eld (ingen rök utan eld, ingen lek utan eld, ) Googles frågespråk Vad får vi för svar om vi skriver: - "blue box" AND "red box (sidor med båda fraserna) - "blue box" OR "red box (sidor med minst en av fraserna) - "blue box" AND ("red box" OR "yellow box") (sidor med första, och en av 2:a och 3:e) - Google: funkar bättre om icke-exakt Databas: måste vara exakt - Jmf: beräkning av portfölj-värde Då används SQL (Structured Query Language) 2
SQL-historia Tyvärr ingen riktig strandard från början Olika utvecklare arbetar parallellt - Lägger till egna features i egna produkter En defacto-standard - Jmf Microsoft Word doc-format I efterhand har kärnan standardiserats ANSI/ISO Exempel: - I förra kursen användes natural join - I denna kursen använder vi join on (Kort repetition från i måndags) Select Lön from Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Urval mha SQL-fråga: select from Select Lön from Select Lön, from Select Lön,, Pnr from Select * from (* betyder alla kolumner dvs hela tabellen) Select * from where = Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Select from where Lön <30000 Select from where Lön >=30000 Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 3
Select from where Lön >20000 AND Lön < 30000 Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Idag Först select as from where Man kan döpa om kolumner hur som helst: Select, Lön as STÅLAR from Select Pnr, as Julgran, Lön from Select as Dudes from where Lön >10000 AND Lön < 30000 Dudes Dudes Pnr Julgran Lön STÅLAR 950101-0000 20000 930101-0000 25000 910101-0000 30000 Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 Enter quespon text... Select from where like Ka% % betyder vilka tecken som helst (inkl inga alls) Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 910201-0000 28000 4
select where like K% select where like _a% Select from where like %a% Select from where like _a% Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 910201-0000 28000 _ betyder ett tecken, vilket som helst Pnr Lön 950101-0000 20000 930101-0000 25000 910101-0000 30000 910201-0000 28000 select where Is NULL Select from where Pnr IS NULL IS NULL betyder saknas Pnr Lön 950101-0000 20000 930101-0000 910101-0000 30000 28000 SQL-fråga: select order by SQL-fråga: select order by Select from order by Lön Select from order by Jasmine Jasmine Pnr Lön Pnr Lön 950101-0000 20000 950101-0000 20000 ORDER BY sorterar (i stigande ordning) 930101-0000 25000 910101-0000 30000 ORDER BY sorterar (i stigande ordning) 930101-0000 25000 910101-0000 30000 5
SQL-fråga: select avg( Lön ) SQL-fråga: select min( Lön ) Select avg( Lön ) from Select MIN( Lön ) from 20000 20000 75000 25000 75000 25000 Skostorlek Lön Skostorlek Lön 40 20000 40 20000 AVG räknar ut medelvärde 40 25000 30 30000 MIN räknar ut det minsta 40 25000 30 30000 select min( Lön * Skostorlek ) select min( Lön * Skostorlek ) Select min( Lön * Skostorlek ) from Select min( Lön * Skostorlek ), avg( Lön ),max( Skostorlek ), min( skostorlek ), count( Lön ) from 8000 800000 40 900000 (800000, 25000, 40, 30, 3) Skostorlek Lön 40 20000 40 25000 30 30000 COUNT räknar antal värden Skostorlek Lön 40 20000 40 25000 30 30000 select where group by Select Skostorlek, avg( Lön ) from group by Skostorlek Skostorl. 35 20000 40 25000 Skostorl. Avg( Lön ) 35 25000 GROUP BY samlar delresultat Avg( Lön ) 40 26000 Skostorl. 37.5 25500 Avg( Lön ) Skostorlek Lön 35 20000 40 25000 35 30000 40 27000 6
select where group by select where group by having Select Skostorlek, Kön, avg( Lön ) from group by Skostorlek, Kön Select Skostorlek, avg( Lön ) from group by Skostorlek having avg( Lön )>25000 Skostorl Kön Anv( Lön ) 35 Kvinna 30000 40 Kvinna 27500 40 Man 20000 Skostorl Anv( Lön ) 35 30000 40 25000 Skostorlek Kön Lön 40 Man 20000 Skostorl. Avg( Lön ) 35 20000 40 25000 Skostorl. Avg( Lön ) 35 25000 40 26000 Skostorl. Avg( Lön ) 40 26000 Skostorlek Pnr Lön 35 20000 40 Kvinna 25000 40 25000 GROUP BY samlar delresultat 35 Kvinna 30000 40 Kvinna 30000 HAVING gör urval av delresultat 35 30000 40 27000 Urval: =, <=, >= Idag Tidigare: Select * from where = Select * from where lön = 20000 Select * from where lön < 20000 Select * from where lön >= 20000 Repetition Urval: and, or Urval: like, % och _ Tidigare: Select * from where lön >= 20000 Select * from where lön >= 20000 and lön < 40000 Select * from where lön < 20000 and lön >= 40000 Select * from where lön < 20000 or lön >= 40000 Tidigare: Select * from where = Select * from where like K% Select * from where like Ka% Select * from where like K_js_ Select * from where like K 7
SQL: sum/max/min etc SQL sortera (order by) Förut: Select lön from Select sum( lön ) from Select avg( lön ) from Select max( lön ) from Select min( lön ) from Select sum( lön ) from Select avg( lön ), max( lön ), min( lön ), from Förut: Select lön from Select lön from order by lön Select namn, lön from order by lön asc Select namn, lön from order by namn desc Select * from order by namn Select * from order by startdatum Select * from where lön > 30000 order by namn Group by Select avg( lön ) from Select avg( lön ) from group by tjänst Select tjänst,avg( lön ) from group by tjänst Select tjänst, avg( lön ) from where namn = group by tjänst Idag Slut 8