Tabeller og enkle spørringer



Like dokumenter
SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program

En liten rekap. Spørrespråk. I dag SELECT

Avansert bruk av SQL. Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer

1. SQL datadefinisjon og manipulering

1. SQL spørringer mot flere tabeller

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Tabelldefinisjon og datamanipulering

Metaspråket for å beskrive grammatikk

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

Dagens program. Kunnskapsorganisasjon og gjenfinning 1. Spørring mot databaser: SQL 2 - Spørring mot flere tabeller

SQL, del 1 - select. Hva er SQL?

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ragnar Normann 1

Databaser: Relasjonsmodellen, del I

Introduksjon til beslutningsstrukturer

Oppgave 1 (Opprett en database og en tabell)

Introduksjon til fagfeltet

Spørringer mot flere tabeller

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

ITGK - H2010, Matlab. Dagens tema : Teori - Databaser

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

SQL, del 1 - select. Hva er SQL?

Repetisjon: Normalformer og SQL

1. Relasjonsmodellen Kommentarer til læreboka

Databasedesign HVA? HVORDAN? E/R diagram. Begrepsmessig databasedesign. Logisk databasedesign. Fysisk databasedesign

LC238D Datamodellering og databaser SQL, del 1 - SELECT

INF130 INF130. INF130:Repetisjon INF130:Repetisjon 1. Tabeller og enkle spørringer. Repetisjon

Alle attributter har NULL som mulig verdi. mulige verdier for integer: NULL, 0, 1, 2, 3...

Datamodellering med E/R

EKSAMEN DATABASER

Tilkobling og Triggere

infotorg Enkel brukermanual

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

Romlig datamanipulering

INF1300 Relasjonsalgebra. Et matematisk fundament for å forstå SQL-setninger

OM DATABASER DATABASESYSTEMER

INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg»

INF1300 Det meste av resten av

Noen resultater fra kartlegginger av finansiell kunnskap i Norge. Ellen K. Nyhus Agderforskning

Databaser fra et logikkperspektiv

8. ASP med databasekopling, del I

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

UNIVERSITETET I OSLO

infotorg Enkel brukermanual

Kompleksitetsanalyse Helge Hafting Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

IST Skole Vurdering - Foresatt

Datamodellering og databaser SQL, del 2

En lett innføring i foreninger (JOINs) i SQL

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Datamodellering og databaser SQL, del 2

Eksamen i IBE Databaser H 2008

Datamodellering og databaser SQL, del 2

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

INF1300 Introduksjon til databaser

Informasjonsorganisering. Information Architecture Peter Morville & Jorge Arango Kapittel 4, 5 & 6

TDT4300 Datavarehus og datagruvedri3, Våren 2014

Relasjoner terminologi. Kopi av lysark fra forelesningen 13. oktober. Legges ut inntil notatet som samler alt om SQL kommer...

INF1300 Introduksjon til databaser

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Arbeide med : Ligningsoppgaver. i Fenistra Eiendom. Dokument kontroll

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

Miniverden og ER- modell

Andre sett obligatoriske oppgaver i INF3100 V2013

INF1300 Introduksjon til databaser

Utviklingssak/ID Resume Endring (g2) Rettet i versjon (g1) Rettet i versjon

IN2090 Introduksjon til databaser

Spørsmålskompilering del 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) INF Ellen Munthe-Kaas 1. Institutt for Informatikk

Spørsmålskompilering del 1

Utplukk og sortering. Innhold

Kenneth Torstveit, løsningsarkitekt EVRY P7 - Browser for HR

2: Hvilke verdier forekommer i attributtet filmtype i relasjonen filmitem? Lag en oversikt over filmtypene og hvor mange filmer innen hver type.

Databaser & objektorientering.

5602 DATABASER Bokmål/nynorsk. 17 (inkludert denne forsiden) Eksamensresultatene blir offentliggjort på Studentweb.

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

1 C z I G + + = + + 2) Multiplikasjon av et tall med en parentes foregår ved å multiplisere tallet med alle leddene i parentesen, slik at

Verktøy for boligkartlegging

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Verktøy for boligkartlegging

EKSAMEN 6102 / 6102N DATABASER

Utvikling fra kjernen og ut

INF3100 V2016 Obligatorisk oppgave nr. 1

Brukermanual for kommuneansvarlig og testleder

9. ASP med databasekopling, del II

INF1300 Introduksjon til databaser

