SQL. ISO SQL-standardene. Structured Query Language. Bruk av SQL. En innledende kommentar SQL-89 SQL-92 SQL:1999

Like dokumenter
Utvikling fra kjernen og ut

Utvikling fra kjernen og ut

Systemutvikling fra kjernen og ut, fra skallet og inn

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

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

Metaspråket for å beskrive grammatikk

1. SQL datadefinisjon og manipulering

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

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

Datamodellering og databaser SQL, del 2

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

Repetisjon: Normalformer og SQL

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

INF1300 Introduksjon til databaser

Datamodellering og databaser SQL, del 2

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

Utvikling fra kjernen og ut

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

Integritetsregler i SQL. Primærnøkler

Datamodellering og databaser SQL, del 2

Oppgaver Oppgave a: Sett opp mulige relasjoner

Relasjoner terminologi

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Integritetsregler i SQL

INF1300 Introduksjon til databaser

SQL Structured Query Language

1. Introduksjon til Oracle Express Edition

Databaser: Relasjonsmodellen, del I

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

Oppgave 1 (Opprett en database og en tabell)

INF1300 Introduksjon til databaser: SQL Structured Query Language

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

INF1300 Introduksjon til databaser

SQL Introduksjonskurs. Oversikt

SQL, del 1 - select. Hva er SQL?

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

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

Skranker og avledninger

IN2090 Databaser og datamodellering 07 Datamanipulering

Integritetsregler i SQL

INF1300 Introduksjon til databaser

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

EKSAMEN 6102 / 6102N DATABASER

SQL Structured Query Language

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

INF1300 Introduksjon til databaser

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

1. Innføring i bruk av MySQL Query Browser

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

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

Applikasjonsutvikling med databaser

Databaser. - Introduksjon til SQL med Microsoft SQL Server - Olav Dæhli Databaser - høsten

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

SQL, del 1 - select. Hva er SQL?

IN2090 Introduksjon til databaser

Miniverden og ER- modell

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

LC238D Datamodellering og databaser SQL, del 1 - SELECT

Tabeller og enkle spørringer

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

Datamodellering med UML

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

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

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

EKSAMEN. Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene.

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

Skranker og avledninger

INF1300 Introduksjon til databaser

Komplisert eksempel. IN2090 Databaser og datamodellering 07 Datamanipulering. Flere eksempler: Kombinere aggregater. Komplisert eksempel med WITH

INF1300 Introduksjon til databaser

Datamodellering med UML. Modellenes to formål. The Unified Modeling Language - UML

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

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

Olav Dæhli DATABASEUTVIKLING

Tilkobling og Triggere

The Unified Modeling Language - UML

Eksamen i IBE102 Webutvikling Våren 2017.

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

INF1300 Introduksjon til databaser

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

INF1300 Introduksjon til databaser

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

INF1300 Introduksjon til databaser

HØGSKOLEN I SØR-TRØNDELAG

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

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

Tall. Binære regnestykker. Binære tall positive, negative heltall, flytende tall

Løsningsforlag for oblig 1, databaser 2010

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

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

Transkript:

ISO SQL-standardene SQL Structured Query Language SQL-89 o Originalstandarden o Addendum for Embedded SQL (1994) SQL-92 o ISO/IEC 9075 SQL Database Databasetjener (Oracle) SQL:1999 o ISO/IEC 9075:1999 Det finnes i dag enklere språk for å kommunisere med databaser, men SQL er standardisert... INF102-sql-1 INF102-sql-2 Bruk av SQL Som selvstendig språk som regel interaktivt Som databasespråk i forbindelse med et vertsspråk (som Java, PHP, Pascal, ADA, COBOL, FORTRAN,... ) o Embedded SQL SQL-kommandoer som må prekompileres er lagt inn i programteksten o API (Application Programmer Interface) SQL kan kalles ved hjelp av biblioteksfunksjoner (Ikke ISO-standard, men de-facto-standarder som ODBC og JDBC) o Dynamisk SQL Spørringer lages av programmet under utførelsen Som språk for kommunikasjon mellom datamaskiner En innledende kommentar Teori er en ting, praksis er gjerne noe anna.: Relasjonsdatabaseteorien sier at en relasjon ikke kan ha flere like linjer. I kommersielle databasehåndteringssystemer fravikes denne regelen: Flere like linjer er altså mulig. Derfor snakker vi ofte om tabelldatabaser istedenfor relasjonsdatabaser. SQL er et programmeringsspråk for å håndtere tabelldatabaser. INF102-sql-3 INF102-sql-4

