Relasjoner terminologi

Like dokumenter
SQL Structured Query Language

SQL Structured Query Language

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

INF1300 Introduksjon til databaser: SQL Structured Query Language

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

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

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

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

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

SQL. SQL-standarder. Flere standarder: ANSI SQL SQL2 (SQL-92) SQL3 (SQL-99) = SQL2 + objekt-relasjonelle egenskaper mm

Integritetsregler i SQL

Integritetsregler i SQL. Primærnøkler

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

Integritetsregler i SQL

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

INF1300 Introduksjon til databaser

Repetisjon: Normalformer og SQL

INF1300 Introduksjon til databaser

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

UNIVERSITETET. triggere og views. Institutt for Informatikk. INF Arne Maus 1

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

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

Metaspråket for å beskrive grammatikk

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

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

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

Ekstramateriale: Eksempel på PostgreSQL 8.4 og SQL:1999 (ikke pensum 2012)

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

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

Databaser: Relasjonsmodellen, del I

Oppgave 1 (Opprett en database og en tabell)

SQL: SELECT-spørringer

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner

INF1300 Introduksjon til databaser

Indre select-setninger Nestede select-setninger

Oppgaver Oppgave a: Sett opp mulige relasjoner

Utvikling fra kjernen og ut

SQL: SELECT-spørringer

Relasjonsalgebraen. Algebra

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

IN2090 Databaser og datamodellering. 08 Typer og skranker

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

1. SQL datadefinisjon og manipulering

SQL SELECT-FROM-WHERE. Skjemadefinisjon og datainnsetting i SQL. Semantikk bak ein-relasjons-spørring

Datamodellering og databaser SQL, del 2

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas

1. Innføring i bruk av MySQL Query Browser

Utvikling fra kjernen og ut

Spørsmålskompilering del 1

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

Spørsmålskompilering del 1

Bruke SQL fra Python. Med Psycopg2

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

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

SQL for INF1300. Stein Michael Storleer 7. november 2014

Miniverden og ER- modell

SQL 3: Opprette tabeller, datainnsetting og utsnitt

IN2090 Databaser og datamodellering 07 Datamanipulering

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

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG

INF1300 Introduksjon til databaser

IN2090 Introduksjon til databaser

IN2090 Introduksjon til databaser

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

INF3100 V2018 Obligatorisk oppgave nr. 2

ORDBMS og OODBMS i praksis

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk INF Ellen Munthe-Kaas

Løsningsforlag for oblig 1, databaser 2010

HØGSKOLEN I SØR-TRØNDELAG

SQL, del 1 - select. Hva er SQL?

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

INF1300 Introduksjon til databaser

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Transkript:

Relasjoner terminologi Kopi av lysark fra forelesningen 1. september. Dette er utdrag fra et notat som snart blir publisert. Dette notatet egner seg bedre til repetisjon og selvstudium enn disse arkene.

SQL Structured Query Language Litt tabellterminologi Definere tabeller Fylle tabeller med data Hente data fra tabeller select-from-where distinct order by

Relasjoner terminologi relasjonsnavn Personale attributt relasjonsskjema Ans# Navn Fdato Pers# Avd 10 9 8 12 Iziz Ehab Bjørn Liv 290264 131172 39201 35797 nil Knøttene 150571 34322 Tintin 031079 39201 nil tuppel/ forekomst tabell = relasjon instans/forekomster

Lage en tabell med SQL create table R (A 1 D 1 [S 1 ],... A n D n [S n ], [liste av skranker] ); R er navnet på relasjonen/tabellen A i er et atributt D j er et domene S k er en skranke [ ] betyr at dette leddet er en valgfri del av setningen

Lage en tabell med SQL forenklet uten skranker create table R ( A 1 D 1, A 2 D 2,... A n D n ); R er navnet på relasjonen/tabellen A i er et atributt D j er et domene

create eksempel create table EmneStudent ( brukernavn varchar( 8), emnekode varchar(7), gruppenr integer, eksamensdato date ) ;

create eksempel create table EmneStudent ( brukernavn varchar( 8), emnekode varchar(7), gruppenr integer, eksamensdato date ) ; Legg merke til likheten med en klassedefinisjon i Java: public class EmneStudent { String brukernavn ; String emnekode; int gruppenr ; Date eksamensdato; }

Datatyper i PostgreSQL datatype forklaring integer heltall real flyttall numeric(n,d) n desimale sifre, d etter desimalpunktum char(n) tekst med fast lengde varchar(n) tekst med variabel lengde boolean boolsk verdi date dato time klokkeslett timestamp dato og klokkeslett bit(n) bitstreng med fast lengde bit varying(n) bitstreng med variabel lengde

