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



Like dokumenter
Spørringer mot flere tabeller

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

Tabeller og enkle spørringer

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

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

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

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

Tabelldefinisjon og datamanipulering

Tilkobling og Triggere

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

Metaspråket for å beskrive grammatikk


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

1. SQL datadefinisjon og manipulering

Normalisering. Partielle avhengigheter Transitive avhengigheter Normalformer: 1NF, 2NF, 3NF, BCNF Normaliseringsstegene Denormalisering

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

EKSAMEN DATABASER

I denne leksjonen skal se på hvordan vi bruker innebygde og brukerdefinerte funksjoner.

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

1. SQL spørringer mot flere tabeller

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

SQL 3: Opprette tabeller, datainnsetting og utsnitt

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

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

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

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

INF1300 Det meste av resten av

Oppgaver som illustrerer alle teknikkene i 1.4 og 1.5

Oppgave 1 (Opprett en database og en tabell)

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

INF1300 Introduksjon til databaser

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Repetisjon: Normalformer og SQL

Datamodellering og databaser SQL, del 2

Leksjon 3. Kontrollstrukturer

EKSAMEN 6102 / 6102N DATABASER

Skilpaddefraktaler Erfaren Python PDF

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

SQL Structured Query Language. Repetisjon av select spørringer Nestede select spørringer Mengdeoperasjoner Views Flere operatorer

Datamodellering med E/R

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

INFO122 Innføring i databaser. Oblig 2. av Frode H. Pedersen, Kjartan B. Michalsen og Kristin Breivik

Datamodellering og databaser SQL, del 2

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

INF1300 Introduksjon til databaser

Datamodellering og databaser SQL, del 2

Problemer med Indre joins. Inner joins og manglende verdier med aggregater. Left Outer Join. Outer Joins. Hvor mange har kjøpt hvert produkt?

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

SQL, del 1 - select. Hva er SQL?

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

Indre select-setninger Nestede select-setninger

HØGSKOLEN I SØR-TRØNDELAG

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado

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

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

SQL: SELECT-spørringer

IN2090 Databaser og datamodellering. 08 Typer og skranker

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

Introduksjon til beslutningsstrukturer

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

IN2090 Databaser og datamodellering. 08 Typer og skranker

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

UNIVERSITETET I OSLO

Eksamen i Internetteknologi Fagkode: ITE1526

INF130: Datahåndtering og analyse

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

INF3100 V2018 Obligatorisk oppgave nr. 2

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

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

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

Oppgave 1 Datamodellering 25 %

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

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

Videregående programmering 6

Applikasjonsutvikling med databaser

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Kravspesifikasjon eksamen - personlig

MAT1030 Diskret matematikk

HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt:

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

HØGSKOLEN I SØR-TRØNDELAG

INF1300 Introduksjon til databaser

Løsningsforlag for oblig 1, databaser 2010

HØGSKOLEN I SØR-TRØNDELAG

Join. Intuitivt: Skjøte sammen to relasjoner. Intuitivt: 1. Beregn R S 2. Velg ut de tuplene som tilfredsstiller joinbetingelsen C

Systemutvikling fra kjernen og ut, fra skallet og inn

BRUKERVEILEDNING FOR NETTBUTIKKEN FORHÅNDSMELDING OG OPPLASTING AV POSTNUMMERFILER. Post med like formater og Aviser til abonnenter

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

Legg merke til at summen av sannsynlighetene for den gunstige hendelsen og sannsynligheten for en ikke gunstig hendelse, er lik 1.

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

TDT4300 Datavarehus og datagruvedri3, Våren 2014

SQL, del 1 - select. Hva er SQL?

Competence / Requirement modulen

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

LC238D Datamodellering og databaser SQL, del 1 - SELECT

mystiske med ørkenen og det som finner sted der.

Last ned Til mitt barnebarn; En utfyllingsbok - Terese Öman. Last ned

Romlig datamanipulering

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

Samtidighetsfenomener og anomalier i eksekveringsplaner. INF Ellen Munthe-Kaas 1

Transkript:

Avansert bruk av SQL Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer Begrensninger ved SQL Pensum: Kapittel 5 Databaser Leksjon 4: Avansert bruk av SQL - 1