SQLs tre kommandokategorier DML Data Manipulation Language Datamanipuleringsspråk o SELECT o INSERT o UPDATE o DELETE DDL Data Definition Language Datadefinisjonsspråk (for skjemamanipulering) o CREATE o ALTER o DROP DCL Data Control Language Data-kontrollspråk (for tilgangskontroll) o GRANT o REVOKE UI Fylke fylkenavn 02 Akershus 03 Oslo Husholdningsavfall NOT NULL Eksempeldatabasen kommunenr kommunenavn avfallsmengde Halden 04 Moss 02 0211 Vestby 11549 avfallper Innbygger 387,1 403,1 421,6 INF102-sql-5 INF102-sql-6 SQL - Datamanipulering Enkel SQL-spørring Spørring (Query) resultatet er alltid en tabell Attributter vi ønsker ut o SELECT Oppdatering o INSERT o DELETE o UPDATE hente ut linjer (spørring) legge inn nye linjer slette linjer endre eksisterende linjer De fleste SQL på det kommersielle marked er case-insensitive du kan skrive kommandoer med store eller små bokstaver SELECT kommunenr, avfallsmengde Tabell vi henter data fra Alle attributtene SELECT * INF102-sql-7 INF102-sql-8

Filtrerende betingelser SELECT kommunenavn, avfallsmengde WHERE = ; Bare linjer som oppfyller denne betingelsen vil komme med i resultatet Velge ut attributter Velge ut linjer Operatorer i WHERE Matematiske sammenligningsoperatorer = <>!= < <=!>!< >= > Sann hvis likhet Sann hvis ulikhet Sann hvis mindre enn Sann hvis større enn Logiske operatorer AND OR Sann hvis mindre eller lik Sann hvis større eller lik Sann hvis begge sanne Sann hvis en eller begge sanne NOT Sann hvis usann og omvendt Presedensrekkefølge: sammenlikning, NOT, AND, OR. Bruk parenteser! INF102-sql-9 INF102-sql-10 Operatorer i WHERE (forts.) Spesielle operatorer BETWEEN AND... Sann hvis mellom... og......in (verdiliste) Sann hvis... i verdiliste LIKE *) Tekststreng-sammenlikning IS NULL Sann hvis NULL EXISTS Sann hvis NOT NULL Omnavning av attributter Ved hjelp av AS kan vi gi et attributt i resultatet et annet navn enn i tabellen vi henter dataene fra: SELECT kommunenr, avfallsmengde AS avfall *) LIKE tekststreng-sammenlikning med jokertegn: Resultatet får attributtene kommunenr og avfall % et vilkårlig antall av vilkårlige tegn _ ett vilkårlig tegn [tegnsekvens] ett vilkårlig tegn i tegnsekvensen (ikke i Oracle) INF102-sql-11 INF102-sql-12

Sortering I utgangspunktet er linjene i resultatet i vilkårlig rekkefølge De fleste databasehåndteringssystemer sorterer på primærnøkkel For å ha kontroll over rekkefølgen, bruk ORDER BY SELECT kommunenavn, avfallsmengde WHERE = Sortering på flere attributter SELECT kommunenavn, avfallperinnbygger WHERE = ORDER BY avfallperinnbygger DESC, kommunenavn ; ORDER BY avfallsmengde DESC; ASC stigende rekkefølge DESC synkende rekkefølge ASC er default Sorterer alfabetisk på kommunenavn innen like avfallsmengder INF102-sql-13 INF102-sql-14 Hvordan forhindre duplikate linjer Oppdatering legge inn linjer SELECT DISTINCT Nye linjer legges inn med INSERT INTO: Gir som resultat en tabell med ett attributt som inneholder alle hvert av dem forekommer én gang. DISTINCT gjelder kombinasjonen av alle attributter SELECT DISTINCT gir altså en relasjon! INSERT INTO tabellnavn VALUES(liste med verdier); eller INSERT INTO tabellnavn (liste med attributter) VALUES (liste med verdier); Default i SQL er SELECT ALL, dvs. at også duplikater tas med i resultatet (i strid med relasjons-databaseteorien) I den første formen legges verdiene inn i tabellen fra venstre mot høyre (ikke å anbefale). Gjenværende attributter blir NULL. I den andre formen velger vi hvilke attributter som skal få verdier, og i hvilken rekkefølge. Unevnte attributter blir NULL. INF102-sql-15 INF102-sql-16