Veileder for søknad om lisens for fiske i annet lands sone - Altinn

Løsningsforlag for oblig 1, databaser 2010

Eksamen i Internetteknologi Fagkode: ITE1526

INF130: Datahåndtering og analyse

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Transkript:

Tabeller og enkle spørringer Database, relasjonsdatabase Databasehåndteringssystem (DBHS) Databasesystem Tabell, kolonne, rad, datatype, verdi, primærnøkkel Utvalgsspørringer i SQL Velge ut rader Velge ut kolonner Kalkulerte kolonner Sortering Gruppering og mengdefunksjoner Jokernotasjon og intervallsøk Pensum: Kapittel 1 og 2 Databaser Leksjon 1: Tabeller og enkle spørringer - 1

Det ligger som regel en database bak Databaser Leksjon 1: Tabeller og enkle spørringer - 2

Anvendelser av databaser Noen eksempler: Handel: Varer, kunder, bestillinger, leveranser,... Bibliotek: Bøker, låntakere, lån,... Bank: Kunder, kontoer, lån, innskudd, uttak, overføringer,... Sykehus: Pasienter, journaler, medisiner, ansatte, turnus,... Kart: Eiendommer, bygninger, veier, rørsystemer,... Kino: Filmer, forestillinger, reservasjoner,... Forskning: Spørreundersøkelse, respondenter, svar,... Alle (?) virksomheter bruker databaser. Mange systemer må være i drift 24/7 (virksomhetskritiske) Vår penger er jo bare et sett av data i noen databaser!!! Ved å se på hva databasen inneholder lærer vi mye om virksomheten. Databaser Leksjon 1: Tabeller og enkle spørringer - 3

Hvor starter man? Fysisk er en datamaskin komplisert. Abstrakt logisk er den enkel: Ut-enhet (skjerm) Inn-enhet (tastatur) Beregningsenhet Minne Platelager Harddisk En datamaskin kan to ting: Lagre data og utføre programmer. Vi tar utgangspunkt i datamaskinen som lagringsenhet. Hvilke data må en virksomhet lagre for å fungere? Databaser Leksjon 1: Tabeller og enkle spørringer - 4

Oppgavene til et databasesystem Et databasesystem har som oppgave å lagre store mengder data over lang tid på en sikker måte, og å tilby hensiktsmessige mekanismer for å gjenfinne data effektivt og korrekt, selv når et stort antall brukere jobber mot databasen samtidig og det oppstår kritiske situasjoner som diskkrasj og strømbrudd. I tillegg må databasesystemer kunne kommunisere med andre programsystemer, blant annet verktøy for utvikling av databaseapplikasjoner. DBHS = DataBaseHåndteringsSystem (engelsk: DBMS, eks: Access) SQL er et språk for å jobbe med databaser (skrive spørringer). Databasesystem SQL DBHS Database Bruker Databaser Leksjon 1: Tabeller og enkle spørringer - 5

Viktige begreper En database er en samling strukturerte data som blir brukt til et bestemt formål. Et databasehåndteringssystem (DBHS) er et verktøy for å lagre og gjenfinne store mengder delte data over lang tid på en sikker og effektiv måte for mange samtidige brukere. Eksempler: MySQL, MariaDB, Access, SQL Server, Oracle, DB2, Databasesystem = DBHS + database SQL er et språk for å kommunisere med databasesystemer. Brukere: Databaseadministrator (DBA) har ansvaret for den daglige driften av et databasesystem. Utviklere Sluttbrukere Databaser Leksjon 1: Tabeller og enkle spørringer - 6

Et papirskjema Etternavn: Hansen Fornavn: Hans Ansatt dato: 23.08.2006 Stilling: Programmerer Lønn: 325.000 Prosjektdeltakelse siste år: Prosjektkode Timer P1002 44 P1007 25 P1012 10 Databaser Leksjon 1: Tabeller og enkle spørringer - 7

