DATABASHANTERING för programmerare Lektion 5 Mahmud Al Hakim
2 Repetition Svara på följande frågor från Northwind databasen som finns på w3schools: Visa en lista på alla kontaktpersoner? Visa en sorterad lista (A-Ö) på kontaktpersoner? Från vilka länder kommer kunderna? Hur många kunder finns det i databasen? Hur många kunder finns det i USA? Hur många kunder finns det i varje land? Visa en lista på alla kunder som har kontor i tyskland? Visa information om kunden som har ”Berglund” som efternamn? Visa en lista på kunder som inte kommer från USA? Lista land och antal kunder för länder som har mer än en kund?
3 Idag Avancerade frågor i MySQL Koppla samman två tabeller Underfrågor (nästlade frågor)
4 En Fråga? Hämta de anställdas namn och namnen på de avdelningar där de arbetar?
5 Personal Avdelning personalIDnamnbefattningavdelningID 7513 Nina Larsson Programmerare Bengt Svensson DBA Arne Persson Programmerare Camilla Blom Systemadminist ratör 128 avdelningIDnamn42Ekonomi 128FoU
6 Enkla frågor Select namn From personal;
7 Enkla frågor Select namn From avdelning;
8 Koppla samman två tabeller Kartesiska produkten Kartesiska produkten = kryssprodukt R X S Den kartesiska produkten av två relationer är kombinationen av alla rader i den första med alla rader i den andra. Select personal.namn, avdelning.namn From personal, avdelning; From personal, avdelning;
9 Personal Avdelning personalIDnamnbefattningavdelningID 7513 Nina Larsson Programmerare Bengt Svensson DBA Arne Persson Programmerare Camilla Blom Systemadminist ratör 128 avdelningIDnamn42Ekonomi 128FoU
10
11 Koppla samman två tabeller JOIN Select personal.namn, avdelning.namn From personal, avdelning Where personal.avdelningID = avdelning.avdelningID; avdelning.avdelningID;
12 Personal Avdelning personalIDnamnbefattningavdelningID 7513 Nina Larsson Programmerare Bengt Svensson DBA Arne Persson Programmerare Camilla Blom Systemadminist ratör 128 avdelningIDnamn42Ekonomi 128FoU
13
14 Använd alias ! Select personal.namn as personalnamn, avdelning.namn as avdelningnamn avdelning.namn as avdelningnamn From personal, avdelning Where personal.avdelningID = avdelning.avdelningID; avdelning.avdelningID;
15
16 Använd mer alias ! Select p.namn as personalnamn, a.namn as avdelningnamn From personal p, avdelning a Where p.avdelningID =a.avdelningID;
17 JOIN (INNER JOIN) Select p.namn, a.namn From personal p JOIN avdelning a Where p.avdelningID =a.avdelningID; Select p.namn, a.namn From personal p JOIN avdelning a ON p.avdelningID =a.avdelningID;
18 Mer JOIN Vad händer i de fall då vi vill hitta rader i en tabell som inte har någon motsvarande rad i den andra tabellen? Exempel: Sök efter anställda som inte ännu har haft några externa uppdrag. Alltså anställda som inte finns med i tabellen uppdrag.
19 Select namn from personal, uppdrag Where personal.personalid=uppdrag.personalid;
20 LEFT JOIN Select personal.namn From personal LEFT JOIN uppdrag ON personal.personalID=uppdrag.personalID;
21 LEFT JOIN Select personal.namn, klientID From personal LEFT JOIN uppdrag ON personal.personalID=uppdrag.personalID;
22 IS NULL Select personal.namn From personal LEFT JOIN uppdrag ON personal.personalID=uppdrag.personalID Where klientID IS NULL;
23 Underfrågor (nästlade frågor) Vilka programmerare har haft externa uppdrag? Steg 1 Skapa en härledd tabell Select personalID, namn From personal From personal Where befattning = ”Programmerare”; Where befattning = ”Programmerare”;
24
25 Underfrågor med härledda tabeller Steg 2 Skapa ett alias för tabellen och använd den i en annan sats precis som vilken annan tabell. SELECT programmerare.namn FROM (Select personalID, namn From personal Where befattning = ”Programmerare”) AS programmerare, uppdrag Whereprogrammerare.personalID=uppdrag.personalID;
26
27 Underfrågor för enskilda värden Vilken anställd har arbetat flest antal timmar på ett uppdrag under en viss dag? Steg 1 SELECT MAX(timmar) from uppdrag;
28 Steg 2 SELECT p.namn FROM personal p, uppdrag u WHERE p.personalID = u.personalID AND u.timmar= (SELECT MAX(timmar) from uppdrag);
29 VTC - Querying Your Data Gå till adressen: Ladda ner VTC filmer Gå igenom på ”Querying Your Data” filmer: -Sorting Retrieved Data -Specifying Numbers of Results -Joining Tables -More On Joining Tables -Data Aggregation -Queries Syntax Recap
30 Övningar Gå till adressen: Läs ”SQL Advanced” kapitlet. Läs ”SQL Advanced” kapitlet.