Legge inn linjer eksempel INSERT INTO Fylke VALUES ( 13, NULL); eller INSERT INTO Fylke (, fylkenavn) VALUES ( 13, NULL); eller INSERT INTO Fylke (fylkenavn, ) VALUES (NULL, 13 ); eller INSERT INTO Fylke () VALUES ( 13 ); Oppdatering fjerne linjer Eksisterende linjer fjernes med DELETE FROM: DELETE FROM tabellnavn WHERE betingelse for linjer som skal fjernes; Eksempel: DELETE FROM Fylke WHERE = 13 ; SQL har ingen angrefunksjon! Vær derfor sikker på at betingelsen er korrekt, slik at det ikke fjernes linjer som ikke skulle vært fjernet. En DELETE FROM uten WHERE fjerner alle linjer i tabellen. INF102-sql-17 INF102-sql-18 Oppdatering endre eksisterende linjer Eksisterende linjer endres med UPDATE: UPDATE tabellnavn SET attributtnavn1 = Verdi eller uttrykk, attributtnavn2 = Verdi eller uttrykk,... WHERE betingelse for linjer som skal endres; Eksempel: UPDATE Husholdningsavfall SET avfallperinnbygger = avfallsmengde*1000/innbyggertall WHERE innbyggertall > 0; SQL Datatilgangskontroll Gi andre brukere tilgang til din database GRANT SELECT GRANT SELECT ON tabellnavn ON tabellnavn TO PUBLIC; TO bruker1, bruker2, ; Trekke tilbake tilgangstillatelse REVOKE ALL PRIVILEGES REVOKE ALL PRIVILEGES ON tabellnavn ON tabellnavn FROM PUBLIC; FROM bruker1, bruker2, ; Bare de mest vanlige og nyttige variantene er vist her INF102-sql-19 INF102-sql-20

Endre databasepassord For å endre databasepassord: ALTER USER brukernavn IDENTIFIED BY nyttpassord; Metadatabasen I Oracle er også metadatabasen en tabelldatabase kalt data dictionary Metadatabasen oppdateres av databasehåndteringssystemet når DDL-kommandoer utføres Bare databasehåndteringssystemet kan oppdatere metadatabasen Det nye passordet må skrives bare én gang på den annen side vises det i klartekst i kommandoen Brukeren kan imidlertid spørre mot metadatabasen med SQL Det er lagt til rette virtuelle tabeller for dette formål INF102-sql-21 INF102-sql-22 Noen spørringer mot metadatabasen i Oracle En oversikt over hele databasen SELECT object_name,object_type FROM user_objects; En oversikt over tabeller SELECT table_name FROM user_tables ; En oversikt over attributter SELECT table_name, column_name, data_type, data_length, nullable FROM user_tab_columns; En oversikt over virtuelle tabeller SELECT view_name FROM user_views; En oversikt over integritetsregler SELECT constraint_name, constraint_type, table_name, delete_rule FROM user_constraints; P = Primary key U = Unique key R = Referential integrity INF102-sql-23 Mer avanserte spørringer Spørringer mot flere tabeller Spørringer der samme tabell inngår flere ganger Spørringer med beregninger Spørringer med aggregerende funksjoner Nestede spørringer Virtuelle tabeller ( views ) INF102-sql-24

Spørringer mot flere tabeller ( join ) SELECT Fylke.,fylkenavn,kommunenr, kommunenavn,avfallsmengde, Fylke WHERE Husholdningsavfall.=Fylke.; Legg merke til: FROM-leddet inneholder flere tabeller WHERE-leddet inneholder join-betingelsen Det må være like mange join-betingelser som det er tabeller i FROMleddet utover den første hvis ikke får vi kartesiske produkter For å kunne referere til ulike attributter med samme navn kvalifiserer vi dem med tabellnavnet Resultat på neste lysark! INF102-sql-25 UI 02 03 02 Resultat 02 fylkenavn Akershus Oslo kommunenr 04 0211 fylkenavn Akershus Fylke Husholdningsavfall kommunenavn Halden Moss Vestby kommunenr 04 0211 Eksempel på join Halden Moss Vestby avfallsmengde kommunenavn SQL-kommandoen på forrige lysark 11549 avfallsmengde 11549 INF102-sql-26 UI 02 03 fylkenavn Akershus Oslo kommunenr 04 Fylke Husholdningsavfall kommunenavn Halden Moss Eksempel på join avfallsmengde Svalbard kommer ikke med i resultatet! Outer join i Oracle-SQL SELECT fylkenavn,kommunenr,kommunenavn,avfallsmengde, Fylke WHERE Husholdningsavfall.(+)=Fylke.; NULL 0000 Svalbard NULL Resultat fylkenavn kommunenr 04 kommunenavn Halden Moss avfallsmengde Outer join er ustandardisert, og SQLkommandoens utseende er derfor avhengig av databasehånderingssystemet. Resultat på neste lysark! INF102-sql-27 INF102-sql-28