Tabellen Ansatt AnsattNr Etternavn Fornavn AnsattDato Stilling Lønn 1 Veum Varg 01.01.1992 Løpegutt kr 183 000.00 2 Stein Trude 10.10.2000 DBA kr 270 700.00 3 Dudal Inger-Lise 24.12.1988 Sekretær kr 299 000.00 4 Hansen Hans 23.08.2006 Programmerer kr 325 000.00 5 Bjørnsen Henrik 01.01.2000 Tekstforfatter kr 375 000.00 6 Gredelin Sofie 18.05.1998 Underdirektør kr 625 850.00 7 Zimmermann Robert 17.05.1995 Regnskapsfører kr 375 000.00 8 Nilsen Lise 03.04.2002 Direktør kr 675 340.00 11 Fosheim Katinka 13.09.2011 Selger kr 420 000.00 13 Lovløs Ada 12.08.2005 Programmerer kr 384 250.00 16 Ibsen Bjørnstjerne 02.01.2008 Tekstforfatter kr 346 000.00 17 Fleksnes Marve 17.05.2009 Lagerleder kr 320 120.00 20 Felgen Reodor 12.12.2001 Sykkelreparatør kr 279 500.00 23 Karius Jens 13.12.2001 Salgssekretær kr 280 390.00 29 Wirkola Gabriel 21.04.2009 Sekretær kr 255 000.00 Databaser Leksjon 1: Tabeller og enkle spørringer - 8

Tabellen Prosjekt ProsjektNr Budsjett Leder Start Slutt 1001 kr 15 000.00 20 12.01.2011 12.03.2011 1002 kr 750 000.00 8 23.06.2011 23.07.2011 1007 kr 125 000.00 2 12.06.2012 1009 kr 500 000.00 20 01.01.2012 1012 kr 10 000.00 4 10.07.2012 1020 kr 900 000.00 8 23.07.2011 01.09.2011 Databaser Leksjon 1: Tabeller og enkle spørringer - 9

Ansatte og prosjekter Prosjekt 1047 Prosjekt 1055 Prosjekt 1063 Prosjekt 1056 En ansatt kan være med i 0, 1 eller mange prosjekter. Et prosjekt kan ha 0, 1 eller mange deltakere. Det er ikke hensiktsmessig å lagre prosjekter i Ansatt, eller deltakere i Prosjekt. Databaser Leksjon 1: Tabeller og enkle spørringer - 10

Tabellen ProsjektDeltakelse Hvilke ansatte har jobbet på hvilke prosjekter og hvor mange timer har de jobbet? ProsjektDeltakelse er en koblingstabell. Tabellen representerer et forhold mellom? ProsjektNr AnsattNr AntTimer 1001 1 12 1002 4 44 1002 8 20 1002 13 125 1002 20 2 1007 4 25 1007 11 20 1009 2 5 1009 17 10 1009 20 23 1012 4 10 1020 1 20 1020 8 35 1020 17 125 Databaser Leksjon 1: Tabeller og enkle spørringer - 11

Databasetabeller Alle verdier i en kolonne fra samme domene / datatype. OBS! Bare enkle verdier! Rad Kardinalitet = antall rader (her: 5) Grad = antall kolonner (her: 3) Kolonne Verdi Databaser Leksjon 1: Tabeller og enkle spørringer - 12

Nullmerker Legg merke til at det mangler noen verdier i tabellen Prosjekt. Vi kaller dette for nullmerker. Nullmerker kan skyldes at vi har glemt å registrere data, at vi ennå ikke kjenner til den korrekte verdien, eller at det ikke gir mening å registrere data. Nullmerker er ikke verdier. Nullmerker kan skape problemer! Hvorfor? Databaser Leksjon 1: Tabeller og enkle spørringer - 13

Relasjonsdatabase = «tabelldatabaser» En databasetabell kan betraktes som en matematisk relasjon (mer om dette i kapittel 6 og i MNF130). En relasjonsdatabase består (logisk sett) av en samling tabeller (endelige relasjoner). Andre typer av databaser: Hierarkiske databaser Nettverksdatabaser Objektorienterte databaser Objektrelasjonelle databaser Logiske databaser NoSQL-databaser (kanskje seinere i april/mai) Databaser Leksjon 1: Tabeller og enkle spørringer - 14

SQL er et «abstrakt» programmeringsspråk - vi sier hva vi ønsker mer enn hvordan det skal beregnes. En utvalgsspørring: SELECT AnsattNr, Etternavn, Lønn SQL WHERE Lønn < 280000 Hva må DBHS gjøre? Hva må DBHS vite? SELECT, FROM og WHERE er reserverte ord i SQL: De har en spesiell betydning. Databaser Leksjon 1: Tabeller og enkle spørringer - 15

