Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Standard databasespråk

Liknende presentasjoner


Presentasjon om: "Standard databasespråk"— Utskrift av presentasjonen:

1 Standard databasespråk
SQL SQL Standard databasespråk for relasjons-databaser SQL er standard databasespråk for relasjons-databaser.

2 SQL er i dag standard database-språk for relasjons-databaser.
SQL (Structured Query Language, uttales: sequel eller ess-que-ell) er et komplett sett av kommandoer for aksess til en relasjons-database. SQL er i dag standard database-språk for relasjons-databaser. SQL benyttes til: - Opprette datase-tabeller - Lagre data - Gjenfinne data - Endre data - Endre tabell-strukturer - Kombinere og beregne data - Ta hånd om database-sikkerhet SQL er mengde-orientert, dvs kan anvendes på en gruppe av records eller enkelt-record. SQL er ikke-prosedyrisk, men kan innebygges i prosedyre-språk. Oversikt over hva SQL-forkortelsen betyr og hvilke tjenester vi kan få utført ved hjelp av dette databasespråket.

3 1976 SEQUEL/2 IBM prototype kalt System R.
Historikk Codd beskrev en relasjons-algebra for organisering av data inn i tabeller “A Relational Model of Data for Large Shared Data Banks”. 1974 “SEQUEL: A structured English Query Language” Oppfyller kravene i Codd’s relasjons-algebra. 1976 SEQUEL/ IBM prototype kalt System R. 1980 Navnet endres til SQL ANSI-standard. 1997 SQL m/objektorientering Historikk. Arbeidet med såkalte relasjons-databaser ble påbegynt på begynnelsen av 70-tallet. Codd sto sentralt i dette arbeidet. Relasjons-databaser med tilhørende språk SQL er basert på en matematisk grein som heter relasjons-algebra.

4 SQL Data-språk for alle ?
SQL var opprinnelig tenkt å skulle være ET DATABASE-SPRÅK FOR ALLE SQL var påtenkt å skulle være et dataspråk for enhver, dvs språket skulle være så enkelt at hvemsomhelst kunne lære det og bruke det. Slik ble det ikke. Selv om SQL er et relativt greit språk å lære, har det vist seg nødvendig å bygge språket inn i høgnivåspråk eller ulike utviklingsverktøy. Det siste gir mulighet til at en bruker ved hjelp av pek og klikk kan foreta aksesser mot databaser. I praksis bygges SQL inn i et høgnivåspråk for bl.a. å bedre brukergrensesnittet.

5 Hva består en database av ?
Selve databasen med lagrede data Data Dictionary (System-kataloger) med alle nødvendige opplysninger om databasens struktur DBMS - DataBase Management System Database software til operasjoner på databasen En database kan vi dele i følgende tre hoved-deler: - Selve databasen hvor dataene ligger lagret. - Data Dictionary (System-kataloger) hvor det ligger lagret informasjon om databasens struktur (eierforhold, tilgangsrettigheter, tabeller, relasjoner, …) - DBMS (Database Management System). Dette er program (software) til bruk ved operasjoner (lesing, oppdatering, innsetting, sletting, …) på databasen.

6 Database-system Bruker Appl. Database DBMS Bruker Appl. DD Bruker
Til høyre vises databasens tre hoved-deler: Selve dataene, DD (Data Dictionary) og DBMS. Brukere av databasen benytter ulike applikasjons-program ved operasjoner mot databasen. Disse applikasjons-programmene opererer ikke direkte på databasen, men henvender seg til DBMS. DBMS fungerer altså som et slags mellomledd mellom brukernes applikasjons-program og selve dataene i databasen. Appl.

7 Database-system - Eksempler
Centura Team/Web Developer Bruker Appl. Database DBMS SQLTalk Bruker Appl. C++ SQL/API DD Bruker Appl. SQLBase SQLServer Oracle