UI 02 03 fylkenavn Akershus Oslo kommunenr Eksempel på Outer join Fylke Husholdningsavfall kommunenavn avfallsmengde SQL-kommandoen på forrige lysark Aliaser SELECT F.Fylkenavn,H.Kommunenr,Kommunenavn H, Fylke F WHERE H.Fylkenr = F.Fylkenr; 04 Halden Moss Aliaser NULL 0000 Svalbard NULL Resultat fylkenavn kommunenr kommunenavn Halden avfallsmengde Aliaser brukes for å: Forkorte SQL-uttrykkene Løse navgivingskonflikter (særlig når en tabell joines med seg selv) 04 Moss NULL 0000 Svalbard NULL INF102-sql-29 INF102-sql-30 Eksempel joine en tabell med seg selv Person IU ansattnr ansattnavn sjef Hva heter sjefen? Ans00 Bjørk NULL SELECT P.ansattnr, Ans0002 Li Ans00 P.ansattnavn, Ans0003 Resultat ansattnr Dal ansattnavn Ans00 navnpåsjef S.ansattnavn AS navnpåsjef FROM Person P, Person S Ans00 Bjørk NULL WHERE P.sjef(+) = Ans0002 Li Bjørk S.ansattnr; Ans0003 Dal Bjørk Beregnede attributter SELECT-listen kan inneholde beregnede attributter (beregnede attributter er ikke lagret i databasen): SELECT kommunenavn, avfallsmengde*1000/innbyggertall AS beregnetavfallperinnbygger SELECT kommunenr AS kommunenr /* tekstsammenskjøting i Oracle-SQL */ SELECT 7777 AS tall FROM Fylke -- en spøk? ; INF102-sql-31 INF102-sql-32

Gruppering og aggregeringsfunksjoner Aggregeringsfunksjonene Attributtene i SELECT må enten grupperes eller aggregeres SELECT,SUM(avfallsmengde)AS avfall COUNT(*) COUNT(attributt) COUNT(DISTINCT attributt) Antall linjer i tabellen Antall verdier, NULL unntatt Antall ulike verdier MIN(attributt) Minste verdi GROUP BY ; Resultatet er en tabell der alle linjer med samme er slått sammen til én, og der hver linje inneholder og avfall lik summen av avfallsmengde for fylket. I standard SQL kan aggregeringsfunksjoner ikke brukes på beregnede attributter MAX(attributt) SUM(attributt) AVG(attributt) Største verdi Summen av verdiene Gjennomsnittet av verdiene SUM og AVG virker selvfølgelig bare på numeriske attributter! INF102-sql-33 INF102-sql-34 Noen COUNT-eksempler Betingelser på grupper SELECT COUNT(*) SELECT,SUM(avfallsmengde)AS avfall SELECT COUNT(kommunenavn) GROUP BY HAVING SUM(avfallsmengde) > 1000; SELECT COUNT(DISTINCT kommunenavn) WHERE filtrerer før grupperingen HAVING filtrerer etter grupperingen INF102-sql-35 INF102-sql-36

En fullstendig SELECT SELECT,SUM(avfallsmengde)AS avfall WHERE avfallsmengde < 300 GROUP BY HAVING SUM(avfallsmengde) > 1000 ORDER BY Sum(avfallsmengde) DESC; Utførelsesrekkefølge i SELECT WHERE Velger ut linjer Filtrering FROM Tabellene som skal brukes Gruppering GROUP BY Slår sammen linjer HAVING Velger ut sammenslåtte linjer Først velges ut alle linjer med Avfallsmengde < 300, så grupperes alle linjer med samme Fylkenr sammen til én, så velges ut de hvor summen av Avfallsmengde > 1000, til slutt sorteres på synkende sum av Avfallsmengde. Sortering ORDER BY Sorterer linjer SELECT Attributtene som skal returneres Filtrering av gruppe INF102-sql-37 INF102-sql-38 Nøstede SQL-spørringer Nøstet spørring: Spørring som inneholder en annen spørring den indre spørringen. Eksempel Finn kommunen med størst avfallsmengde: SELECT kommunenr, avfallsmengde Indre spørring utføres først WHERE avfallsmengde =(SELECT MAX(avfallsmengde) ); Datadefinisjon Oppretting og fjerning av tabeller Endring av tabeller Legge inn skranker o Primærnøkler o Referanseintegriteter Virtuelle tabeller INF102-sql-39 INF102-sql-40