Valguttrykk Kan blant annet brukes for å klassifisere verdiene i en kolonne. SELECT VNr, Betegnelse, CASE WHEN Pris<100 THEN Billig WHEN Pris<=500 THEN Middels ELSE Dyr END AS Prisklasse FROM Vare DBHS sjekker greinene i den rekkefølgen det står! Første betingelse som blir sann gir verdien til hele CASE-uttrykket. MySQL tilbyr en IF-funksjon som man kan nøstes: IF(Pris<100, Billig, IF(Pris<=500, Middels, Dyr )) Databaser Leksjon 4: Avansert bruk av SQL - 2

Databasetabellen Vare VNr Betegnelse Pris Kategori Antall Hylle 90693 Marsipantang 57.00 Konditor 0 B17 44939 Malerskrin, 6 farger 115.00 Hobbymaling 2 B02 15217 Kram tørrfluekorker 32.00 Fiske 213 B42 15211 Tubeflueverktøy 209.00 Fiske 39 B42 33045 Blomkarse 17.50 Blomster 206 E05 55130 Moro med marsipan 598.50 Bøker 140 C20 42615 Gipsform marihøner 106.00 Keramikk 124 B03 SELECT VNr, Betegnelse, CASE WHEN Pris<100 THEN Billig WHEN Pris<=500 THEN Middels ELSE Dyr END AS Prisklasse FROM Vare Databaser Leksjon 4: Avansert bruk av SQL - 3

Databasetabellen Vare VNr Betegnelse Pris Kategori Antall Hylle 90693 Marsipantang 57.00 Konditor 0 B17 44939 Malerskrin, 6 farger 115.00 Hobbymaling 2 B02 15217 Kram tørrfluekorker 32.00 Fiske 213 B42 15211 Tubeflueverktøy 209.00 Fiske 39 B42 33045 Blomkarse 17.50 Blomster 206 E05 55130 Moro med marsipan 598.50 Bøker 140 C20 42615 Gipsform marihøner 106.00 Keramikk 124 B03 Hva med? SELECT VNr, Betegnelse, CASE WHEN Pris<=500 THEN Middels WHEN Pris<100 THEN Billig ELSE Dyr END AS Prisklasse FROM Vare Databaser Leksjon 4: Avansert bruk av SQL - 4

Nullmerker Av og til vi vil erstatte nullmerker med en bestemt verdi. Antar kolonnen Kjønn inneholder verdiene «K» og «M». Hvis vi vil erstatte nullmerker med verdi «U» (ukjent) kan vi bruke funksjonen IFNULL SELECT KNr, Etternavn, IFNULL(Kjønn, U ) FROM Kunde Hva er feil med IF(Kjønn=NULL, U,Kjønn) Hva bør vi bruke isteden av =? Databaser Leksjon 4: Avansert bruk av SQL - 5

Utsnitt (view) Et utsnitt (view) er en «virtuell tabell». Tenk på et utsnitt som en «navngitt spørring». Eksempel: CREATE VIEW DyreVarer AS SELECT * FROM Vare WHERE Pris > 100 Vi kommer tilbake til utsnitt i kapittel 8. Databaser Leksjon 4: Avansert bruk av SQL - 6

Spørring på spørring/utsnitt Problem: Finn antall stillingsbetegnelser. Delproblem 1: Finn stillingsbetegnelsene CREATE VIEW StillingsBetegnelser AS SELECT DISTINCT Stilling FROM Ansatt Delproblem 2: Beregn antallet SELECT COUNT(*) AS Antall FROM StillingsBetegnelser Vi kan bruke navn på utsnitt i FROM. Vi bryter ned et sammensatt problem i to enklere delproblemer! Databaser Leksjon 4: Avansert bruk av SQL - 7

Delspørringer En delspørring er en spørring som forekommer som del av en spørring (hovedspørring), gjerne i en WHERE-betingelse. Finn alle som tjener mer enn gjennomsnittet: SELECT * FROM Ansatt WHERE Lønn > ( SELECT AVG(Lønn) FROM Ansatt ) Delspørringen her må returnere en tabell med nøyaktig èn rad og èn kolonne (for å kunne brukes på høyresiden av > ). Tenk at resultatet av delspørringen «limes inn» i hovedspørringen. Med gjennomsnittslønn 220.000 får vi Lønn>220.000. Hvor mange ganger må DBHS gjennomløpe tabellen Ansatt? Databaser Leksjon 4: Avansert bruk av SQL - 8

