USN – Nivå 3
Å hente data fra flere tabeller: Likekoblinger og gruppering
Hva er INNER JOIN?
INNER JOIN brukes når vi vil hente rader som har matchende verdier i to tabeller.
Bare de radene som oppfyller koblingsbetingelsen blir med i resultatet.
SELECT Kunde.Etternavn, Ordre.OrdreNr
FROM Kunde
INNER JOIN Ordre ON Kunde.KNr = Ordre.KNr;
I dette eksemplet vises kun kunder som faktisk har lagt inn ordre. Kunder uten ordre blir ikke med – det er derfor vi bruker INNER JOIN når vi bare vil se koblede data.
Før du begynner på oppgavene:
Start med å laste ned og kjøre SQL-skript for Hobbyhuset: hobbyhuset.sql. Legg merke til kommentarsetningen i start, fjern 3 x "--" for å opprette en ny database.
-- DROP DATABASE IF EXISTS hobbyhuset;
-- CREATE DATABASE hobbyhuset;
-- USE hobbyhuset;
⚠️ Ressurser ⚠️
Litt om store/små bokstaver i MySQL – se denne veiledningen. Se også: Spørringer mot én tabell og Spørringer mot flere tabeller.
Oppgaver:
A. Likekoblinger
- Vis hele
Vare-tabellen, men erstattKatNrmed navn på kategorien. - Vis alle ordrelinjer, men ta dessuten med varenavn (
Betegnelse) ogOrdreDato. - Utvdig SQL-koden fra forrige oppgave med en ny kolonne som viser totalbeløp for hver ordrelinje.
- Vis
OrdreNr,OrdreDatoog kundens Etternavn for alle ordrer, sortert på etternavn.
B. Gruppering og mengdefunksjoner
- Finn prisen på den dyreste varen.
- Finn prisen på dyreste vare i hver enkelt varekategori.
- Finn høyeste og laveste månedslønn i hver stillingskategori.
- Finn varekategorier som inneholder flere enn 10 varer.
C. Likekoblinger og gruppering
- Vis samlet beløp hver kunde har handlet for.
- Vis samlet beløp per ordre.
- Finn ut hvor mye hver varekategori har solgt for. Lag en sortert liste med bestselgerne først, og få med navn på kategorier i utskriften.
- Antall kvinnelige og mannlige ansatte på hvert poststed. Sorter på poststed.
D. Forstå krysskobling og likekobling
Denne er en liten sjekk på forståelsen av koblinger, kan gjerne løses med penn og papir.
Tabell Person
Id Navn AvdNr
1 Ola 102
2 Kari 100
3 Per 100
4 Lise 102
Tabell Avdeling
AvdNr AvdNavn
100 Salg
101 Lager
102 Utvikling
Tegn resultatet av disse spørringene:
SELECT * FROM Person, AvdelingSELECT * FROM Person, Avdeling WHERE Person.AvdNr = Avdeling.AvdNrSELECT * FROM Person RIGHT OUTER JOIN Avdeling ON Person.AvdNr = Avdeling.AvdNr
CREATE TABLE …), deretter INSERT. Test spørringer
(SELECT) etterpå.
Tilgjengelig etter passord.