Spørreresultat AnsattNr Etternavn Lønn 1 Veum kr 183 000.00 2 Stein kr 270 700.00 20 Felgen kr 279 500.00 29 Wirkola kr 255 000.00 En utvalgsspørring tar tabeller som «inndata» og leverer spørreresultater som «utdata». Spørreresultater er også på «tabellform». SQLspørring Databaser Leksjon 1: Tabeller og enkle spørringer - 16

Datamaskiner og formelle språk SQL (i motsetning til norsk eller fransk) er et formelt språk. Det er definert presise regler som avgjør om en setning er lovlig eller ikke. Datamaskiner har ikke evnen til å bruke sunn fornuft. Den minste skrivefeil fører til feilmelding eller uventet resultat. Eksempel: Maskinen forstår ikke at du mener «Etternavn» hvis du skriver «Etternavnet». God vane: Les feilmeldinger og lær deg hva de betyr! Databaser Leksjon 1: Tabeller og enkle spørringer - 17

Velge ut kolonner Når vi kun er interessert i noen av kolonnene: SELECT AnsattNr, Etternavn Databaser Leksjon 1: Tabeller og enkle spørringer - 18

Resultat av spørring: SELECT AnsattNr, Etternavn Hva få vi ved denne spørring? SELECT Etternavn, AnsattNr Databaser Leksjon 1: Tabeller og enkle spørringer - 19

Etternavn AnsattNr Veum 1 Stein 2 Dudal 3 Hansen 4 Bjørnsen 5 Gredelin 6 Zimmermann 7 Nilsen 8 Resultat av spørring: SELECT Etternavn, AnsattNr Er det det vi vil ha? Nei, vi ønsker de sortert! Fosheim 11 Lovløs 13 Ibsen 16 Fleksnes 17 Felgen 20 Karius 23 Wirkola 29 Databaser Leksjon 1: Tabeller og enkle spørringer - 20

Sortering Sortert navneliste: SELECT Etternavn, AnsattNr ORDER BY Etternavn Flere sorteringskriterier: SELECT Etternavn, Stilling, Lønn ORDER BY Stilling ASC, Lønn DESC ASC gir stigende sortering (standard) og DESC synkende. Databaser Leksjon 1: Tabeller og enkle spørringer - 21

SELECT...ORDER BY Stilling ASC, Lønn DESC Etternavn Stilling Lønn Stein DBA kr 270 700.00 Nilsen Direktør kr 675 340.00 Fleksnes Lagerleder kr 320 120.00 Veum Løpegutt kr 183 000.00 Lovløs Programmerer kr 384 250.00 Hansen Programmerer kr 325 000.00 Zimmermann Regnskapsfører kr 375 000.00 Karius Salgssekretær kr 280 390.00 Dudal Sekretær kr 299 000.00 Wirkola Sekretær kr 255 000.00 Fosheim Selger kr 420 000.00 Felgen Sykkelreparatør kr 279 500.00 Bjørnsen Tekstforfatter kr 375 000.00 Ibsen Tekstforfatter kr 346 000.00 Gredelin Underdirektør kr 625 850.00 Databaser Leksjon 1: Tabeller og enkle spørringer - 22

Velge ut kolonner Når vi vil ha alle kolonnene: SELECT AnsattNr, Etternavn, Fornavn, AnsattDato, Stilling, Lønn Forkortet skrivemåte: SELECT * Resultat er hele ansatt-tabellen. Merk at man ved bruk av stjerne kan ikke kontrollere rekkefølgen av kolonnene. Databaser Leksjon 1: Tabeller og enkle spørringer - 23

Velge ut kolonner Hva er problemet her? SELECT Stilling Databaser Leksjon 1: Tabeller og enkle spørringer - 24

Stilling Løpegutt DBA Sekretær Programmerer Tekstforfatter Underdirektør Regnskapsfører Direktør SELECT Stilling Vi få like mange rader som det er i ansatt-tabellen! Vi kan derfor få duplikater! Hvilket? Selger Programmerer Tekstforfatter Lagerleder Sykkelreparatør Salgssekretær Sekretær Databaser Leksjon 1: Tabeller og enkle spørringer - 25

