Leksjon 1: Løsningsforslag

Tips: Dobbeltklikk i SQL-kode for å merke teksten.

Oppgave A: Ansatt

1. Etternavn og årslønn for ansatte som tjener mer enn 700.000 kroner i året.

2. Etternavn, stilling og årslønn for alle som ikke er sekretærer og tjener mindre enn 500.000 kroner i året.

Alternativt:

Denne løsningen vil ikke vise f.eks. førstesekretærer eller salgssekretærer. Med våre eksempeldata vil ikke Ola Norheim komme med selv om inntektsgrensen ble hevet til 550.000 kroner. Prøv! For å finne stillingsbetegnelser som inneholder teksten "sekretær" som en del må vi bruke LIKE, se oppgave 8.

3. Alle stillingsbetegnelser i bruk.

4. Listen av ansatte sortert først på stilling, og deretter på etternavn.

Legg merke til hvordan "Hansen" kommer før "Lovløs" for de to som har stilling lik "Programmerer".

5. Ansattnummer og navn for alle ansatte født i 1982. Fornavn og etternavn skal stå i én kolonne adskilt av ett blankt tegn. Utskriften skal dessuten inneholde årstall for ansettelse.

6. Etternavn og månedslønn for ansatte i markedsavdelingen.

7. Ansatte tilsatt før 2010 sortert på lønn, de som tjener mest først.

Det å være tilsatt før 2010 betyr å være tilsatt før 1. januar 2010:

Alternativt kan vi bruke funksjonen YEAR, som trekker ut årstallet (som et heltall) fra en dato:

8. All informasjon om ansatte som har "sekretær" i tittelen.

UPPER i MySQL konverterer en tekst til store bokstaver. Det gjør at vi får med både de med tittel "Sekretær" (stor førstebokstav) og for eksempel "Salgssekretær".

MySQL kan være satt opp til ikke å bry seg med forskjeller på små og store bokstaver. I så fall er bruk av UPPER ikke nødvendig. Alternativt ville nok mønsteret "%ekretær" også fungert.

Noen velger å la navn på tabeller og kolonner kun bestå små bokstaver (og bruker understreking som orddeler) for å redusere muligheten for feilsituasjoner med bruk av MySQL på ulike operativsystemer.

Mer om små og store bokstaver for spesielt interesserte

9. Ansattnr og stilling til alle ansatte som er eldre enn 40 år og tjener mindre enn 450.000 kroner i året.

Hvis du vil se resultatet av DATE_ADD-uttrykket, så kan du bruke funksjonen i SELECT-delen:

Vi bruker her DATE_ADD for å legge intervallet "40 år" til fødselsdatoen, og sjekker så om resultatet er før (mindre enn) dagens dato (CURDATE står for "current date"). Prøv gjerne ut følgende i SQL-vinduet: SELECT DATE_ADD('2018-10-30', INTERVAL 5 DAY)

Oppgave B: Film

Løsninger til alle kapitteloppgaver ligger på de åpne nettsidene til læreboken:

Løsningsforslag til kapittel 2

NB! Læreboken er skrevet uavhengig av et konkret system. Vi gjentar derfor løsningene her, tilpasset MySQL.

1a. All informasjon om filmer produsert i 1988.

1b. Tittel på amerikanske filmer produsert på 1980-tallet.

Kolonnen FNr er tatt med for å skille mellom filmer med samme tittel.

1c. Komedier med aldersgrense under 10 år og spilletid under 130 minutter.

1d. Tittel på alle action- og western-filmer.

Ser du hvorfor spørreresultatet blir tomt hvis du bytter ut OR med AND?

1e. Alle produksjonsland, sortert og uten gjentakelser.

1i. Filmer med tittel som slutter på 'now'.

I MySQL kan man skrive UCASE i stedet for UPPER (to navn på samme funksjon). Normalt, så kan man faktisk også skrive spørringen slik:

Det skyldes at MySQL med standardoppsett ikke skiller mellom store og små bokstaver ved sammenligning med verdier i databasen. Les mer om dette i avsnitt 2.3.1 og 2.7 i læreboken.

1m. Antall år siden utgivelse for filmer eldre enn 60 år.