Title: DATABASHANTERING f
1DATABASHANTERINGför programmerare
- Lektion 5
- Mahmud Al Hakim
- mahmud_at_hakimdata.se
- www.hakimdata.se
2Repetition
- Svara på följande frågor från Northwind databasen
som finns på w3schools http//www.w3schools.com/
sql/sql_tryit.asp - 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?
3Idag Avancerade frågor i MySQL
- Koppla samman två tabeller
- Underfrågor (nästlade frågor)
4En Fråga?
- Hämta de anställdas namn och namnen på de
avdelningar där de arbetar?
5Personal Avdelning
personalID namn befattning avdelningID
7513 Nina Larsson Programmerare 128
9842 Bengt Svensson DBA 42
6651 Arne Persson Programmerare 128
9006 Camilla Blom Systemadministratör 128
avdelningID namn
42 Ekonomi
128 FoU
6Enkla frågor
- Select namn
- From personal
7Enkla frågor
- Select namn
- From avdelning
8Koppla samman två tabellerKartesiska 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
9Personal Avdelning
personalID namn befattning avdelningID
7513 Nina Larsson Programmerare 128
9842 Bengt Svensson DBA 42
6651 Arne Persson Programmerare 128
9006 Camilla Blom Systemadministratör 128
avdelningID namn
42 Ekonomi
128 FoU
10(No Transcript)
11Koppla samman två tabellerJOIN
- Select personal.namn, avdelning.namn
- From personal, avdelning
- Where personal.avdelningID
- avdelning.avdelningID
12Personal Avdelning
personalID namn befattning avdelningID
7513 Nina Larsson Programmerare 128
9842 Bengt Svensson DBA 42
6651 Arne Persson Programmerare 128
9006 Camilla Blom Systemadministratör 128
avdelningID namn
42 Ekonomi
128 FoU
13(No Transcript)
14Använd alias !
- Select personal.namn as personalnamn,
- avdelning.namn as avdelningnamn
- From personal, avdelning
- Where personal.avdelningID
- avdelning.avdelningID
15(No Transcript)
16Använd mer alias !
- Select p.namn as personalnamn, a.namn as
avdelningnamn - From personal p, avdelning a
- Where p.avdelningID a.avdelningID
17JOIN (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
18Mer 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.personaliduppdrag.personalid
20LEFT JOIN
Select personal.namn From personal LEFT JOIN
uppdrag ON personal.personalIDuppdrag.personalID
21LEFT JOIN
Select personal.namn, klientID From personal
LEFT JOIN uppdrag ON personal.personalIDuppdrag.p
ersonalID
22IS NULL
- Select personal.namn
- From personal LEFT JOIN uppdrag
- ON personal.personalIDuppdrag.personalID
- Where klientID IS NULL
23Underfrågor (nästlade frågor)
- Vilka programmerare har haft externa uppdrag?
- Steg 1Skapa en härledd tabellSelect
personalID, namn - From personal
- Where befattning Programmerare
24(No Transcript)
25Underfrågor med härledda tabeller
- Steg 2Skapa 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
- Where
- programmerare.personalIDuppdrag.personalID
26(No Transcript)
27Underfrågor för enskilda värden
- Vilken anställd har arbetat flest antal timmar på
ett uppdrag under en viss dag? - Steg 1SELECT 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)
29VTC - Querying Your Data
- Gå till adressen http//www.alhakim.org
- 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 adressenhttp//www.w3schools.com/sql/
- Läs SQL Advanced kapitlet.