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

Like dokumenter
SQL Structured Query Language

Relasjoner terminologi

SQL Structured Query Language

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

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

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

INF1300 Introduksjon til databaser

Integritetsregler i SQL. Primærnøkler

INF1300 Introduksjon til databaser: SQL Structured Query Language

Integritetsregler i SQL

INF1300 Introduksjon til databaser

Integritetsregler i SQL

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

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

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

INF1300 Introduksjon til databaser

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

Databaser: Relasjonsmodellen, del I

SQL: Integritetsregler, triggere og views

IN2090 Introduksjon til databaser

Oppgaver Oppgave a: Sett opp mulige relasjoner

INF3100 Databasesystemer

UNIVERSITETET I OSLO. Relasjonsmodellen. Relasjoner og funksjonelle avhengigheter. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

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

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

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

INF212 - Databaseteori. Kursinnhold

INF1300 Introduksjon til databaser

Repetisjon: Normalformer og SQL

1. Innføring i bruk av MySQL Query Browser

INF3100 Databasesystemer

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

1. SQL datadefinisjon og manipulering

SQL Structured Query Language

HØGSKOLEN I SØR-TRØNDELAG

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

INF1300 Introduksjon til databaser

Metaspråket for å beskrive grammatikk

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

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

Utvikling fra kjernen og ut

Datamodellering og databaser SQL, del 2

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

Utvikling fra kjernen og ut

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

IN2090 Databaser og datamodellering. 08 Typer og skranker

HØGSKOLEN I SØR-TRØNDELAG

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 SQL-99. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

UNIVERSITETET I OSLO

Miniverden og ER- modell

IN2090 Introduksjon til databaser

SQL 3: Opprette tabeller, datainnsetting og utsnitt

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

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Skranker og avledninger

HØGSKOLEN I SØR-TRØNDELAG

IN2090 Databaser og datamodellering 07 Datamanipulering

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

Ekvivalente stier (Equivalence of Path, EOP) i storm

Utvikling fra kjernen og ut

Realiseringsalgoritmen fra ORM til relasjoner Intro til mengdeskranker i ORM

Oppgave 1 (Opprett en database og en tabell)

Relasjonsdatabaseteori

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

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Databaser fra et logikkperspektiv

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

1. Relasjonsmodellen Kommentarer til læreboka

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet. Løsningsforslag

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

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Plenum: Nøkler, normalformer og funksjonelle avhengigheter

Løsningsforlag for oblig 1, databaser 2010

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

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

INF3100 V2018 Obligatorisk oppgave nr. 2

UNIVERSITETET I OSLO

Tabelldefinisjon og datamanipulering

IN2090 Databaser og datamodellering 07 Datamanipulering

Fra problem til program

Løsningsforslag eksamen i IN

SQL Introduksjonskurs. Oversikt

Delinnlevering 2. INF1050, våren Inge Svale Hauger Handagard (ishandag) Tor Hildrum (thildru)

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Relasjonsdatabasedesign

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi.

Utvikling fra kjernen og ut

Ekvivalente stier (Equivalence of Path, EOP) i storm

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Transkript:

SQL Structured Query Language Definere tabeller Skranker Fylle tabeller med data

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 int, kan også skrive integer eksamensdato date ) ; Legg merke til likheten med en klassedefinisjon i Java: public class EmneStudent { String brukernavn ; String emnekode; int gruppenr ; Date eksamensdato; }

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

