SQL Structured Query Language

Like dokumenter
Relasjoner terminologi

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

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

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 I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

INF1300 Introduksjon til databaser

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

INF1300 Introduksjon til databaser

Repetisjon: Normalformer og SQL

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

Metaspråket for å beskrive grammatikk

Integritetsregler i SQL

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

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

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

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

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

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

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

SQL: SELECT-spørringer

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

Indre select-setninger Nestede select-setninger

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

INF1300 Introduksjon til databaser

Integritetsregler i SQL. Primærnøkler

Databaser: Relasjonsmodellen, del I

Integritetsregler i SQL

SQL: SELECT-spørringer

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

Utvikling fra kjernen og ut

Relasjonsalgebraen. Algebra

1. SQL datadefinisjon og manipulering

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

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

Spørsmålskompilering del 1

IN2090 Databaser og datamodellering. 08 Typer og skranker

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

Spørsmålskompilering del 1

HØGSKOLEN I SØR-TRØNDELAG

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

Oppgaver Oppgave a: Sett opp mulige relasjoner

Oppgave 1 (Opprett en database og en tabell)

Miniverden og ER- modell

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

Bruke SQL fra Python. Med Psycopg2

Utvikling fra kjernen og ut

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

IN2090 Introduksjon til databaser

INF1300 Introduksjon til databaser

Datamodellering og databaser SQL, del 2

UNIVERSITETET I OSLO

SQL for INF1300. Stein Michael Storleer 7. november 2014

HØGSKOLEN I SØR-TRØNDELAG

IN2090 Introduksjon til databaser

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

Datamodellering og databaser SQL, del 2

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

SQL, del 1 - select. Hva er SQL?

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

1. Innføring i bruk av MySQL Query Browser

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

Datamodellering og databaser SQL, del 2

IN2090 Databaser og datamodellering 07 Datamanipulering

SQL 3: Opprette tabeller, datainnsetting og utsnitt

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

Øvingsoppgave uke 3. Fanger i fengsel

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

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

INF3100 V2018 Obligatorisk oppgave nr. 2

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

Transkript:

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 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 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 i INF1300 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 nytt eksempel 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 nytt eksempel Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn create table Student ( bnavn char( 8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40) ) ;

create nytt eksempel Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn snr er studentens studentnummer create table Student ( bnavn char( 8) primary key, snr int unique, navn varchar(80) not null, stprog varchar(40) ) ;

create nytt eksempel Student(bnavn, snr, navn, stprog) bnavn er studentens brukernavn snr er studentens studentnummer 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) ) ;

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 ( a listrak, 133424, A l i Straks, Informatikk : design, bruk, interaksjon ) ; Husk attributtrekkefølgen fra definisjonen av Student: Student (bnavn, snr, navn, stprog)

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: samme som: select bnavn, snr, navn, stprog from Student ; select * from Student ; Student (bnavn, snr, navn, stprog)

Hente/skrive ut data fra tabeller select ATTRIBUTTLISTE from NAVNELISTE ; Noen attributter: select bnavn, navn from Student ; annen rekkefølge: select snr, navn, bnavn, from Student ; stprog Student (bnavn, snr, navn, stprog)

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

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 samling med tupler der samme tuppel kan forekomme flere ganger. (Til forskjell fra en mengde tupler/forekomster, der samme tuppel ikke 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.

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

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»

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 ;

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

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

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

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;

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

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.