Opprette tabell Lag tabell CREATE TABLE tabellnavn ( attributtnavn1 datatype attributtnavn2 datatype NOT NULL,... CONSTRAINT skrankenavn PRIMARY KEY (attributtnavn1,...) ); Eksempel CREATE TABLE Husholdningsavfall ( CHAR(2) NOT NULL, kommunenr CHAR(2) NOT NULL, kommunenavn VARCHAR(25) NOT NULL, avfallsmengde INT NOT NULL, innbyggertall INT NOT NULL, avfallperinnbygger DECIMAL(8,1), CONSTRAINT EntydigKommunenr PRIMARY KEY (kommunenr) ) ; Datatyper, se neste lysark Rød tekst: Integritetsregler INF102-sql-41 ISO SQL datatyper CHARACTER(antall tegn) tegnstreng (inntil 254 tegn) VARCHARACTER( ) tegnstreng (variabel lengde) INTEGER heltall (opptil 11 siffer) SMALLINT små heltall (DBMS-avhengig) NUMERIC(ant siffer,ant desimaler) desimaltall (opptil 20 siffer) DECIMAL(ant siffer,ant desimaler) desimaltall (DBMS-avhengig) FLOAT(presisjon) flytende tall REAL flytende tall (DBMS-avhengig) DOUBLE PRECISION flytende tall (DBMS-avhengig) DATE dato TIME klokkeslett TIMESTAMP dato og klokkeslett BIT binære siffer INF102-sql-42 Noen ORACLE Build in SQL datatyper Built-In Datatype NUMBER(p,s) CHAR(size) VARCHAR2(size) DATE Description Number having precision p and scale s. The precision p can range from 1 to 38. The scale s can range from -84 to 127. Fixed-length character data of length size bytes. Maximum size is 2000 bytes. Default and minimum size is 1 byte. Variable-length character string having maximum length size bytes. Maximum size is 4000, and minimum is 1. You must specify size for VARCHAR2. Valid date range from January 1, 4712 BC to December 31, 9999 AD. Du kan bruke SQL standardtyper, ORACLE SQL vil da oversette til en av sine egne CHAR(2) 02 Datatyping på primitivnivå fylkenavn Akershus CHAR(2) CHAR(4) CHAR(25) kommunenr 04 05 Halden Moss Sarpsborg... er egentlig for primitivt: kommunenavn Ingen automatikk i at har samme verdiområde i ulike tabeller INSERT INTO Husholdningsavfall VALUES (, Moss, )??? avfallsmengde 12600 innbyggertall 26417 25860 46692 INF102-sql-43 INF102-sql-44

Eksplisitt datatyping (SQL:1999) Regler for tabell- og attributtnavn CREATE DISTINCT TYPE Fylkenr_type AS CHAR (2); Et navn (identifier) kan ikke være lengre enn 128 tegn (Oracle: 30 tegn) CREATE TABLE Husholdningsavfall ( Fylkenr Fylkenr_type,... ); Et navn må begynne med en bokstav Tillatte tegn er bokstaver, siffer og _ $ # Et navn kan ikke inneholde mellomrom CREATE TABLE Fylke( Fylkenr Fylkenr_type,... ) ; Reserverte ord kan ikke brukes Navn er case-insensitive Vanlig å henge sammen enkeltord med _ (Min_tabell) Navn skal være meningsfylte, og allikevel ikke for lange INF102-sql-45 INF102-sql-46 Fjerne tabell Fjern tabell DROP TABLE tabellnavn; Fjerner tabellen fullstendig, både metadata og data Eksempler: DROP TABLE Husholdningsavfall ; DROP TABLE Fylke ; Legg merke til at referanseintegritetsregler (se senere) fører til at tabeller må fjernes i en bestemt rekkefølge: Kontrollerte tabeller (de med fremmednøkkelen) først! Endre navn (ikke standard SQL) Endre tabell RENAME tabellnavn TO etannettabellnavn; Legge til attributt ALTER TABLE tabellnavn ADD nyttattributtnavn datatype ; Eksempel: ALTER TABLE Fylke ADD Avfallsmengde INT ; Det er litt ulike regler i forskjellige databasehåndteringssystemer om hvor store endringer som er tillatt. Bruk ikke NOT NULL her! INF102-sql-47 INF102-sql-48