Stilling Løpegutt DBA Sekretær Programmerer Tekstforfatter Underdirektør Regnskapsfører Direktør Selger Programmerer Tekstforfatter Lagerleder Sykkelreparatør Salgssekretær Sekretær SELECT Stilling Vi få like mange rader som det er i ansatt-tabellen! Vi kan derfor få duplikater! Hvilket? For å unngå dette skriver vi: SELECT DISTINCT Stilling Stilling Løpegutt DBA Sekretær Programmerer Tekstforfatter Underdirektør Regnskapsfører Direktør Selger Tekstforfatter Lagerleder Sykkelreparatør Salgssekretær Databaser Leksjon 1: Tabeller og enkle spørringer - 26

Velge ut rader Når vi vil plukke ut rader som oppfyller en gitt betingelse. SELECT * WHERE Lønn < 280000 En betingelse er et uttrykk som er sant eller galt (usant). Databaser Leksjon 1: Tabeller og enkle spørringer - 27

SELECT Etternavn... WHERE Lønn < 280000 AnsattNr Etternavn Fornavn AnsattDato Stilling Lønn 1 Veum Varg 01.01.1992 Løpegutt kr 183 000.00 2 Stein Trude 10.10.2000 DBA kr 270 700.00 3 Dudal Inger-Lise 24.12.1988 Sekretær kr 299 000.00 4 Hansen Hans 23.08.2006 Programmerer kr 325 000.00 5 Bjørnsen Henrik 01.01.2000 Tekstforfatter kr 375 000.00 6 Gredelin Sofie 18.05.1998 Underdirektør kr 625 850.00 7 Zimmermann Robert 17.05.1995 Regnskapsfører kr 375 000.00 8 Nilsen Lise 03.04.2002 Direktør kr 675 340.00 11 Fosheim Katinka 13.09.2011 Selger kr 420 000.00 13 Lovløs Ada 12.08.2005 Programmerer kr 384 250.00 16 Ibsen Bjørnstjerne 02.01.2008 Tekstforfatter kr 346 000.00 17 Fleksnes Marve 17.05.2009 Lagerleder kr 320 120.00 20 Felgen Reodor 12.12.2001 Sykkelreparatør kr 279 500.00 23 Karius Jens 13.12.2001 Salgssekretær kr 280 390.00 29 Wirkola Gabriel 21.04.2009 Sekretær kr 255 000.00 Databaser Leksjon 1: Tabeller og enkle spørringer - 28

Bruk parenteser! Vi ønsker å finne sekretærer/dba som tjener mer enn 280.000 kroner i året. SELECT * WHERE Lønn > 280000 AND Stilling = 'Sekretær' OR Stilling = DBA' Kan spørringen tolkes på flere måter? Oppnår vi det vi vil? Databaser Leksjon 1: Tabeller og enkle spørringer - 29

Jokernotasjon og intervallsøk Finn alle med etternavn som begynner på F: SELECT * WHERE Etternavn>='F'AND Etternavn<'G' Jokernotasjon er mer elegant her: SELECT * WHERE Etternavn LIKE 'F%' Hva med Etternavn = 'F%'? Finn alle som har etternavn som slutter på 'sen'! Access i standardoppsett bruker * i stedet for %. Databaser Leksjon 1: Tabeller og enkle spørringer - 30

Kalkulerte kolonner Det er lov å bruke uttrykk i SELECT-delen: SELECT AnsattNr, Etternavn, Lønn/12 AS [Lønn pr måned] Det er ikke nødvendig å lagre både årslønn og månedslønn! Lønn/12 er et uttrykk. For å få en meningsfull overskrift i utskriften gir vi denne kolonnen et navn. Access: [...] brukes rundt navn som inneholder blanke tegn. Oracle: Bruker ikke AS. Databaser Leksjon 1: Tabeller og enkle spørringer - 31

Funksjoner Kommatall kan konverteres til valuta: SELECT AnsattNr, Etternavn, CCur( Lønn/12 ) AS [Lønn pr måned] CCur (Convert to Currency) er et eksempel på en funksjon (Access) CCur En funksjon kan ha flere argumenter, men bare én returverdi. Til hver datatype finnes det mange funksjoner. Databaser Leksjon 1: Tabeller og enkle spørringer - 32

Operatorer og uttrykk Operatorer: Aritmetiske: *, /, +, - Sammenligning: >,<, =, >=, <=, <, <> Jokernotasjon: LIKE Test for nullmerke: IS NULL Boolske: NOT, AND, OR Intervalltest: BETWEEN AND Vi kan bygge opp uttrykk fra literaler (konstanter), kolonnenavn, funksjoner og operatorer: (Stilling LIKE 'S*') AND ((Lønn/12)>15000) Databaser Leksjon 1: Tabeller og enkle spørringer - 33