Datatyper sortert etter hyppighet INF1300 datatype varchar(n) int integer date char(n) boolean real numeric(n,d) time timestamp bit(n) bit varying(n) forklaring tekst med variabel lengde heltall dato tekst med fast lengde boolsk verdi flyttall n desimale sifre, d etter desimalpunktum klokkeslett dato og klokkeslett bitstreng med fast lengde bitstreng med variabel lengde

create nytt eksempel Student(bnavn, uid, navn, hjemmeomr) bnavn er studentens brukernavn uid er brukerens userid (unik i unix brukerdatabase) hjemmeomr er stien til brukerens hjemmeområde create table Student ( bnavn char( 8) primary key, uid int unique, navn varchar(80) not null, hjemmeomr varchar(40) ) ;

Legge inn data i tabeller insert into R(A 1, A 2,..., A k ) values (v 1, v 2,..., v k ); Attributtlisten kan sløyfes hvis den dekker samtlige attributter i R og følger attributtenes default rekkefølge

create to tabeller til Emner(emnekode, emnenavn) StudTarEmne(bnavn, emne) create table StudTarEmne ( bnavn char( 8), emne varchar(12) ) ; create table Emner ( emnekode varchar(12) primary key, emnenavn varchar(80), semester char( 4) check ( semester= spring or semester= f a l l ) ) ;

Primærnøkler Kan deklareres i create table sammen med primærnøkkelattributtet (bare hvis attributtet utgjør primærnøkkelen alene) create table Emner ( emnekode varchar(12) primary key,... ) ; Kan deklareres separat i create table etter attributtdeklarasjonene create table Emner ( emnekode varchar(12),... primary key(emnekode) ) ;

Primærnøkler, regler Maks én primærnøkkeldeklarasjon pr. relasjon Flere unike attributter, bruk skranken unique Konsekvenser av deklarasjonen: To tupler i relasjonen får ikke stemme overens i alle attributtene i primærnøkkelen. Forsøk på brudd ved insert eller update skal avvises av DBMSet Attributtene i primærnøkkelen får ikke inneholde null Dette må sjekkes av systemet ved hver insert og hver update