Endre attributt i tabell Endre attributt ALTER TABLE tabellnavn MODIFY attributtnavn nydatatype NOT NULL ; Eksempel Vi forutsetter at Avfallsmengde ALTER TABLE Fylke nå har verdier! MODIFY Avfallsmengde INT NOT NULL ; De fleste databasehåndteringssystemer er meget restriktive med hensyn på endringer av kolonner det allerede finnes data i! Integritetsregler NOT NULL og PRIMARY KEY deklareres som regel i CREATE TABLE. Referanseintegritet deklareres som regel i en separat ALTER TABLE av kontrollert tabell: ALTER TABLE navn_på_kontrollert_tabell ADD CONSTRAINT navn_på_regel FOREIGN KEY(fremmednøkkelattributt) REFERENCES navn_på_kontrollerende_tabell ; Eksempel ALTER TABLE Husholdningsavfall ADD CONSTRAINT AvfallSkalHaFylke FOREIGN KEY() REFERENCES Fylke ; INF102-sql-49 INF102-sql-50 Oppdateringer og integritetsregler Ved forsøk på oppdateringer kan vi komme i konflikt med integritetsreglene. I så fall foreligger følgende muligheter (som deklareres i DML): o Avvise oppdateringen o Gjennomføre oppdateringen på en slik måte at integritetsreglene fremdeles er oppfylt Handlingsmønster ved overtredelse av referanseintegritet ALTER TABLE navn på kontrollert tabell ADD CONSTRAINT navn på regel FOREIGN KEY(fremmednøkkelattributt) REFERENCES navn_på_kontrollerende_tabell ON DELETE referential_action ; Eksempel: Forsøke å fjerne et fylke fra Fylke-tabellen o Avvisning med feilmelding o Fjerne fylket i Fylke-tabellen, og samtidig alle kommunene i fylket i Husholdningsavfall o Sette fremmednøkkelen i Husholdningsavfall til NULL eller UPDATE NO ACTION (gi feilmelding) CASCADE (fjern også kontrollerte linjer) SET NULL (sett fremmednøkkel til NULL) SET DEFAULT (sett fremmednøkkel til default -verdi) INF102-sql-51 INF102-sql-52

Virtuelle tabeller En virtuell tabell er et spørrings-resultat som kan brukes på lik linje med vanlige tabeller i etterfølgende SQL-kommandoer Virtuelle tabeller lagres ikke i databasen endrer datagrunnlaget for spørringen seg, endres også den virtuelle tabellen Virtuelle tabeller brukes i hovedsak til: o Mellomregning i kompliserte spørringer o Datagrunnlag for skjermbilder og applikasjonsprogrammer o Adgangskontroll OBS: Begrensede muligheter for oppdatering av virtuelle tabeller Opprette en virtuell tabell: Virtuelle tabeller i SQL CREATE OR REPLACE VIEW navn_på_virtuell_tabell AS SELECT... ; eller CREATE OR REPLACE VIEW navn_på_virtuell_tabell (attributtliste) AS SELECT... ; Fjerne en virtuell tabell: DROP VIEW navn_på_virtuell_tabell ; I den første CREATE-formen tas attributtnavnene fra SELECT-leddet I den andre formen velger vi attributtnavn selv INF102-sql-53 INF102-sql-54 Bruk av virtuelle tabeller Bruk av virtuelle tabeller (forts.) Vi oppretter en virtuell tabell: CREATE VIEW AvfallAkershus AS SELECT Kommunenr,Kommunenavn,Avfallsmengde WHERE Fylkenr = 02 ; Vi kan nå bruke den virtuelle tabellen: SELECT SUM(Avfallsmengde) FROM AvfallAkershus ; I standard SQL kan vi ikke bruke beregninger, bare attributtnavn i aggregeringsfunksjoner. En virtuell tabell bringer oss rundt denne begrensningen: CREATE VIEW AvfallPerInnbyggerView (beregnetavfallperinnbygger) AS SELECT (avfallsmengde*1000/innbyggertall) SELECT MAX(beregnetAvfallPerInnbygger) FROM AvfallPerInnbyggerView ; INF102-sql-55 INF102-sql-56