Sammensatte navn Vi har ofte kolonner med samme navn i to tabeller. Eksempel: AnsattNr i tabellen Ansatt og AnsattNr i tabellen ProsjektDeltakelse. Når vi jobber med flere tabeller må vi av og til bruke sammensatte navn. Det er alltid lov å bruke sammensatte navn: SELECT Ansatt.AnsattNr WHERE Ansatt.Lønn > 280000 Databaser Leksjon 1: Tabeller og enkle spørringer - 34

Dato og tid i Access Hvor lenge har de ansatte vært i bedriften (antall år)? SELECT Etternavn, DateDiff('yyyy',AnsattDato,Date()) Gjeldende tid: Date, Year, Month, Hour,... Regne med datoer: DateAdd, DateDiff Sammenligne datoer: <, >, <=, >=, = Literaler: '17.05.2012' Det er forskjeller mellom Access SQL og standard SQL når det gjelder funksjonsbibliotek, se vedlegg i boka. Databaser Leksjon 1: Tabeller og enkle spørringer - 35

Zooming og aggregerte data Ola Nordmann bor i Hansegata 3, Andebu og tjener 320.000 kr. pr. år. Zoomer vi langt nok inn i kartet kan vi vise egenskaper ved Ola. Zoomer vi ut ønsker vi aggregerte data: AVG, MIN, MAX, SUM, Databaser Leksjon 1: Tabeller og enkle spørringer - 36

Funksjoner Operasjoner på enkeltverdier: Eksempel: strengfunksjoner Operasjoner på verdisamlinger: AVG(kolnavn) gjennomsnitt SUM(kolnavn) sum COUNT(*) antall MIN(kolnavn) minimum MAX(kolnavn) maksimum Databaser Leksjon 1: Tabeller og enkle spørringer - 37

Mengdefunksjoner Gjennomsnittslønn: SELECT AVG(Lønn) AS Gjennomsnittslønn Hvordan finner vi samlede lønnsutgifter? Hvordan finner vi gjennomsnittslønn for sekretærer? Antall ansatte: SELECT COUNT(*) Hva blir resultatet av denne spørringen: SELECT SUM(Lønn) / COUNT(*) Hva om vi har nullmerker i kolonnen Lønn? SELECT SUM(Lønn) / COUNT(Lønn) Databaser Leksjon 1: Tabeller og enkle spørringer - 38

Gruppering Finn gjennomsnittlønn for hver stillingskategori. SELECT Stilling, AVG(Lønn) GROUP BY Stilling Stilling har kun få ulike verdier! Grupperingskolonner må være med i resultatet. Gruppering brukes ofte sammen med mengdefunksjoner. Databaser Leksjon 1: Tabeller og enkle spørringer - 39

Gruppebetingelse (HAVING) Hva blir resultatet her? SELECT Stilling, AVG(Lønn), COUNT(*) GROUP BY Stilling HAVING AVG(Lønn) > 280000 HAVING på grupper svarer til WHERE på rader. Merk: Det er ikke lov å bruke mengdefunksjoner i WHERE-betingelser. Databaser Leksjon 1: Tabeller og enkle spørringer - 40

Gruppebetingelser og radbetingelser Betingelser på rader og på grupper: SELECT Stilling, AVG(Lønn), COUNT(*) WHERE Year(AnsattDato) > 2002 GROUP BY Stilling HAVING AVG(Lønn) > 280000 Hvorfor kan ikke de to betingelsene slås sammen? Hvordan kan DBHS utføre spørringen? Databaser Leksjon 1: Tabeller og enkle spørringer - 41

Oppbygging av utvalgsspørringer Utvalgsspørringer (SELECT-spørringer) mot én tabell følger dette «mønsteret»: SELECT FROM WHERE GROUP BY HAVING ORDER BY Hvilke kolonner skal med? Hva heter tabellen? Hvilke rader skal med? Gruppere på hvilken kolonne? Hvilke grupper skal med? Sortere på hvilken kolonne? Ikke alle delene må være med i alle spørringer, og etter hvert skal vi se at spørringene også kan være mer kompliserte. Blant annet kan vi lage spørringer mot flere tabeller. SELECT er bare én blant mange SQL-kommandoer Databaser Leksjon 1: Tabeller og enkle spørringer - 42