8 Eksempel på innhold i en database
Views Procedures Rules Tables Datatypes Indexes Defaults La oss se litt nærmere på selve databasen der dataene ligger lagret. I en relasjons-database ligger alle dataene lagret i såkalte tabeller. Dette er to-dimensjonale arrays bestående av rader og kolonner. Views: Virtuelle tabeller. Dataene kan være deler av tabell-data eller en sammenslåing av data fra flere relaterte tabeller. Indexes: Hjelpetabeller for raskere oppslag i tabeller. Procedures: Ferdigkompilerte sekvenser av SQL-statement. Triggers: Ferdigkompilerte rutiner som eksekveres under gitte forutsetninger. Rules: Regler for kolonne-verdier (eks: Datoer skal være innen Datatypes: Opplysninger om datatyper i de enkelte kolonner (eks: Number) Defaults: Kolonne-verdier hvis ingenting annet er spesifisert (eks: Dagens dato hvis ingenting annet er spesifisert) Triggers

9 Database / Tabell / Rad / Kolonne
5 Nilsen 2 Olsen 1 Hansen 4 Berg Rad Post Record Kolonne Felt En del viktige begrep: - Database - Tabell - Rad / Post / Record - Kolonne / Felt

10 Flerbrukersystem Client / Server
Database DBMS Application_1 SQL-Request Data Application_2 Application_3

11 Typer av SQL-kommandoer (1)
Data Definition Commands ( DDL ) Data Manipulation Commands ( DML ) Data Query Commands ( DQL ) Transaction Control Commands Data Administation Commands Data Control Commands De ulike SQL-kommandoene er det vanlig å gruppere etter ulike bruks-områder.

12 Typer av SQL-kommandoer (2)
Data Definition Commands ( DDL ) CREATE EVENT CREATE INDEX CREATE SYNONYM CREATE TABLE CREATE TRIGGER CREATE VIEW PROCEDURE Data Manipulation Commands ( DML ) DELETE INSERT UPDATE Data Query Commands ( DQL ) SELECT

13 Typer av SQL-kommandoer (3)
Transaction Control Commands COMMIT ROLLBACK SAVEPOINT Data Administration Commands AUDIT MESSAGE START AUDIT STOP AUDIT

14 Typer av SQL-kommandoer (4)
Data Control Commands (1) ALTER DATABASE ALTER DBAREA ALTER PASSWORD ALTER STOGROUP ALTER TABLE ALTER TRIGGER CHECK DATABASE CHECK TABLE COMMENT ON

15 Typer av SQL-kommandoer (5)
Data Control Commands (2) CREATE DATABASE CREATE DBAREA CREATE EVENT CREATE INDEX CREATE STOGROUP CREATE SYNONYM CREATE TABLE CREATE TRIGGER CREATE VIEW

16 Typer av SQL-kommandoer (6)
Data Control Commands (3) DBATTRIBUTE DEINSTALL DATABASE DROP DBAREA DROP EVENT DROP INDEX DROP STOGROUP DROP SYNONYM DROP TABLE DROP TRIGGER DROP VIEW GRANT GRANT EXECUTE ON INSTALL DATABASE LABEL LOAD LOCK DATABASE

17 Typer av SQL-kommandoer (7)
Data Control Commands (4) REVOKE REVOKE EXECUTE ON ROWCOUNT SET DEFAULT STOGROUP UNLOAD UNLOCK DATABASED UPDATE STATISTICS

18 Interaktivt vha et interface-program
Bruksmåte Interaktivt vha et interface-program Innebygget i et programmerings-språk Relasjonsdatabase-språket er det vanlig å bruke på to hovedmåter: - Interaktivt ved at brukeren selv eksplisitt skriver SQL-statementene. - SQL-statementene innebygges i et høgnivåspråk eller annet utviklings-verktøy. Med et godt grensesnitt vil SQL på denne måten være enklere å bruke ved at brukeren stort sett benytter seg av kun pek og klikk. Ingen SQL-kunnskaper er nødvendig for brukeren.

19 Salg-tabell - 1NF SNr Navn Sted PNr VNr Pris Mengde
5 Nilsen Bergen 2 Olsen Molde 2 Olsen Molde 1 Hansen Tromsø 1 Hansen Tromsø 4 Berg Molde 4 Berg Molde 4 Berg Molde I denne slide-serien skal vi vise eksempler med bruk av SQL på databasen Handel som inneholder de fire tabellene Selger - Adr - Vare - Salg. Tabellene er enkle slik at det er enkelt å verifisere (kontrollere) resultatene fra et SQL-statement. Tabellen ovenfor er en 1NF tabell som på neste side er splittet i de fire nevnte tabellene hvor alle er på 3NF. SNr Selger-nummer Navn Selger-navn Sted Arbeids-sted for selger PNr Post-nummer (for Sted) VNr Vare-nummer Pris Vare-pris Mengde Antall solgte vare-enheter

20 Salg-tabeller - 3NF Selger (ID = SNr) Adr (ID = PNr) Vare (ID = VNr)
SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø VNr Pris Salg (ID = SNr + VNr) SNr VNr Mengde ID Fremmed- nøkkel Fire 3NF tabeller fra databasen Handel.

21 Salg-tabeller - 3NF Selger Adr Vare Salg
1:n relasjonene mellom de fire Handel-tabellene Selger - Adr - Vare - Salg.

22 Database / Tabell / Rad / Kolonne
5 Nilsen 2 Olsen 1 Hansen 4 Berg Rad Post Record Kolonne Felt En del viktige begrep: - Database - Tabell - Rad / Post / Record - Kolonne / Felt

23 Partisjonering av en database
Vol_1 Vol_2 Step 1: Opprett DatabaseArea Handel_1 Handel_3 Handel_2 StorageGroup Handel_Files StorageGroup Handel_Log Step 2: Opprett StorageGroup Handel_1 Handel_3 Handel_2 Data Log filer Step 3: Opprett Database Handel_3 Handel_1 Databasen Handel Handel_2

24 CREATE DBAREA Oppretter et fysisk database-område av gitt størrelse i megabyte (default 1MB) CREATE DBAREA dbarea name AS filename SIZE megabyte Vol_1 Vol_2 CREATE DBAREA Handel_1 AS Vol_1:\Centura\Handel_1 SIZE 5 CREATE DBAREA Handel_2 AS Vol_1:\Centura\Handel_2 SIZE 10 CREATE DBAREA Handel_3 AS Vol_2:\Centura\Handel_3 SIZE 10 Handel_1 Handel_3 Handel_2

25 CREATE STOGROUP Oppretter en storage group
CREATE STOGROUP stogroup name , USING dbarea-name StorageGroup Handel_Files StorageGroup Handel_Log CREATE STOGROUP Handel_Files USING Handel_1, Handel_2 CREATE STOGROUP Handel_Log USING Handel_3 Handel_1 Handel_3 Handel_2

26 CREATE DATABASE Oppretter en database CREATE DATABASE databasename
IN stogroup name LOG TO stogroup name Databasen Handel Data Log filer CREATE DATABASE Handel IN Handel_Files LOG TO Handel_Log Handel1 Handel_3 Handel_2

27 CREATE TABLE <TableName>
Oppretter en tabell CREATE TABLE <TableName> (<ColumnName> <DataType>[<Size>], <ColumnName> <DataType>[<Size>], ...) Database Syntaks for SQL-kommandoen CREATE TABLE for oppretting av en tabell i en tilkoblet database. Hver kolonne i tabellen må ha et navn og en datatype. I tillegg kan andre tilleggsopplysninger om enkelt-kolonner oppgis, f.eks. størrelse (size) som viser antall tegn eller siffer i en kolonne. Tabell_1 Tabell_2 Tabell_3

28 Oppretting av Salg-tabeller - Adr
Adr (ID = PNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø CREATE TABLE Adr ( PNr Integer NOT NULL, Sted Char(20), PRIMARY Key(PNr) ) CREATE UNIQUE INDEX AdrNdx ON Adr(PNr) Oppretting av tabellen Adr. Tabellen inneholder to kolonner: PNr (PostNummer) og Sted. PNr er av datatypen Integer (heltall) Sted kan inneholde inntil 20 tegn. PNr danner ID i denne tabellen. ID-kolonner må alltid ha data, derfor NOT NULL bak denn kolonnen. Andre kolonner kan også ha NOT NULL hvis ønskelig. PRIMARY KEY medfører (sammen med UNIQUE INDEX) at PNr skal være ID i denne tabellen. AdrNdx er navnet på den indeksen som er knyttet til kolonnen PNr i tabellen Adr. Indeksen må være UNIQUE siden PNr er ID. Indekser på andre kolonner (som ikke er entydigie) må ikke ha UNIQUE. Store og små bokstaver kan benyttes fritt, men det anbefales at SQL-reserverte ord skrives med store bokstaver.

29 Oppretting av Salg-tabeller - Selger
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg CREATE TABLE Selger ( SNr Integer NOT NULL, Navn Char(20), PNr Integer, PRIMARY KEY(SNr), FOREIGN KEY(PNr) REFERENCES Adr ON DELETE RESTRICT ) CREATE UNIQUE INDEX SlgNrNdx ON Selger(SNr) CREATE INDEX SlgNaNdx ON Selger(Navn) ID Fremmednøkkel Oppretting av tabellen Selger. SNr danner ID. Derfor NOT NULL i denne kolonnen, PRIMARY Key(SNr) og CREATE UNIQUE INDEX på denne kolonnen. Kolonnen PNr danner koblingen mot tabellen Adr og er en fremmednøkkel (FOREIGN KEY) i tabellen Selger (siden PNr er ID i tabellen Adr). De to kolonnene (PNr) i tabellene Selger og Adr trenger ikke ha samme navn i de to tabellene. REFERENCES Adr ON DELETE RESTRCT betyr at forsøk på å slette poster i foreldre-tabellen (her Adr) avslås hvis det finnes tilhørende poster i barne-tabellen (her Selger). Kolonnen Navn og også tillagt en indeks slik at søk på navn kan foregå raskt. Denne indeksen må ikke være UNIQUE siden flere ulike selgere kan ha like navn. Tabellen Adr må opprettes før tabellen Selger fordi Selger inneholder en fremmednøkkel som er koblet mot Adr.

30 Oppretting av Salg-tabeller - Vare
Vare (ID = VNr) VNr Pris CREATE TABLE Vare ( VNr Integer NOT NULL, Pris Integer, PRIMARY Key(VNr) ) CREATE UNIQUE INDEX VareNdx ON Vare(VNr) Oppretting av tabellen Vare. Kolonnen VNr danner ID.

31 Oppretting av Salg-tabeller - Salg
Salg (ID = SNr + VNr) SNr VNr Mengde CREATE TABLE Salg ( SNr Integer NOT NULL, VNr Integer NOT NULL, Mg Integer, PRIMARY KEY(SNr,VNr), FOREIGN KEY(SNr) REFERENCES Selger ON DELETE RESTRICT, FOREIGN KEY(VNr) REFERENCES Vare ON DELETE RESTRICT ) CREATE UNIQUE INDEX SalgNdx ON Salg(SNr,VNr) Oppretting av tabellen Salg. SNr og VNr danner tilsammen ID. Hver av disse er hver for seg fremmednøkler i tabelln Salg (SNr er ID i Selger og VNr er ID i Vare. UNIQUE INDEX må nå omfatte både SNr og VNr som en samlet enhet.

32 Data-typer ( SQLBase ) Char(length) Max 254 tegn
VarChar(length) Max 254 tegn Long VarChar Vilkårlig lengde, tekst og binære data SmallInt [-32768, ] 5 siffer Integer [ , ] 10 siffer Decimal[(prec, scale)] [ , ] 15 siffer precision: Totalt ant siffer (5 default) scale: Ant desimaler (0 default) Float[prec] Vilkårlig tall opp til 15 siffer totalt Number Vilkårlig tall opp til 15 siffer totalt DateTime Format Day.Time Day ant dager siden Time = Frac part (0 = 12:00 AM) TimeStamp Samme som DateTime (DB2 komp.) Date Time part = 0 Time Date part = 0 Ulike datatyper i SQLBase.

33 Innsetter en rad i en tabell
INSERT Innsetter en rad i en tabell INSERT table name view name , ( column name ) VALUES ( constant ) bind variable ADJUSTING cursor name system keyword subselect

34 INSERT - Eksempel Adr (ID = PNr) PNr Sted 5002 Bergen 6400 Molde
9000 Tromsø INSERT INTO Adr VALUES (5002,”Bergen”) INSERT INTO Adr VALUES (6400,”Molde”) VALUES (9000,”Tromsø”)

35 INSERT - Eksempel Adr (ID = PNr) PNr Sted 5002 Bergen 6400 Molde
9000 Tromsø INSERT INTO Adr (PNr,Sted) VALUES(:1,:2) \ $DATATYPES NUMERIC,CHARACTER 5002,Bergen 6400,Molde 9000,Tromsø /

36 Innsetting av tabell-verdier - Adr
Adr (ID = PNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø INSERT INTO Adr VALUES (5002,”Bergen”) INSERT INTO Adr VALUES (6400,”Molde”) VALUES (9000,”Tromsø”) Innsetting av data i tabellen Vare. SQL-kommandoen INSERT benyttes.

37 Innsetting av tabell-verdier - Adr
Adr (ID = PNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø INSERT INTO Adr (PNr,Sted) VALUES(:1,:2) \ $DATATYPES NUMERIC,CHARACTER 5002,Bergen 6400,Molde 9000,Tromsø / SQLBase gir i tillegg til bruk av standard INSERT også muligheten til å kjøre flere rader inn for hver INSERT. Merk: Tekst-data skal ikke omsluttes av anførselstegn. Ingen space (blanke mellom rom) kan benyttes.

38 Innsetting av tabell-verdier - Selger
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg INSERT INTO Selger (SNr,Navn,PNr) VALUES(:1,:2,:3) \ $DATATYPES NUMERIC,CHARACTER 5,Nilsen,5002 2,Olsen,6400 1,Hansen,9000 4,Berg,6400 / Innsetting av data i tabellen Selger (bruk av spesiell INSERT i SQLBase).

39 SELECT SELECT SelectItem ALL , DISTINCT * FROM TableSpecification ,
WHERE SearchCondition GROUP BY GroupingColumn HAVING SearchCondition ORDER BY SortSpecification

40 Select - Enkel bruk SELECT SNr, Navn, PNr FROM Selger
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 2 Olsen 1 Hansen 9000 4 Berg Enkel bruk av SELECT. Farge-bruk: - Rød SQL-statement - Blå Database-tabell - Gul Resultat-sett Bak SELECT er spesifisert de kolonnene som vi ønker i vårt output (her SNr, Navn og PNr i denne rekkefølge). Bak FROM spesifiseres hvilke(n) tabell(er) dataene skal hentes fra (her kun tabellen Selger). Store og små bokstaver kan brukes om hverandre, men det anbefales å benytte store bokstaver for reserverte SQL-ord. SELECT-statementet er delt på to linjer og innrykk er benyttet. Dette er ikke nødvendig, men det øker lesbarheten. Resultatsett

41 Select Kvalifiserte kolonne-navn
SELECT Selger.SNr, Selger.Navn, Selger.PNr FROM Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 2 Olsen 1 Hansen 9000 4 Berg Kolonne-kvalifisering. Vi kan (hvis ønskelig, og må hvis nødvendig) kvalifisere hver enkelt kolonne ved å prefikse kolonnene med tabell-navn etterfulgt av punktum. Slik kvalifisering er ikke nødvendig i dette eksemplet, men er påkrevd hvis data skal hentes fra flere tabeller og output inneholder kolonne(r) hvor kolonne-navn er felles i mer enn en av de involverte tabellene.

42 SELECT - Bruk av * SELECT * FROM Selger Selger (ID = SNr) SNr Navn PNr
5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 2 Olsen 1 Hansen 9000 4 Berg Hvis alle kolonnene i en tabell skal være med i output, kan * benyttes istedet for å liste opp samtlige kolonner. Hvis * benyttes når flere tabeller er involvert, så vil samtlige kolonner fra alle tabellene bli med i output.

43 SELECT - Enkelt-felter
SELECT PNr, Navn FROM Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg PNr Navn 5002 Nilsen 6400 Olsen 9000 Hansen 6400 Berg Utlisting av kolonnene PNr og Navn (i denne rekkefølge) fra tabellen Selger.

44 SELECT - Distinct SELECT DISTINCT SNr FROM Salg Salg (ID = SNr + VNr)
SNr VNr Mengde SNr 1 2 4 5 Skriv ut samtlige ulike (vha DISTINCT) SNr fra tabellen Salg. Hvis flere kolonner skal være med i output, vil DISTINCT gjelde alle disse kolonnene. Hvis flere felter nevnes i Select-statementet, vil Distinct gjelde alle disse, dvs kun de rader hvor alle de nevnte feltene er like medfører sløyfing av duplikate rader. Distinct er hensiksmessig i tilknytning til sub-queries.

45 WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 2 Olsen 4 Berg Betingelser (vha WHERE) i et SQL-statement. Her listes ut SNr, Navn og PNr fra tabellen Selger for de av selgerne hvor PNr (postnummer) er lik 6400. To rader oppfyller betingelsen.

46 WHERE SELECT VNr, Pris FROM Vare WHERE Pris > 300 Vare (ID = VNr)
VNr Pris Utlisting av poster fra tabellen Vare hvor vare-prisen er større enn 300.

47 WHERE SELECT SNr, Navn, PNr FROM Selger
WHERE PNr = 6400 AND Navn > ‘C’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 2 Olsen Utlisting av SNr, Navn og PNr fra tabellen Selger når både betingelsen PNr = 6400 og betingelsen Navn > ‘C’ er oppfylt.

48 WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 OR SNr > 3
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 2 Olsen 4 Berg Utlisting av SNr, Navn og PNr fra tabellen Selger når minst en av betingelsene PNr = 6400 eller SNr > 3 er oppfylt.

49 WHERE SELECT SNr, Navn, PNr FROM Selger
WHERE PNr = 6400 OR NOT SNr > 3 Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 2 Olsen 1 Hansen 9000 4 Berg Utlisting av SNr, Navn og PNr fra tabellen Selger når minst en av betingelsene PNr = 6400 eller NOT SNr > 3 er oppfylt. NOT SNr > 3 er det samme som SNr <= 3.

50 SQL - 3-verdi logikk True WHERE-test Ok ved True False
NULL WHERE-test Ok ved True GROUP BY -test Ok ved True og NULL A op B AND True False NULL True True False NULL False False False False NULL NULL False NULL OR True False NULL True True True True False True False NULL NULL True NULL NULL I de fleste tilfeller fra dagliglivet er vi vant til at et utsagn er enten sant eller galt. De finnes imidlertid mange tilfeller hvor vi må ta hensyn til flere muligheter. Fra matematikken er det vel kjent at vi har mange såkalte uavgjørbare utsagn, dvs utsagn som hverken er sanne eller gale. Eks: Lag mengden bestående av alle mengder som ikke er inneholdt i seg selv. Så spør vi: Er denne mengden inneholdt i seg selv eller er den ikke. Svarer vi ja, så blir svaret galt. Svarer vi nei, blir svaret galt. I database-sammenheng må vi ta hensyn til såkalte NULL-felt, dvs felt hvor det mangler data. Når vi skal ta sammensatte utsagn (med AND, OR, NOT, …) når slike NULL-felt er involvert, får vi resultater (True, False og NULL) som vist ovenfor. Legg merke til at WHERE-statement er ok kun ved resultat True, mens GROUP BY-statement er ok både ved resultat True og NULL. Det siste henger sammen med at vi ønsker såkalte NULL-grupper med i output. NOT True False NULL False True NULL

51 IN SELECT PNr, Sted FROM Adr WHERE Sted IN (‘Molde’,Tromsø’)
Adr (ID = PNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø PNr Sted Molde Tromsø List ut PNr og Sted fra tabellen Adr hvor Sted er med i mengden bestående av Molde og Tromsø.

52 BETWEEN SELECT SNr, Navn, PNr FROM Selger WHERE SNr BETWEEN 1 AND 4
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 2 Olsen 1 Hansen 9000 4 Berg List ut SNr, Navn og PNr fra tabellen Selger hvor SNr ligger mellom 1 og 4 (1 og 4 inkludert).

53 Joker-symbol % og _ SELECT SNr, Navn, PNr FROM Selger
WHERE Navn LIKE ‘N%’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 Hvis vi skal søke på navn, vil vi ofte være usikre på stavelsen av navnet. Hvis vi er sikre på at navnet begynner på N, men er usikre på resten, kan vi i WHERE-statementet bytte ut likehetstegnet (=) med LIKE og skrive videre ‘N%’. Tegnet % står for ‘hva som helst’, dvs alle navn som begynner på ‘N’ vil bli skrevet ut.

54 Joker-symbol % og _ SELECT SNr, Navn, PNr FROM Selger
WHERE Navn LIKE ‘%sen’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 2 Olsen 1 Hansen 9000 Utskrift av alle navn (i tillegg til SNr og PNr) som slutter på ‘sen’.

55 Joker-symbol % og _ SELECT SNr, Navn, PNr FROM Selger
WHERE Navn LIKE ‘Ni%sen’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 Utskrift av alle navn som begynner på ‘N’ og slutter på ‘sen’.

56 Joker-symbol % og _ SELECT SNr, Navn, PNr FROM Selger
WHERE Navn LIKE ‘Ni_sen’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen Utskrift av alle navn som begynner på ‘Ni’ og som slutter på ‘sen’ og som har nøyaktig ett tegn mellom ‘Ni’ og ‘sen’.

57 Joker-symbol % og _ SELECT SNr, Navn, PNr FROM Selger
WHERE Navn LIKE ‘Ni/_%’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr Hvis underscore ( _ ) som markerer ett enkelt tegn selv skal være med i navnet, må _ prefikses med slash ( / ).

58 Joker-symbol % og _ SELECT SNr, Navn, PNr FROM Selger
WHERE Navn LIKE ‘Ni//%’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr Hvis slash ( / ) selv skal være med i navnet, må slash selv prefikses med en slash.

59 NULL SELECT SNr, Navn, PNr FROM Selger WHERE PNr IS NULL
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr List ut alle rader fra tabellen Selger hvor feltet PNr er tomt (NULL).

60 NULL SELECT SNr, Navn, PNr FROM Selger WHERE PNr IS NOT NULL
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg List ut aller rader fra tabellen Selger hvor feltet PNr inneholder data (er NOT NULL).

61 Aggregat-funksjoner - Sum
SELECT SUM(Mg) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Sum(Mg) 290 List ut summen av alle verdiene i kolonnen Mg i tabellen Salg.

62 Aggregat-funksjoner - Avg
SELECT AVG(Mg) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Avg(Mg) 36.25 List ut gjennomsnittsverdien av alle verdiene i kolonnen Mg i tabellen Salg. Mg-felter som ikke inneholder data (NULL) blir ikke regnet med i gjennomsnittsverdien.

63 Aggregat-funksjoner - COUNT
SELECT COUNT(*) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Count(*) 8 List ut totalt antall rader i tabellen Salg.

64 Aggregat-funksjoner Count Null-verdier i kolonne-funksjoner
SELECT COUNT(*), COUNT(Navn), COUNT(Adr) FROM Person Navn Adr Nilsen Storgt 3 Havnegt 7 Hansen Gågata 20 Berg Knutsen Storgt 3 Olsen Ekornv 4 Persen Madsen Svingen 8 COUNT(*) COUNT(Navn) COUNT(Adr) COUNT(*) Lister ut totalt antall rader (her 8) i tabellen Person. COUT(Navn) Lister ut totalt antall rader (her 7) hvor det er plassert data i feltet Navn. COUNT(Adr) Lister ut totalt antall rader (her 6) hvor det er plassert data i feltet Adr.

65 Aggregat-funksjoner Count / Distinct
SELECT COUNT(Adr), COUNT(DISTINCT Adr), FROM Person Navn Adr Nilsen Storgt 3 Havnegt 7 Hansen Gågata 20 Berg Knutsen Storgt 3 Olsen Ekornv 4 Persen Madsen Svingen 8 COUNT(Adr) COUNT(DISTINCT Adr) COUNT(Adr) Lister ut totalt antall rader (her 6) hvor det er plassert data i feltet Navn. COUNT(DISTINCT Adr) Lister ut totalt antall rader (her 5) hvor det er plassert ulike (og samtidig ikke NULL) verdier i feltet Adr.

66 Aggregat-funksjoner - Count / Distinct
SELECT COUNT(DISTINCT Mg) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Count(Distinct Mg) 6 Lister ut totalt antall ulike varemengder fra kolonnen Mg i tabellen Salg.

67 Aggregat-funksjoner - Max
SELECT MAX(Mg) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Max(Mg) 70 Lister ut største verdien i kolonnen Mg i tabellen Salg.

68 Aggregat-funksjoner - Min
SELECT MIN(Mg) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Min(Mg) 10 Lister ut minste verdi i kolonnen Mg i tabellen Salg.

69 Aggregat-funksjoner - Max
SELECT MAX(SNr+VNr) FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde Max(SNr+VNr) 13 Lister ut største sum av verdiene SNr og VNr i en rad i tabellen Salg.

70 Group By SELECT SNr, MAX(Mg) FROM Salg GROUP BY SNr SNr VNr Mengde
Salg (ID = SNr + VNr) SNr VNr Mengde SNr Max(Mg) GROUP BY benyttes til å dele output opp i grupper og samtidig benytte aggregatfunksjoner. I eksemplet ovenfor grupperes de enkelte radene i Salg-tabellen på SNr. For hver SNr (for hver selger) skrives ut den raden som har høyest Mg. Resultatet er vist i den gule tabellen til høyre. Den midterste (grønne) tabellen er kun tatt med som en slags mellomregning. GROUP BY krever at de samme kolonnene (her SNr) (borstett fra aggregatfunksjonene) står oppført både i SELECT-listen og i GROUP BY listen.

71 Group By SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr
Salg (ID = SNr + VNr) SNr VNr Mengde SNr VNr Max(Mg) List ut største verdi av Mg gruppert på hver enkelt selger og innenfor hver enkelt selger på VNr. Eksemplet er litt spesielt og gir her som output hele tabellen Salg. Derimot ser vi tydelig at resultatene er gruppert.

72 Group By / Having SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr
HAVING MAX(Mg) > 30 Salg (ID = SNr + VNr) SNr VNr Mengde SNr VNr Max(Mg) HAVING setter betingelser på hver enkelt gruppe i motsetning til WHERE som setter betingelser på hver enkelt rad.

73 Uttrykk SELECT VNr, Pris*1.5 FROM Vare Vare (ID = VNr) VNr Pris
VNr Pris*1.5 List ut VNr og Pris*1.5, dvs prisen i output er justert opp med 50% i forhold til prisen i tabell-kolonnen.

74 Tekst-plassering i utlisting
SELECT VNr, Pris, ‘Kr’ FROM Vare Vare (ID = VNr) VNr Pris VNr Pris ‘Kr’ Kr Kr Kr Kr Teksten Kr påføres bakerst på hver rad i tillegg til VNr og Pris.

75 Order By SELECT SNr, Navn, PNr FROM Selger ORDER BY SNr
Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 1 Hansen 9000 2 Olsen 4 Berg 5 Nilsen 5002 Sortering i stigende rekkefølge på kolonnen SNr.

76 Order By Asc / Desc SELECT SNr, Navn, PNr FROM Selger
ORDER BY PNr ASC, SNr DESC Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 5 Nilsen 5002 4 Berg 2 Olsen 1 Hansen 9000 Sortering i stigende rekkefølge på kolonnen PNr, deretter i synkende rekkefølge på kolonnen SNr, dvs innenfor hver enkelt gruppe med lik PNr sorteres radene i synkende rekkefølge på SNr.

77 Order By / Group By SELECT SNr, VNr, MAX(Mg) FROM Salg
GROUP BY SNr, VNr ORDER BY VNr Salg (ID = SNr + VNr) SNr VNr Mengde SNr VNr Max(Mengde) Gruppene SNr / VNr sortert i stigende rekkefølge på VNr.

78 Kolonne-nummer-sortering
SELECT SNr, Navn, PNr FROM Selger ORDER BY 3 DESC Selger (ID = SNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr Navn PNr 1 Hansen 9000 2 Olsen 4 Berg 5 Nilsen 5002 Sortering i synkende rekkefølge på kolonne nr 3, dvs kolonnen PNr i tabellen Selger.

79 Join Selger (ID = SNr) Adr (ID = PNr) SNr Navn PNr 5 Nilsen 5002
2 Olsen 1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SELECT Selger.Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNrID Navn PNr Sted Hansen Tromsø Olsen Molde Berg Molde Nilsen Bergen Med Join menes søking etter data i mer enn en enkelt tabell. Vi ønsker her output med oversikt over Navn, PNr og Sted for hver enkelt selger. Navn og PNr kan vi finne i tabellen Selger, mens Sted finnes i tabellen Adr. Når vi skal søke i flere tabeller samtidig (her Selger og Adr), lister vi disse opp (adskilt med komma) bak FROM. Rekkefølgen på disse tabellene er vilkårlig. Videre må vi i WHERE-statementet koble disse tabellen korrekt, dvs vi må her forlange at kolonnen PNr i Selger-tabellen og kolonnen PNr i Adr-tabellen stemmer overens. Uten denne betingelsen ville vi få som output alle radkombinasjoner mellom rader i Selger og rader i Adr, dvs tilsammen 3*4 = 12 rader. I SELECT-listen bør kolonne-navnene kvalifiseres med tilhørende tabell-navn.

80 Join - Produkt-tabell Selger SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400
1 Hansen 4 Berg Selger Adr SNr Navn PNr PNr Sted 5 Nilsen Bergen 2 Olsen Bergen 1 Hansen Bergen 4 Berg Bergen 5 Nilsen Molde 2 Olsen Molde 1 Hansen Molde 4 Berg Molde 5 Nilsen Tromsø 2 Olsen Tromsø 1 Hansen Tromsø 4 Berg Tromsø Adr PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Ovenfor ser vi output (12 rader) ved Join mellom Selger og Adr når vi utelater tabell-koblingen i WHERE-statementet. SELECT Selger.SNr, Selger.Navn, Selger.PNr Adr.Sted FROM Selger, Adr

81 Join Selger Adr SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000
4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Selger Adr SNr Navn PNr Sted 5 Nilsen Bergen 2 Olsen Bergen 1 Hansen Bergen 4 Berg Bergen 5 Nilsen Molde 2 Olsen Molde 1 Hansen Molde 4 Berg Molde 5 Nilsen Tromsø 2 Olsen Tromsø 1 Hansen Tromsø 4 Berg Tromsø * SELECT Selger.Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr Her er koblingen mellom Selger og Adr satt på igjen. Blant de 12 radene som er output når tabell-koblingen er utelatt, er uthevet med rød farge de PNr-verdiene som ikke stemmer overens i de to tabellene. I output gjenstår da kun de radene som er markert med *. Feilkoblinger ( PNr) markert med rødt felt. Gjenstående korrekte poster i resultatsett markert med * .

82 Join SELECT Selger.Navn, Adr.Sted Vare.VNr, Vare.Pris Salg.Mg
FROM Selger, Adr, Vare, Salg WHERE Selger.PNr = Adr.PNr AND Salg.SNr = Selger.SNr AND Salg.VNr = Vare.VNr Navn Sted VNr Pris Mg Nilsen Bergen Olsen Molde Olsen Molde Berg Molde Berg Molde Bergn Molde Hansen Tromsø Hansen Tromsø Ovenfor søkes etter data i alle fire tabellene Selger, Adr, Vare og Salg. Mellom disse finnes i alt 3 1:n relasjoner, dvs 3 koblinger og disse finner vi igjen i WHERE-statementet.

83 Join - Kobling av en tabell mot seg selv
SELECT First.Navn, Sec.Navn, First.PNr FROM Selger First, Selger Sec WHERE First.PNr = Sec.PNr Selger (ID = SNr) First.Navn Sec.Navn First.PNr Nilsen Nilsen Olsen Olsen Berg Olsen Hansen Hansen Olsen Berg Berg Berg SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg Kobling av en tabell mot seg selv. Siden tabellen Selger skal kobles mot seg selv, må vi lage to alias-navn (her First og Sec) for denne tabellen.

84 Join - Kobling av en tabell mot seg selv (uten dublering)
SELECT First.Navn, Sec.Navn, First.PNr FROM Selger First, Selger Sec WHERE First.PNr = Sec.PNr AND First.Navn < Sec.Navn Selger (ID = SNr) First.Navn Sec.Navn First.PNr Berg Olsen SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg Her er antall rader i output ved kobling av tabellen Selger mot seg selv redusert ved at en tilleggsbetingelse er lagt på.

85 Join - Kobling av en tabell mot seg selv
Tilsatt First Sec Nr Navn Sjef 105 Adams 112 107 Smith 105 110 Clark 112 Cruz 115 Jones Nr Navn Sjef 105 Adams 112 107 Smith 105 110 Clark 112 Cruz 107 115 Jones 112 Nr Navn Sjef 105 Adams 112 107 Smith 105 110 Clark 112 Cruz 107 115 Jones 112 SELECT First.Navn, Sec.Navn FROM Tilsatt First, Tilsatt Sec WHERE First.Sjef = Sec.Nr Navn Sjef Smith Adams Cruz Smith Adams Cruz Jones Cruz Kobling av en tabell mot seg selv. Tabellen Tilsatt inneholder opplysninger om samtlige tilsatte og hvem som er sjef for hver enkelt tilsatt. Vi ønsker å liste ut navnene på hver enkelt tilsatt samt navn på sjef for hver av disse tilsatte. Vi lager to alias’er First og Sec for tabellen Tilsatt. Hvis vi i output ønsker tilsatt-navn i venstre kolonne og sjef-kolonne til høyre, er det viktig at WHERE-statementet er First.Sjef = Sec.Nr og ikke First.Nr = Sec.Sjef . List ut alle tilsatte med tilhørende sjef

86 Join uten Parent / Child relasjon
Tilsatt Ordre Navn TilsattDato Adams Jones Smith Clark Cruz OrdreNr Dato Belop Ordre SELECT Ordre.OrdreNr FROM Tilsatt, Ordre WHERE Ordre.Dato = Tilsatt.TilsattDato AND Tilsatt.Navn = ‘Adams’ OrdreNr 11296 15900 I eksemplet ovenfor lister vi ut alle ordre som er registrert samme dato som Adams ble tilsatt. Eksemplet viser Join mellom to tabeller som i utgangspunktet ikke er koblet ved hjelp av fremmednøkler. Lister ut alle ordre som ble ekspedert samme dato som Adams ble tilsatt.

87 Join m/NULL-verdier Selger Adr SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400
1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SELECT Navn, PNr FROM Selger Navn PNr Nilsen Olsen Hansen Berg Hva med Join (kobling mellom tabeller) hvis en eller flere av koblings-kolonnene mangler data (NULL-verdier). Uten å spesifisere kobling vha WHERE vil resultatet, ikke uventet, bli som vist ovenfor. List selgere med tilhørende postnummer

88 Join m/NULL-verdier Selger Adr SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400
1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr Navn Sted Nilsen Bergen Olsen Molde Berg Molde Ved NULL-kolonner og tabell-kobling vha WHERE vil radene med NULL-verdier i koblings-kolonnene utebli fra resultatsettet. List selgere med tilhørende postnummer Hansen mangler

89 Join - Outer Join ANSI standard
Selger Adr SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr *= Adr.PNr Navn Sted Nilsen Bergen Olsen Molde Hansen Berg Molde Vha såkalt Outer Join vil rader med NULL-verdier i koblings-kolonner kunne bli med i resultatsettet slik som vist ovenfor. Syntaksmessig (standard SQL) plasseres tegnet * rett til venstre for likhetstegnet i WHERE-koblingen når den først-nevnte tabellen i koblingen inneholder NULL-verdi koblings-kolonne. List selgere med tilhørende postnummer

90 Join - Outer join SQLBase
Selger Adr SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr (+) Navn Sted Nilsen Bergen Olsen Molde Hansen Berg Molde Outer Join markeres i standard SQL vha * plassert like ved likhetstegnet i WHERE-koblingen. I databasen SQLBase markeres dette istedet ved tegnet + plassert i parentes bak den sistnevnte koblings-kolonnen. List selgere med tilhørende postnummer

91 Join - Outer join SQLBase NULLVALUE
Selger Adr SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SELECT FROM Selger, Adr WHERE Selger.PNr = Adr.PNr (+) Navn Sted Nilsen Bergen Olsen Molde Hansen Ukjent Berg Molde Hvis vi i output ønsker en bestemt tekst (her Ukjent) i NULL-verdi kolonnen ved Outer Join, kan benyttes. List selgere med tilhørende postnummer

92 Join - Left / Right / Complete
1. Begynn med inner join med matchende kolonner 2. For hver rad i den første tabellen som ikke matcher en rad i den andre tabellen (pga NULL i første tabell), adder til en rad med verdier fra den første tabellen og NULL-verdier fra den andre tabellen. 3. For hver rad i den andre tabellen som ikke matcher en rad i den første tabellen (pga NULL-verdier i andre tabell), adder til en rad med verdier fra den andre tabellen og NULL-verdier fra den første tabellen. Outer join Step ANSI syntaks SQLBase Left Step c1 *= c2 c1 = c2 (+) Right Step c1 =* c2 c1 (+) = c2 Full Step c1 *=* c2 c1 (+) = c2 (+) Ovenfor vises reglene ved Outer Join med NULL-verdi kolonner både i den førstnevne og den sistnevnte kolonnen.

93 Multiple Query-nivåer
SELECT SNr, VNr, Mg FROM Salg WHERE SNr = ( SELECT SNr FROM Selger WHERE Navn = ‘Hansen’) Selger (ID = SNr) Salg (ID = SNr + VNr) SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SNr VNr Mengde SNr VNr Mg SQL-statement kan skrives i flere nivåer. Dette kalles Multiple Query-nivåer. I statementet ovenfor med WHERE SNr = … må resultatsettet fra påfølgende SELECT-statement ikke inneholde mer enn en enkelt rad. Hvis resultat-settet kan inneholde mer enn en enkelt rad, må statement-delen byttes ut med WHERE SNr IN ...

94 Multiple Quer-nivåer - Join
Selger (ID = SNr) Multippel Query-nivå SNr Navn PNr 5 Nilsen 2 Olsen 1 Hansen 4 Berg SELECT SNr, VNr, Mg FROM Salg WHERE SNr = ( SELECT SNr FROM Selger WHERE Navn = ‘Hansen’) Salg (ID = SNr + VNr) SNr VNr Mengde Join SELECT Salg.SNr, Salg.VNr, Salg.Mg FROM Salg, Selger WHERE Selger.SNr = Salg.SNr AND Selger.Navn = ‘Hansen’ Ovenfor er to likeverdige SQL-statement. Første statement benytter muliple query-nivåer, mens andre statement benytter join.

95 Multiple Query-nivåer - EXISTS
Vare (ID = VNr) Salg (ID = SNr + VNr) Vare (ID = VNr) VNr Pris SNr VNr Mengde VNr Pris SELECT Vare.VNr, Vare.Pris FROM Vare WHERE EXISTS ( SELECT Salg.VNr FROM Salg WHERE Salg.VNr = Vare.VNr ) Exists. List ut fra vare-tabellen vare-nummer inkludert pris for alle varene som er blitt solgt.

96 View Selger (ID = SNr) Adr (ID = PNr) SNr Navn PNr 5 Nilsen 5002
2 Olsen 1 Hansen 4 Berg PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø SelgerAdr Selger Adr SNr Navn PNr Sted 5 Nilsen Bergen 2 Olsen Molde 1 Hansen Tromsø 4 Berg Molde Et view er en virtuell (tenkt) tabell og kan være en del av en tabell eller en sammensetning av flere tabeller. CREATEVIEW benyttes for å lage et view. CREATE VIEW SelgerAdr AS SELECT Selger.SNr, Selger,Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Adr.PNr = Selger.PNr

97 View SELECT SNr, Navn, PNr, Sted FROM SelgerAdr SelgerAdr Selger Adr
5 Nilsen Bergen 2 Olsen Molde 1 Hansen Tromsø 4 Berg Molde SNr Navn PNr Sted 5 Nilsen Bergen 2 Olsen Molde 1 Hansen Tromsø 4 Berg Molde SELECT-statement benyttet på view’et SelgerAdr.

98 View CREATE VIEW SelgerTot AS
SELECT Selger.SNr, Selger.Navn, Selger.PNr, Adr.Sted, Salg.Mg, Vare.VNr, Vare.Pris FROM Selger, Adr, Vare, Salg WHERE Adr.PNr = Selger.PNr AND Salg.SNr = Selger.SNr AND Salg.VNr = Vare.VNr SNr Navn PNr Sted Mg VNr Pris 1 Hansen Tromsø 1 Hansen Tromsø 2 Olsen Molde 2 Olsen Molde 4 Berg Molde 4 Berg Molde 4 Berg Molde 5 Nilsen Bergen Et view bestående av sammensetning av tabellene Selger, Adr, Vare og Salg.

99 UPDATE UPDATE table name view name correlation name
Oppdaterer en tabell UPDATE table name view name correlation name SET column name = expression NULL WHERE search condition CHECK EXISTS CURRENT OF cursor name

100 Oppdatering av databasen
UPDATE Vare SET Pris = 450 WHERE VNr = 3 UPDATE Vare SET Pris = Pris * 1.10 WHERE VNr = 3 UPDATE Vare SET Pris = 450 UPDATE Vare SET Pris = Pris * 1.10 UPDATE benyttes til oppdatering av tabeller. UPDATE Tab SET a = ... b = ... c = ...

101 Sletter rad(er) i en tabell
DELETE Sletter rad(er) i en tabell DELETE table name view name correlation name WHERE search condition CURRENT OF cursor name

102 DELETE - Eksempel DELETE FROM Salg WHERE SNr = 4 AND VNr= 3
Sletting av samtlige poster i tabellen Salg. DELETE FROM Salg

103 Matematikk funksjoner Finans funksjoner
SQL Funksjoner Aggregat funksjoner String funksjoner Date / Time funksjoner Logiske funksjoner Spesielle funksjoner Matematikk funksjoner Finans funksjoner SQL inneholder mange funksjoner, delt inn i grupper som vist ovenfor.

104 Aggregat-funksjoner AVG Gjennomsnitt COUNT Antall MAX Maksimum
@MEDIAN Middelverdi MIN Minimum SUM Sum @SDV Standard avvik Aggregat-funksjoner.

105 String funksjoner @CHAR ASCII tegn til en desimal kode
@CODE ASCII tegn til første tegn i en string @DECODE Returnerer en string, gitt et uttrykk @EXACT Sammenligner to stringer @FIND Posisjon til string1 i string2 @LEFT Første (venstre) substring @LENGTH Lengden av en string @LOWER Omgjøring til små bokstaver @MID Returnerer en string, gitt startpunkt @NULLVALUE Returnerer string/tall spesifisert ved y hvis x er NULL @PROPER Omgjøring av første bokstav i hvert ord til stor bokstav @REPEAT Konkatenering av en string med seg selv n ganger @REPLACE Erstatter tegn i en string @RIGHT Siste (høyre) substring @SCAN Søker en string etter gitt mønster @STRING Omgjøring av tall til string @SUBSTRING Returnerer en del av en string @TRIM Redusering av blanke tegn (innledende og multiple) @UPPER Omgjøring til store bokstaver @VALUE Omgjøring fra string til tall String-funksjoner.

106 Date / Time funksjoner @DATE Konvertering til dato
@DATETOCHAR Edit en dato @DATEVALUE Edit en dato @DAY Dag i måneden @HOUR Time til en dag @MICROSECOND Mikrosekund @MINUTE Minutt i en time @MONTH Måneden i et år @MONTHBEG Første dag i en måned @NOW Gjeldende Date / Time @QUARTER Tall som representerer kvartal @QUARTERBEG Første dag i et kvartal @SECOND Sekunder av et minutt @TIME Returnerer date/time @TIMEVALUE Returnerer en date/time verdi fra hh:mm:ss @WEEKBEG Mandag av uke @WEEKDAY Dag av en uke @YEAR År relativt til 1900 @YEARBEG Første dag i året @YEARNO Kalender år Date / Time funksjoner.

107 Matematikk funksjoner
@ABS Absolutt-verdi @ACOS Arcus cosinus @ASIN Arcus sinus @ATAN Arcus tangens @ATAN To-kvadrant arcus tangens @COS Cosinus @EXP Eksponential-funksjon @FACTORIAL Fakultet @INT Heltallsdel @LN Naturlige logaritme @LOG ’er logaritme @MOD Divisjonsrest @PI Tallet Pi (= ) @ROUND Avrunding @SIN Sinus @SQRT Kvadratrot @TAN Tangens Matematikk-funksjoner.

108 Finans funksjoner @CTERM Antall perioder for å oppnå en fremtidig verdi @FV Fremtidig verdi av ekvidistante innbetalinger @PMT Periodiske innbetalinger ved nedbetaling @PV Verdi av ekvidistante innbetalinger @RATE Renter for å vokse til gitt beløp @SLN Rettlinjet verdi-foringelse @SYD Sum av et års verdi-foringelse @TERM Antall innbetalings-perioder for gitt investering Finans-funksjoner.

109 Spesielle funksjoner @CHOOSE Velger en verdi basert på korrelasjon
@DECIMAL Desimal verdi av en hexadesimal string @DECRYPT Dekrypting av et passord @DECODE Returnerer en string, gitt et uttrykk @HEX Hexadesimal string fra et desimal-tall @LICS Sortering basert på internasjonalt tegn-sett Spesielle funksjoner.

110 Logiske funksjoner @IF Tester og returnerer 1 hvis TRUE, 2 hvis FALSE
@ISNA Returnerer TRUE hvis NULL Logiske funksjoner.

111 Funksjoner - Eksempel SELECT SNr, @PROPER(Navn) FROM SelgerAdr
WHERE = ‘HANSEN’ Eksempel på bruk av funksjonene PROPER, UPPER og TRIM. PROPER omformer første bokstav til stor bokstav, mens resten blir små bokstaver. UPPER omformer aller bokstaver til store bokstaver. TRIM fjerner multiple space (blanke) og innledende blanke. Eksemplet viser hvordan vi kan søke etter Hansen i databasen når vi er usikre på hvordan navnet er skrevet inn i database-tabellen (eks: Hansen, HANSEN, hansen, HAnsEn, haNSen, …). Usikkerhet angående skrivemåte av navn i databasen (små eller store bokstaver, mellomrom, ... )

112 @CHOOSE @CHOOSE (SelNr, a, b, c, d, e, f, g) SelNr Resultat -1 2 12 a
-1 2 12 a c g SNr <= 0 gir første liste-verdi a, SNr = 1 neste verdi b, …, SNr >=6 gir her siste verdi g

113 @CHOOSE SELECT @CHOOSE(@WEEKDAY(FDato),
‘Lø’, ‘Sø’, ‘Ma’, ‘Ti’, ‘On’, ‘To’, ‘Fr’) FROM Person List ut uke-dagen til fødselsdagen til samtlige personer i tabellen Person

114 @FV @FV (Belop, p, n) n (1 + p/100) - 1 Belop * -------------------
Returnerer fremtidig verdi av en serie av n antall innbetalinger (hver lik Belop) til p prosent rente. n (1 + p/100) - 1 Belop * p/100

115 SQL Et større eksempel (1)
StlngMax Ekteskap MannID KvinneID ….. ENrMann ENrKvinne EVarighet Periode Stilling GjEVarighet Count PersonID ….. Periode StRang Kap 29, Sp 30, ….. Kap 31, Sp 31, SELECT StlngMax.Periode, StlngMax.StRang, COUNT(*), @ROUND(AVG(Ektekskap.EVarighet),1) FROM StlngMax, Ekteskap WHERE StlngMax.PersonID = Ekteskap.MannID AND Ekteskap.ENrMann = AND GROUP BY StlngMax.Periode, StlngMax.StRang SQL - Et større eksempel. List ut for hver tidsperiode og stilling gjennomsnittlig ekteskapsvariget (1.ekteskap med 1 desimal) for hver person i tabellen StlngMax samt totalt antall personer som er med i beregningen (for hver periode)

116 SQL - Et større eksempel (2)
StlngMax Ekteskap MannID KvinneID ….. ENrMann ENrKvinne EVarighet Stilling Periode GjEVarighet Count PersonID ….. Periode StRang Kap , , ….. Sp , , SELECT StlngMax.StRang, StlngMax.Periode, COUNT(*), @ROUND(AVG(Ektekskap.EVarighet),1) FROM StlngMax, Ekteskap WHERE StlngMax.PersonID = Ekteskap.MannID AND Ekteskap.ENrMann = AND GROUP BY StlngMax.StRang, StlngMax.Periode .SQL - Et større eksempel. List ut for hver stilling og tidsperiode gjennomsnittlig ekteskapsvariget (1. ekteskap med 1 desimal) for hver person i tabellen StlngMax samt totalt antall personer som er med i beregningen (for hver periode)

117 Laster data fra en database ut til en fil av gitt format
UNLOAD Laster data fra en database ut til en fil av gitt format UNLOAD SQL ‘file name’ source table COMPRESS DATA CONTROL ‘file name’ OVERWRITE ALL ASCII ‘file name’ source table DATA CONTROL ‘file name’ OVERWRITE DIF ‘file name’ source table DATABASE ‘file name’ COMPRESS SHEMA CONTROL ‘file name’ OVERWRITE ALL ON CLIENT LOG ‘logfile name’ SERVER

118 UNLOAD - Eksempel INSERT INTO Adr (PNr,Sted) VALUES(:1,:2) \
UNLOAD DATA SQL c:\data\Adr.txt Adr INSERT INTO Adr (PNr,Sted) VALUES(:1,:2) \ $DATATYPES NUMERIC,CHARACTER 5002,Bergen 6400,Molde 9000,Tromsø / Kopierer data fra database-tabellen Adr, prefikser dataene med en INSERT-kommando (pga SQL) og lagrer dette til tekstfilen c:\data\Adr.txt.

119 Laster data fra en fil av gitt format inn til en tabell i databasen
LOAD Laster data fra en fil av gitt format inn til en tabell i databasen LOAD SQL ‘file name’ COMPRESS CONTROL ‘file name’ ASCII ‘file name’ table name CONTROL ‘file name’ DIF ‘file name’ CONTROL ‘file name’ table name ON CLIENT LOG ‘logfile name’ START AT line SERVER

120 LOAD - Eksempel LOAD SQL c:\data\Adr.txt

121 Endrer på kolonne-strukturen i en tabell
ALTER TABLE Endrer på kolonne-strukturen i en tabell ALTER TABLE table name , DROP column name ADD column name data type (size) NOT NULL NOT NULL WITH DEFAULT RENAME column name new name TABLE new name MODIFY column name data type (length) NULL NOT NULL

122 ALTER TABLE - Eksempel ALTER TABLE Bedrift
Endrer datatype og/eller kolonnelengde ALTER TABLE Bedrift MODIFY BedriftsNavn Char(50) ADD Tlf Char(8) Legger til en kolonne

123 ALTER TABLE (Referential Integrity)
Endrer på PRIMARY KEY / FOREIGN KEY strukturen i en tabell ALTER TABLE table name , PRIMARY KEY ( column name ) DROP FOREIGN KEY ( column name ) REFERENCES parent table name DROP foreign key name ON DELETE RESTRICT CASCADE SET NULL

124 ALTER TABLE (Error Message)
Endrer på USERERROR strukturen i en tabell ALTER TABLE table name ADD USERERROR error number DROP MODIFY FOR ‘DELETE_PARENT’ OF PRIMARY KEY ‘UPDATE_PARENT’ FOREIGN KEY key name ‘UPDATE_DEPENDENT’

125 Enable / Disable en trigger
ALTER TRIGGER Enable / Disable en trigger ALTER TRIGGER trigger name ENABLE DISABLE

126 COMMIT COMMIT WORK TRANSACTION <id> FORCE
Commits alle endringene til databasen siden forrige COMMIT eller ROLLBACK. Commits gjelder alle SqlHandles / Cursors som gjeldende applikasjon har koblet opp mot databasen. COMMIT WORK TRANSACTION <id> FORCE

127 Omgjør siste transaksjon
ROLLBACK Omgjør siste transaksjon ROLLBACK savepoint identifier TRANSACTION <id> FORCE

128 Genererer SAVEPOINT til bruk ved ROLLBACK
SAVEPOINT savepoint identifier

129 CREATE INDEX CREATE INDEX index name UNIQUE CLUSTERED HASHED ,
Oppretter en indeks CREATE INDEX index name UNIQUE CLUSTERED HASHED , ON table name ( column name ) ASC DESC PCTFREE integer constant SIZE integer value ROWS BUCKETS Max size = 6 + number of + sum of <= 255 columns in length of all index columns in index

130 CREATE INDEX - Eksempel
CREATE UNIQUE INDEX Bidndx ON Bedrift (BedriftsID) CREATE INDEX BnNdx ON Bedrift (BedriftsNavn)

131 Oppretter synonym (alias) navn til en tabell
CREATE SYNONYM Oppretter synonym (alias) navn til en tabell CREATE SYNONYM synonym name PUBLIC FOR table name authorization ID view name

132 Returnerer antall rader i en tabell
ROWCOUNT Returnerer antall rader i en tabell ROWCOUNT tablename

133 Genererer resultatsett som union av multiple SELECT
ALL select command , ORDER BY integer constant ASC DESC SELECT … UNION ALL UNION ALL ... Duplikater blir ikke eliminert

134 UPDATE STATISTICS Oppdaterer statistikk-informasjon i databasen.
Benyttes til å generere applikasjonsplan. UPDATE STATISTICS INDEX index name , SET system catalog column name = expression DISTINCTCOUNT (index key) = expression TABLE DATABASE

135 Ulike brukere gis ulike passord.
Brukere / Privilegier Ulike brukere gis ulike passord. Data i en tabell skal være tilgjengelig for noen brukere, men sperret for andre. Noen brukere skal kunne gjøre endringer i en tabell, andre skal kun få lov til å lese fra tabellen. I en tabell kan det være ønskelig med ulike restriksjoner knyttet til enkelt-kolonner. Noen brukere nektes bruk av interaktiv SQL-aksess, mens de samme brukerne kan benytte andre applikasjons-program for oppdatering av den samme databasen. Eventuelle restriksjoner er da innebygget i applikasjons-programmet. Til en database kan det opprettes ulike brukere hver med ulike rettigheter i databasen.

136 Det finnes tre hoved-typer brukere:
Brukere / Privilegier Det finnes tre hoved-typer brukere: Brukere med DBA-privilegier Brukere med RESOURCE-privilegier Brukere med CONNECT-privilegier Bruker-nivåer rangert ovenfra og nedover: - SYSADM - DBA - RESOURCE - CONNECT

137 SYSADM DBA RESOURCE CONNECT
Authority Level SYSADM DBA RESOURCE Bruker-nivåer rangert ovenfra og nedover: - SYSADM - DBA - RESOURCE - CONNECT CONNECT

138 CONNECT Adgang til databasen.
Adgang til å manipulere spesifikke tabeller i følge tilordnede privilegier. CONNECT

139 Adgang til å opprette tabeller, indekser og clustre.
RESOURCE Adgang til å opprette tabeller, indekser og clustre. Alle rettigheter til operasjoner på egenopprettede tabeller. Adgang til å modifisere privilegier til egenopprettede tabeller for gyldige brukere av databasen. RESOURCE

140 Alle rettigheter til enhver tabell i databasen.
DBA Alle rettigheter til enhver tabell i databasen. Alle rettigheter til Grant (tilordne) / Modify (endre) / Revoke ( fjerne) tabell-privilegier til enhver bruker. DBA kan ikke opprette nye brukere og heller ikke endre passord eller autoritet til eksisterende brukere. Dette kan kun utføres av SYSADM. DBA

141 Tilordning av autoritet / privilegier
GRANT CONNECT TO Nilsen IDENTIFIED BY Katt TO Olsen IDENTIFIED BY Gris TO Hansen IDENTIFIED BY Hest GRANT RESOURCE TO Olsen GRANT DBA TO Hansen GRANT SELECT, UPDATE (Navn, PNr) ON Selger SQL-kommandoen GRANT kan benyttes til å tilordne autoritet / privilegier til ulike brukere.

142 Database Authority , GRANT RESOURCE TO AuthID DBA , ,
, , CONNECT TO AuthID IDENTIFIED BY Password GRANT-kommandoen - Syntaks Autoritet

143 Table Privileges , GRANT ALL SELECT INSERT DELETE INDEX ALTER UPDATE
( ColumnName ) , , ON TableName TO AuthID ViewName PUBLIC GRANT-kommandoen - Syntaks Privilegier

144 SQL har mange sterke sider,
SQL / Høgnivåspråk SQL har mange sterke sider, men språket er ikke et komplett programmerings-språk på linje med Fortran, C, Pascal, Cobol, ... SQL ble opprinnelig benyttet interaktivt ved direkte å gi SQL-kommandoer med umiddelbar respons. Brukervennligheten til SQL vil øke radikalt ved å innebygge SQL som en del av et komplett prosedyre-språk. To bruks-måter for SQL: - Interaktiv bruk av SQL - SQL innebygget i et komplett prosedyre-språk SQL kontra høgnivåspråk

145 SQL innebygget som en del av et komplett prosedyre-språk
Embedded SQL SQL-statement legges inn sammen med den øvrige program-kode. Blanding av prosedyre-språkets egne statement og SQL-statement. Spesielle SQL-statement benyttes som aksess mot databasen. En spesiell SQL-prekompilator scanner den kombinerte koden, og lager sammen med de øvrige program-verktøyene et eksekverbart program. Application Program Interface ( API ) Programmet ( høgnivå-språket ) kommuniserer med DBMS gjennom et sett av funksjoner kalt application program interface ( API ). Programmet overfører SQL-statement til DBMS gjennom API-kall og benytter API til aksess mot databasen. SQL-statementene overføres via parametre i API-kallene. SQL kan innebygges som en del av et prosedyre-språk. To ulike metoder benyttes: - Embedded SQL - Application Program Interface (API)

146 Embedded SQL / API DBMS API Embedded Language Support
DB2 Nei APL, Assembler, Basic, Cobol, Fortran, PL/I SQL/DS Nei APL, Assembler, Basic, Cobol, Fortran, PL/I, Prolog Oracle Ja Ada, C, Cobol, Fortran, Pascal, PL/I Ingres Nei Ada, Basic, C, Fortran, Pascal, PL/I Sybase Ja Ingen Informix Nei Ada, C, Cobol OS/2 EE Nei C SQLBase Ja Ingen Embedded SQL / API for ulike databaser og prosedyre-språk.

147 Høgnivå-språk - SQL Høgnivåspråk Data-flyt Variabler Blokk-struktur
Test Sløyfer Input / Output SQL Database-aksess Høgnivåspråk og SQL

148 Eksekvering av statementet.
SQL-prosessering Parsing (traversering) av SQL-statement. Oppbryting av statementet i individuelle ord og kontroll av syntaksen. Validitering av statementet. Kontroll av tabell/kolonne-navn mot system-katalogene. Kontroll av brukers rettigheter assosiert med statementet. Optimalisering av statementet. Vurdering av alternative løsninger. Bør indeks benyttes? Hvordan optimalisere join mot søke-kriterier? Kan table-scan unngås? Valg av alternativ. Generering av en applikasjons-plan for statementet. Applikasjons-planen er en binær representasjon av steppene for statement-utføring og er DBMS’s eksekverbare kode. Eksekvering av statementet. Prosessering av et SQL-statement.

149 Generate Application Plan
SQL-prosessering SELECT A,B,C FROM X,Y WHERE A < 5000 AND C = ‘ABC’ Parse statement Database system catalog Validate statement Optimize statement Generate Application Plan Prosessering av et SQL-statement Binary form of SQL statement Execute statement

150 SQL knyttet opp mot høgnivåspråk-variabler
EXEC SQL SELECT SNrID, PNr INTO :Nr, :Navn, :PostNr FROM Selger WHERE SNrID = 2 EXEC SQL INSERT INTO Selger VALUES (:Nr, :Navn, :PostNr) SQL knyttet opp mot høgnivåspråk-variabler. Høgnivåspråk-variablene er prefikset med kolon ( : ).

151 Resultat-sett med mer enn en record
Database Applikasjon SQL-statement Fetch Resultat-sett Record_1 Record_2 Record_3 ... Ved forespørsel mot en database får vi ut et såkalt resultatsett. Dette resultatsettet inneholder aller rader (records, poster) som oppfyller betingelsene i SQL-statementet. For å kunne behandle en enkelt rad ad gangen fra dette resultatsettet, benyttes ofte en såkalt cursor. Vha denne cursor og en såkalt Fetch-kommando kan en enkelt rad ad gangen hentes frem fra resultatsettet. Cursor

152 Embedded SQL - Eksempel
main() { ... printf(“Enter office number: “); scanf(“%d”, &officenum); exec sql select city, region, target, sales into :cityname, :regionname, :targetval, :salesval from offices where office = :officenum; printf(“City: %s\n”, cityname); } Embedded SQL eksempel

153 5 faser ved generering av embedded SQL-program
Embedded SQL-kilde-kode scannes av en SQL prekompilator. SQL-statementene lokaliseres og prosesseres. Ulike prekompilatorer kreves for hvert programmerings-språk supportert av DBMS. Prekompilatoren gir to filer som output: - Kildekode strippet for SQL-statement. SQL-statementene erstattes av private DBMS-rutiner og som gir run-time link mellom programmet og DBMS. Disse er vanligvis kjent kun av prekompilatoren og er ikke public interface til databasen. - Kopi av strippede SQL-statement, kalt database request module (DBRM). Vertsspråk-kompilatoren traverserer strippet kilde-kode fra forrige fase og gir en objekt-kode som output. Linkeren lenker objekt-koden fra foregående fase med private DBMS-rutiner. DBRM-modulen generert av prekompilatoren i fase 2 scannes av et spesielt BIND-program. Dette programmet går gjennom de 5 fasene for prosessering av SQL-statement og genererer en applikasjons-plan for hvert statement. Resultatet er en kombinert applikasjons-plan for hele programmet, og denne planen blir lagret i databasen, vanligvis med samme navn som selve hoved-programmet. 5 faser ved generering av embedded SQL-program

154 5 faser ved generering av embedded SQL-program
Embedded SQL source program Precompiler Stripped source program Database request module Compiler BIND Object code DBMS library Application plan 5 faser ved generering av embedded SQL-program Linker Application plan Database Executable program

155 SQL API Programmet begynner sin database-aksess ved et API-kall som knytter programmet til databasen. For å sende et SQL-statement til DBMS, bygger programmet opp statementet som en tekst-streng som plasseres i et buffer og kaller deretter opp en API-funksjon som overfører buffer-innholdet til DBMS. Programmet gjør et API-kall for status-kontroll av DBMS-forespørselen og for å håndtere eventuelle feil. Hvis SQL-statementet er en query, kalles en API-funksjon for å hente database-data inn i et program-buffer. Vanligvis returneres en rad eller en kolonne ad gangen. Programmet avslutter sin database-aksess med et API-kall som kobler programmet fra DBMS. SQL API

156 SQL API CONNECT (db,user,pswd) SEND (“Update orders set ...”)
Application progam DBMS CONNECT (db,user,pswd) SEND (“Update orders set ...”) EXECUTE ( ) STATUS_CHECK ( ) Ok SEND (“Select * from offices ...”) EXECUTE ( ) GETROW ( ) (101, “New York”, ...) SQL API GETROW ( ) (12, “Chicago”, ...) DISCONNECT ( )

157 SQL API - Program-eksempel
main() { ... DBSETLUSER(loginrec, “Scott”); DBSETLPWD (loginrec, “Tiger”); dbproc = dbopen(loginrec, ““); printf(“Raise/lower quotas by how much:”); gets(sAmount); dbcmd(dbproc,”Update salesreps set quotas = quota + “); dbcmd(dbproc,sAmount); dbsqlexec(dbproc); status = dbresults(dbproc); if (status != SUCCEED) printf(“Error during update.\n”); else printf(“Update successful.\n”); dbexit(dbproc); } SQL API Program-eksempel

158 SAL funksjonalitet i SQLBase (1)
SqlClearImmediate Disconnect Sql Handle benyttet av SqlImmediate SqlClose Lukker en navngitt cursor SqlCommit Commit gjeldende SQL transaksjon SqlConnect Connect en Sql Handle til en database SqlDisconnect Disconnect en Sql Handle fra en database SqlDropStoredCmd Sletter en lagret kommando eller lagret prosedyre SqlError Henter gjeldende error kode for gitt Sql Handle SqlExecute Eksekverer et SQL statement, lagret kommendo eller lagret prosedyre SqlExists Sjekker eksistens av spesifisert(e) rad(er) SqlFetchNext Henter neste rad i et resultatsett SqlFetchPrevious Henter forrige rad i et resultatsett SqlFetchRow Henter gitt rad i et resultatsett SqlGetErrorPosition Returnerer offset i en error innen et SQL statement SqlGetErrorText Returnerer error-tekst for et gitt SQL error number SqlGetModifiedRows Returnerer antall endrete rader i en INSERT, UPDATE eller DELETE SqlGetParameter Returnerer en databaseparameter SqlGetParameterAll Returnerer en databaseparameter SqlGetResultSetCount Returnerer antall rader i et resultatsett SqlGetRollbackFlag Returnerer database rollback flag

159 SAL funksjonalitet i SQLBase (2)
SqlImmediate Kompilerer og eksekverer et SQL statement SqlOpen Navngir en cursor og eksekverer et SQL statement SqlPrepare Kompilerer et SQL statement eller ikke-lagret prosedyre SqlPrepareAndExecute Kompilerer og eksekverer et SQL statement eller ikke-lagret prosedyre SqlRetrieve Henter en lagret kommando eller lagret prosedyre SqlSetIsolationLevel Setter isolasjonsnivå SqlSetLockTimeout Setter timeout periode for venting på en lås SqlSetParameter Setter en database parameter SqlSetParameterAll Setter en database parameter SqlSetResultSet Setter resultatsett mode på/av SqlStor Kompilerer og lagrer en kommando eller prosedyre

160 Relaterte SQLTalk kommandoer
ERASE Sletter en lagret kommando eller lagret prosedyre EXECUTE Eksekverer en lagret kommando eller lagret prosedyre PERFORM Eksekverer enten en preparert SQL kommando / lagret prosedyre eller gjenfinner en lagret kommando / lagret prosedyre PREPARE Kompilerer en SQL kommando eller ikke-lagret prosedyre SET TRACE Enable/Diasable statement tracing SET TRACEFILE Trace output til server-fil eller servers aktivitets-skjerm SHOW TRACE Viser enabling/disabling av TRACE SHOW TRACEFILE Viser trace output (server-fil eller aktivitets-skjerm) STORE Kompilerer og lagrer en kommando eller prosedyre i systemkatalogene (og dens eksekveringsplan for seinere eksekvering)

161 Connect / Disconnect SqlDatabase DEMO SqlUser SYSADM
Predefinerte variable Default-verdier SqlDatabase DEMO SqlUser SYSADM SqlPassword SYSADM SqlConnect SqlDisconnect Centura-funksjoner

162 End


Laste ned ppt "Standard databasespråk"

Liknende presentasjoner


Annonser fra Google