Skranke på ett attributt not null create table Ansatt (... Fdato int not null,..); Konsekvenser: Kan ikke sette inn tuppel med verdien null i attributtet Kan ikke endre verdien til null senere check create table Ansatt (... T i t t e l varchar(15) check ( T i t t e l= Selger or T i t t e l= Konsulent or...... ) ; Angir en betingelse på attributtet. Sjekkes ved hver endring av attributtets verdi

insert (en gang til) insert: Innsetting av nye data insert into R(A 1, A 2,..., A k ) values (v 1, v 2,..., v k ); Attributtlisten kan sløyfes hvis den dekker samtlige attributter i R og følger attributtenes default rekkefølge

Hente/skrive ut data fra tabeller select [distinct] ATTRIBUTTLISTE from NAVNELISTE [where WHERE-BETINGELSE] [group by GRUPPERINGSATTRIBUTTER [having HAVING-BETINGELSE ] ] [order by ATTRIBUTT [asc desc] [, ATTRIBUTT [asc desc] ]... ]; [ ] betyr at dette leddet er en valgfri del av setningen, så i dag skal vi bare se på denne delen:

Hente/skrive ut data fra tabeller select [distinct] ATTRIBUTTLISTE from NAVNELISTE [where WHERE-BETINGELSE] [order by ATTRIBUTT [asc desc] [, ATTRIBUTT [asc desc] ]... ]; [ ] betyr at dette leddet er en valgfri del av setningen, så i sin enkleste form ser setningen slik ut:

Hente/skrive ut data fra tabeller select ATTRIBUTTLISTE from NAVNELISTE ; Eksempel: select emnekode, emnenavn, from Emne ; samme som: select from Emner ; semester

Select-setningens enkeltdeler select Angir hvilke attributter som skal vises i svaret distinct Fjerner flerforekomster (duplikater) av svartuplene from Navn på de relasjonene spørringen refererer til where Seleksjonsbetingelse (kan inneholde en eller flere join-betingelser) order by Ordner tuplene i henhold til angitte kriterier

Select-setningen Typisk utseende: select [distinct] A 1, A 2,..., A j from R 1, R 2,..., R k where C; hvor R 1, R 2,..., R k er relasjonsnavn A 1,..., A j er attributter fra R 1, R 2,..., R k C er en betingelse

select eksempel 1 Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave: Finn navn på de ansatte som er ansatt etter 2003. (Det kan være flere ansatte som har samme navn.) Løsning select distinct Navn from Ansatt where AnsDato > date 2003 12 31

Merknader til select select (SQL) skiller ikke mellom store og små bokstaver, unntatt i tekststrenger select beregner bager (med unntak av noen av operatorene) En bag er en mengde med tupler der samme tuppel kan forekomme flere ganger. (Like tupler fjernes eventuelt ved å bruke distinct.)

select eksempel 2 Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave Finn navn og startdato for alle prosjekter bestilt av kunden «Pust og pes AS». Sorter dem slik at det nyeste prosjektet kommer først. Løsning select Pnavn, StartDato from Kunde K, Prosjekt P where Knavn = Pust og pes AS and K. KId = P. KId order by StartDato desc;

Seleksjons- og join-betingelser La oss se nærmere på løsningen fra forrige lysark: select Pnavn, StartDato from Kunde K, Prosjekt P where Knavn = Pust og pes AS and K. KId = P. KId order by StartDato desc; where-betingelsen består av to deler: Knavn = Pust og pes AS Dette leddet kalles en seleksjonsbetingelse Det plukker ut forekomster i Kunde (her trolig bare en) K.KId = P.Kid Dette leddet kalles en join-betingelse Det kobler sammen forekomster fra Kunde med forekomster i Prosjekt forutsatt at verdiene i attributtene KId og Kid er like

Uttrykk i betingelser 1 where-betingelsen er et boolsk uttrykk hvor atomene har en av følgende former: Verdisammenlikning: P op Q P og Q må ha samme domene, minst en av dem må være et attributt, den andre kan være en konstant op {=, <, >, <=, >=, <>, like} (like er bare lov når Q er en konstant tekststreng) null-test: P is null eller P is not null Relasjonssammenlikning: exists, in, all, any (Disse tar vi for oss i en senere forelesning)

Uttrykk i betingelser 2 Spesialregler for sammenlikning av strenger : Leksikografisk ordning: s < t, s > t, s <= t, s >= t Sammenlikning: s = t, s <> t Mønstergjenkjenning: s like p p er et mønster hvor % matcher en vilkårlig sekvens (null eller flere tegn) _ matcher ett vilkårlig tegn

Tekstmønstre I SQL kan vi bruke like for å sammenligne et tekst-attributt med et tekstmønster Et tekstmønster er en tekstkonstant hvor to tegn, kalt jokertegn, har spesiell betydning: _ (understrekning) passer med ett vilkårlig tegn % passer med en vilkårlig tekststreng (null eller flere tegn) Eksempel 1: select firstname from person where firstname like O_a ; passer med Oda og Ola og O4a, men ikke med Olga Eksempel 2: select firstname from person where firstname like O%a ; passer med alle navn som begynner med «O» og slutter med «a», som Ola, Olga, Othilia, Oda, Ofjhwskjfhkxxa

Uttrykk i betingelser 3 Datoer og tidspunkter: Dato: date yyyy-mm-dd Tidspunkt: time hh:mm, time hh:mm:ss Tidspunkt med finere gradering enn sekund: time hh:mm:ss.ccc Tidspunkt før GMT: time hh:mm:ss+hh Tidspunkt etter GMT: time hh:mm:ss-hh Dato og tid: timestamp yyyy-mm-dd hh:mm:ss

select eksempel 3 Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg» Løsning select distinct Navn, T i t t e l from Ansatt A, Timeliste T, Prosjekt P where Pnavn = Vintersalg and P. PId = T. PId and T. AId = A. AId ; Her består join-betingelsen av to ledd. Den binder sammen en forekomst fra hver av de tre tabellene Ansatt, Timeliste og Prosjekt At join-attributtene parvis har samme navn, er tilfeldig. Det holder at de har samme domene

select navnekonflikter Kvalifiser attributter med relasjonsnavn: R.A Navngi relasjoner med aliaser:...from R as S... (as kan sløyfes) S blir en kopi av R med nytt relasjonsnavn Gi attributter nytt navn: select A as B from... A omnavnes til B i resultatrelasjonen

insert insert into R(A 1, A 2,..., A k ) values (v 1, v 2,..., v k ); insert into R(A 1, A 2,..., A k ) select-setning; Attributtlisten kan sløyfes hvis den dekker samtlige attributter i R og følger attributtenes default rekkefølge NB optimaliseringer i DBMSet kan medføre at tuplene legges inn etterhvert som de beregnes i select-setningen. Dette kan ha sideeffekter på beregningen av select-setningen

PostgreSQL For å bruke PostgreSQL: Fra Linux-promptet (...>), gi kommandoen > psql -h dbpg-ifi-kurs -U <brukernavn> og du blir bedt om å oppgi passordet ditt. Dersom du vil lage egne tabeller, skriver du ditt eget brukernavn i stedet for fdb For å kjøre en kommandofil, skriv \i <filnavn> For å avslutte, skriv \q Les forøvrig dokumentet om filmdatabasen og postgres som er tilgjengelig via lenke fra kursets semesterside.