create eksempel med skranker Student(bnavn, snr, navn, stprog) create table Student ( bnavn char(8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40)

create eksempel med skranker Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn, og primærnøkkel create table Student ( bnavn char(8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40)

create eksempel med skranker Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn, og primærnøkkel snr er studentens studentnummer, og supernøkkel create table Student ( bnavn char(8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40)

create eksempel med skranker Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn, og primærnøkkel snr er studentens studentnummer, og supernøkkel navn er studentens navn, og kan ikke være null create table Student ( bnavn char(8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40)

create eksempel med skranker Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn, og primærnøkkel snr er studentens studentnummer, og supernøkkel navn er studentens navn, og kan ikke være null stprog er studieprogrammet studenten er tatt opp til create table Student ( bnavn char(8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40)

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,...

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 Hvis primærnøkkelen består av flere attributter må definisjonen kome etter attributtdeklarasjonene create table eksamensforsøk ( brukernavn char(8) emne char(10) semester char(5), karakter char(1), primary key (brukernavn, emne, semester) Forsøk på å legge inn flere karakterer for samme student i samme emne i samme semester vil da feile.

Primærnøkler, regler Maks én primærnøkkeldeklarasjon pr. relasjon

Primærnøkler, regler Maks én primærnøkkeldeklarasjon pr. relasjon Flere kandidatnøkler, bruk skranken unique

Primærnøkler, regler Maks én primærnøkkeldeklarasjon pr. relasjon Flere kandidatnøkler, 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

Primærnøkler, regler Maks én primærnøkkeldeklarasjon pr. relasjon Flere kandidatnøkler, 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

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 (... Tittel varchar(15) check (Tittel='Selger' or Tittel='Konsulent' or... ),... Angir en betingelse på attributtet. Sjekkes ved hver endring av attributtets verdi

Skranke på ett attributt check create table Ansatt ( Navn varchar(40), Tittel varchar(15), Fnr varchar(11),..., CONSTRAINT sjekktittel check ( Tittel='Selger' or Tittel='Konsulent' or...),...

Skranke på ett attributt check create table Ansatt ( Navn varchar(40), Tittel varchar(15), Fnr varchar(11),..., CONSTRAINT sjekktittel check ( Tittel='Selger' or Tittel='Konsulent' or...),... check create table Emne ( ekode varchar(7), enavn varchar(99),..., CONSTRAINT sjekkekode check (ekode > 'INF0000' and ekode < 'INF9999'),...

Skranke på ett attributt check create table Ansatt ( Navn varchar(40), Tittel varchar(15), Fnr varchar(11),..., CONSTRAINT sjekktittel check ( Tittel='Selger' or Tittel='Konsulent' or...),... check create table Emne ( ekode varchar(7), enavn varchar(99),..., CONSTRAINT sjekkekode check (ekode like 'INF '),...

Skranker: fremmednøkler Fremmednøkkel: Ett eller flere attributter som peker ut/refererer et tuppel i en annen relasjon. Barn Fremmednøkler Personale Ans# Navn Fdato Pers# Avd 10 9 8 12 Gro Berit Bjørn Liv Løpe# Navn Fdato Avd TilknPers 290264 131172 150571 031079 39201 35697 34322 39201 null Knøttene Knøttene null 2 5 4 7 Lisa Trym Anne Anne 180502 030205 301102 151204 Rosa Pantern Knøttene Tommeliten Knøttene null 9 null 8 Hva skal vi med fremmednøkler?

Hva skal vi med fremmednøkler?

Hva skal vi med fremmednøkler? Knytte sammen informasjon som hører sammen (f.eks. til samme objekt i virkeligheten) fra flere tabeller.

Hva skal vi med fremmednøkler? Knytte sammen informasjon som hører sammen (f.eks. til samme objekt i virkeligheten) fra flere tabeller. Må vi definere fremmednøkler for å gjøre dette?

Hva skal vi med fremmednøkler? Knytte sammen informasjon som hører sammen (f.eks. til samme objekt i virkeligheten) fra flere tabeller. Må vi definere fremmednøkler for å gjøre dette? Nei

Hva skal vi med fremmednøkler? Knytte sammen informasjon som hører sammen (f.eks. til samme objekt i virkeligheten) fra flere tabeller. Må vi definere fremmednøkler for å gjøre dette? Nei Hvorfor gjør vi det da?

Hva skal vi med fremmednøkler? Knytte sammen informasjon som hører sammen (f.eks. til samme objekt i virkeligheten) fra flere tabeller. Må vi definere fremmednøkler for å gjøre dette? Nei Hvorfor gjør vi det da? For å sikre at alle «pekere» til en annen tabelle peker til noe.

Hva skal vi med fremmednøkler? Knytte sammen informasjon som hører sammen (f.eks. til samme objekt i virkeligheten) fra flere tabeller. Må vi definere fremmednøkler for å gjøre dette? Nei Hvorfor gjør vi det da? For å sikre at alle «pekere» til en annen tabelle peker til noe. For at DBMSet skal gjøre oppslag i tabeller mer effektivt.

Skranker: fremmednøkler med ett attributt, samme attributtnavn: create table StudTarEmne (..., emnekode char(10) references Emner,... med ett attributt, ulike attributtnavn: create table StudTarEmne (..., emnekode char(10) references Kurs(kurskode),...

med flere attributter med samme navn: create table StudFikkKarakterIEmne ( studid int, emnekode varchar(10), semester varchar(5), karakter char(1), foreign key (studid, emnekode, semester) references Resultater De refererte attributtene må være primærnøkkel, deklarert primary key. (I noen SQL-systemer holder det med at attributtene er deklarert UNIQUE, men ikke i PostgreSQL).

med flere attributter med forskjellig navn: create table StudFikkKarakterIEmne ( studid int, emnekode varchar(10), semester varchar(5), karakter char(1), foreign key (studid, emnekode, semester) references Resultater (bnavn, kurskode, sem) De refererte attributtene må være primærnøkkel, deklarert primary key. (I noen SQL-systemer holder det med at attributtene er deklarert UNIQUE, men ikke i PostgreSQL).

Fremmednøkler mot flere tabeller brukes for å implementere et mange-til-mange forhold mellom tabeller: create table student ( bnavn char(8) primary key, navn varchar(80),... create table emne ( ekode char(10) primary key, emnenavn varchar(80), emneeier varchar(80),... create table antalleksamensforsøk ( brukernavn char(8) references student(bnavn), emne char(10) references emne(ekode), antforsøk integer, primary key (brukernavn, emne)

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

Legge inn data i tabeller insert into R(A 1, A 2,..., A k ) values (v 1, v 2,..., v k insert into Student (snr, navn, bnavn, stprog) values (133423, 'Liv E. Laga', 'livelaga', 'Informatikk: programmering og nettverk' insert into Student values ('alistrak', 133424, 'Ali Straks', 'Informatikk: design, bruk, interaksjon' Husk attributtrekkefølgen fra definisjonen av Student: Student (bnavn, snr, navn, stprog)

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;

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

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