Vekselvirkende delspørringer Finn de som tjener mer enn gjennomsnittslønnen innenfor sin stillingskategori: SELECT A1.* FROM Ansatt AS A1 WHERE Lønn > ( SELECT AVG(Lønn) FROM Ansatt AS A2 WHERE A1.Stilling = A2.Stilling ) Sammenlign med spørringen «Finn alle som tjener mer enn gjennomsnittet». Hvor mange ganger må DBHS nå gjennomløpe tabellen Ansatt? Databaser Leksjon 4: Avansert bruk av SQL - 9

Operatorer for delspørringer - IN IN avgjør om en verdi er med i en mengde, og tilsvarer. Kunder med minst en tilhørende ordre: SELECT * FROM Kunde WHERE KNr IN (SELECT KNr FROM Ordre) Hva med WHERE KNr NOT IN (SELECT KNr FROM Ordre)? Vi kan også spørre mot en liste med literaler: SELECT * FROM Vare WHERE KatNr IN (2, 4, 7) Databaser Leksjon 4: Avansert bruk av SQL - 10

Operatorer for delspørringer - ALL og SOME Finn de som tjener mer enn alle sekretærer: SELECT * FROM Ansatt WHERE Lønn > ALL (SELECT Lønn FROM Ansatt WHERE Stilling='Sekretær') Hva om vi skriver SOME i stedet for ALL? Kan vi klare oss uten ALL? Tips: Bruk MAX. Delspørringen her må returnere èn kolonne (som må inneholde beløp). Databaser Leksjon 4: Avansert bruk av SQL - 11

Operatorer for delspørringer - EXISTS Finn ansatte som ikke har deltatt på noen prosjekter: SELECT A.* FROM Ansatt AS A WHERE NOT EXISTS (SELECT * FROM ProsjektDeltakelse AS PD WHERE PD.AnsNr = A.AnsNr) EXISTS sjekker om resultatet er tomt. EXISTS kan av og til erstattes av IN. La delspørringen returnere en liste med ansattnumre. Finn ansatte som har vært med på alle prosjekter. Tips: For ansatt X må det ikke finnes prosjekter som X ikke har deltatt i. Databaser Leksjon 4: Avansert bruk av SQL - 12

Begrensninger ved SQL La Slekt være en tabell med kolonner Person, Mor og Far (som alle inneholder personnr). Lag en spørring som finner mor og far for en bestemt person. Hva med bestemødre og bestefedre? PNr Navn Kjønn Far Mor 1 Lise K 2 4 2 Roar M 3 Arne M 5 4 Oda K 5 Anette K 2 Databaser Leksjon 4: Avansert bruk av SQL - 13

Begrensninger ved SQL Finner samtlige besteforeldre: SELECT S1.PNr, S1.Navn, S1.Far, S1.Mor S2.Far AS Farfar, S2.Mor AS Farmor, S3.Far AS Morfar, S3.Mor AS Mormor FROM Slekt AS S1, Slekt AS S2, Slekt AS S3 WHERE S1.Far = S2.PNr AND S1.Mor = S3.PNr PNr Navn Kjønn Far Mor 1 Lise K 2 4 2 Roar M 3 Arne M 5 4 Oda K 5 Anette K 2 Databaser Leksjon 4: Avansert bruk av SQL - 14

Begrensninger ved SQL La Slekt være en tabell med kolonner Person, Mor og Far (som alle inneholder personnr). Hva med samtlige forfedre for en gitt person? Hvor mange gjennomløp av tabellen medfører spørringene (hvis personnr ikke er ordnet på noe systematisk vis)? Det er vanskelig/umulig å løse denne oppgaven med SQL (avhenger av om DBHS støtter rekursjon). Vi bør kjenne «grensene» for SQL så vi ikke kaster bort mye tid med å løse en umulig oppgave. Kan være bedre å kombinere SQL med «generelle» programmeringsspråk. Databaser Leksjon 4: Avansert bruk av SQL - 15