Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

SQLHiA SQL Standard databasespråk for relasjons-databaser.

Liknende presentasjoner


Presentasjon om: "SQLHiA SQL Standard databasespråk for relasjons-databaser."— Utskrift av presentasjonen:

1 SQLHiA SQL Standard databasespråk for relasjons-databaser

2 SQLHiA SQL 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.

3 SQLHiA Historikk 1970 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. 1976SEQUEL/2 IBM prototype kalt System R. 1980Navnet endres til SQL. ANSI-standard. 1997SQL m/objektorientering

4 SQLHiA SQLData-språk for alle ? SQL var opprinnelig tenkt å skulle være ET DATABASE-SPRÅK FOR ALLE I praksis bygges SQL inn i et høgnivåspråk for bl.a. å bedre brukergrensesnittet.

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

6 SQLHiA Database-system Bruker Appl. DBMS DD Database

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

8 SQLHiA Eksempel på innhold i en database Tables Indexes Triggers Views Procedures Rules Datatypes Defaults Database

9 SQLHiA Database / Tabell / Rad / Kolonne 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Database Tabell Rad Post Record Kolonne Felt

10 SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer

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

12 SQLHiA 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 SQLHiA Typer av SQL-kommandoer (3) Transaction Control Commands COMMIT ROLLBACK SAVEPOINT Data Administration Commands AUDIT MESSAGE START AUDIT STOP AUDIT

14 SQLHiA Typer av SQL-kommandoer (4) Data Control Commands (1) ALTER DATABASE ALTER DBAREA ALTER PASSWORD ALTER STOGROUP ALTERTABLE ALTERTRIGGER CHECK DATABASE CHECKTABLE COMMENTON

15 SQLHiA Typer av SQL-kommandoer (5) Data Control Commands (2) CREATE DATABASE CREATEDBAREA CREATEEVENT CREATEINDEX CREATE STOGROUP CREATESYNONYM CREATETABLE CREATETRIGGER CREATEVIEW

16 SQLHiA Typer av SQL-kommandoer (6) Data Control Commands (3) DBATTRIBUTE DEINSTALL DATABASE DROPDBAREA DROPEVENT DROPINDEX DROPSTOGROUP DROPSYNONYM DROPTABLE DROPTRIGGER DROPVIEW GRANT GRANTEXECUTE ON INSTALLDATABASE LABEL LOAD LOCK DATABASE

17 SQLHiA Typer av SQL-kommandoer (7) Data Control Commands (4) REVOKE REVOKEEXECUTE ON ROWCOUNT SET DEFAULT STOGROUP UNLOAD UNLOCKDATABASED UPDATE STATISTICS

18 SQLHiA Bruksmåte Interaktivt vha et interface-program Innebygget i et programmerings-språk

19 SQLHiA Salg-tabell-1NF SNrNavnStedPNrVNrPrisMengde 5NilsenBergen OlsenMolde OlsenMolde HansenTromsø HansenTromsø BergMolde BergMolde BergMolde SNrSelger-nummer NavnSelger-navn StedArbeids-sted for selger PNrPost-nummer (for Sted) VNrVare-nummer PrisVare-pris MengdeAntall solgte vare-enheter

20 SQLHiA Salg-tabeller-3NF SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr) PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr) VNrPris Vare (ID = VNr) SNrVNrMengde Salg (ID = SNr + VNr) IDFremmed- nøkkel

21 SQLHiA Salg-tabeller-3NF Selger Adr Vare Salg

22 SQLHiA Database / Tabell / Rad / Kolonne 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Database Tabell Rad Post Record Kolonne Felt

23 SQLHiA Partisjonering av en database Step 1:Opprett DatabaseArea Step 2:Opprett StorageGroup Step 3:Opprett Database Vol_1Vol_2 Handel_2 Handel_1Handel_3 StorageGroup Handel_Files StorageGroup Handel_Log Handel_2 Handel_1Handel_3 DataLog filer Handel_2 Handel_1 Handel_3 Databasen Handel

24 SQLHiA CREATE DBAREA CREATE DBAREAdbarea name AS filename SIZE megabyte Oppretter et fysisk database-område av gitt størrelse i megabyte (default 1MB) 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 Vol_1Vol_2 Handel_2 Handel_1Handel_3

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

26 SQLHiA CREATE DATABASE Oppretter en database CREATE DATABASE databasename IN stogroup name LOG TO stogroup name CREATE DATABASE Handel IN Handel_Files LOG TO Handel_Log DataLog filer Handel_2 Handel1Handel_3 Databasen Handel

27 SQLHiA CREATE TABLE Oppretter en tabell CREATE TABLE ( [ ], [ ],...) Tabell_1 Tabell_2 Tabell_3 Database

28 SQLHiA Oppretting av Salg-tabeller-Adr CREATE TABLEAdr ( PNrIntegerNOT NULL, StedChar(20), PRIMARY Key(PNr) ) CREATE UNIQUEINDEXAdrNdx ON Adr(PNr) PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr)

29 SQLHiA Oppretting av Salg-tabeller-Selger CREATETABLESelger ( SNrIntegerNOT NULL, NavnChar(20), PNrInteger, PRIMARY KEY(SNr), FOREIGN KEY(PNr) REFERENCES Adr ON DELETE RESTRICT ) CREATE UNIQUEINDEXSlgNrNdx ON Selger(SNr) CREATE INDEX SlgNaNdx ON Selger(Navn) SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr) IDFremmednøkkel

30 SQLHiA Oppretting av Salg-tabeller-Vare CREATETABLEVare ( VNrIntegerNOT NULL, PrisInteger, PRIMARY Key(VNr) ) CREATE UNIQUEINDEXVareNdxON Vare(VNr) VNrPris Vare (ID = VNr)

31 SQLHiA Oppretting av Salg-tabeller-Salg CREATETABLESalg ( SNrIntegerNOT NULL, VNrIntegerNOT NULL, MgInteger, PRIMARY KEY(SNr,VNr), FOREIGN KEY(SNr) REFERENCES Selger ON DELETE RESTRICT, FOREIGN KEY(VNr) REFERENCES Vare ON DELETE RESTRICT ) CREATE UNIQUEINDEXSalgNdxON Salg(SNr,VNr) SNrVNrMengde Salg (ID = SNr + VNr)

32 SQLHiA Data-typer( SQLBase ) Char(length)Max 254 tegn VarChar(length)Max 254 tegn Long VarCharVilkå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 NumberVilkårlig tall opp til 15 siffer totalt DateTimeFormat Day.Time Day ant dager siden Time = Frac part (0 = 12:00 AM) TimeStampSamme som DateTime (DB2 komp.) DateTime part = 0 TimeDate part = 0

33 SQLHiA INSERT Innsetter en rad i en tabell INSERTtable name view name, (column name ) VALUES(constant) bind variableADJUSTING cursor name system keyword subselect

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

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

36 SQLHiA Innsetting av tabell-verdier-Adr INSERT INTOAdr VALUES (5002,”Bergen”) INSERT INTO Adr VALUES (6400,”Molde”) INSERT INTO Adr VALUES (9000,”Tromsø”) PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr)

37 SQLHiA Innsetting av tabell-verdier-Adr INSERT INTOAdr (PNr,Sted) VALUES(:1,:2) \ $DATATYPES NUMERIC,CHARACTER 5002,Bergen 6400,Molde 9000,Tromsø / PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr)

38 SQLHiA Innsetting av tabell-verdier-Selger INSERT INTOSelger (SNr,Navn,PNr) VALUES(:1,:2,:3) \ $DATATYPES NUMERIC,CHARACTER 5,Nilsen,5002 2,Olsen,6400 1,Hansen,9000 4,Berg,6400 / SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

39 SQLHiA SELECT SELECTSelectItem ALL, DISTINCT* FROMTableSpecification, WHERESearchCondition GROUP BYGroupingColumn, HAVINGSearchCondition ORDER BYSortSpecification,

40 SQLHiA Select-Enkel bruk SELECT SNr, Navn, PNr FROM Selger SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr) Resultatsett

41 SQLHiA SelectKvalifiserte kolonne-navn SELECT Selger.SNr, Selger.Navn, Selger.PNr FROM Selger SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

42 SQLHiA SELECT-Bruk av * SELECT * FROM Selger SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

43 SQLHiA SELECT-Enkelt-felter SELECT PNr, Navn FROM Selger PNrNavn 5002Nilsen 6400Olsen 9000Hansen 6400Berg SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

44 SQLHiA SELECT-Distinct SELECT DISTINCT SNr FROM Salg SNr 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. SNrVNrMengde Salg (ID = SNr + VNr)

45 SQLHiA WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 SNrNavnPNr 2Olsen6400 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

46 SQLHiA WHERE SELECT VNr, Pris FROM Vare WHERE Pris > 300 VNrPris VNrPris Vare (ID = VNr)

47 SQLHiA WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 AND Navn > ‘C’ SNrNavnPNr 2Olsen6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

48 SQLHiA WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 OR SNr > 3 SNrNavnPNr 5Nilsen5002 2Olsen6400 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

49 SQLHiA WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 OR NOT SNr > 3 SNrNavnPNr 2Olsen6400 1Hansen9000 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

50 SQLHiA SQL-3-verdi logikk A op B True False NULL WHERE-test Ok ved True GROUP BY -test Ok ved True og NULL ANDTrueFalseNULL TrueTrueFalseNULL FalseFalseFalseFalse NULLNULLFalseNULL ORTrueFalseNULL TrueTrueTrueTrue FalseTrueFalseNULL NULLTrueNULLNULL NOTTrueFalseNULL FalseTrueNULL

51 SQLHiA IN SELECT PNr, Sted FROM Adr WHERE Sted IN (‘Molde’,Tromsø’) PNrSted 6400Molde 9000Tromsø PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr)

52 SQLHiA BETWEEN SELECT SNr, Navn, PNr FROM Selger WHERE SNr BETWEEN 1 AND 4 SNrNavnPNr 2Olsen6400 1Hansen9000 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

53 SQLHiA Joker-symbol% og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘N%’ SNrNavnPNr 5Nilsen5002 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

54 SQLHiA Joker-symbol% og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘%sen’ SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

55 SQLHiA Joker-symbol% og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni%sen’ SNrNavnPNr 5Nilsen5002 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

56 SQLHiA Joker-symbol% og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni_sen’ SNrNavnPNr 5Nilsen5002 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

57 SQLHiA Joker-symbol% og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni/_%’ SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

58 SQLHiA Joker-symbol% og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni//%’ SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

59 SQLHiA NULL SELECT SNr, Navn, PNr FROM Selger WHERE PNr IS NULL SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

60 SQLHiA NULL SELECT SNr, Navn, PNr FROM Selger WHERE PNr IS NOT NULL SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

61 SQLHiA Aggregat-funksjoner-Sum SELECT SUM(Mg) FROM Salg Sum(Mg) 290 SNrVNrMengde Salg (ID = SNr + VNr)

62 SQLHiA Aggregat-funksjoner-Avg SELECT AVG(Mg) FROM Salg Avg(Mg) SNrVNrMengde Salg (ID = SNr + VNr)

63 SQLHiA Aggregat-funksjoner-COUNT SELECT COUNT(*) FROM Salg Count(*) 8 SNrVNrMengde Salg (ID = SNr + VNr)

64 SQLHiA Aggregat-funksjonerCountNull-verdier i kolonne-funksjoner SELECT COUNT(*), COUNT(Navn), COUNT(Adr) FROM Person NavnAdr NilsenStorgt 3 Havnegt 7 HansenGågata 20 Berg KnutsenStorgt 3 OlsenEkornv 4 Persen MadsenSvingen 8 COUNT(*)COUNT(Navn)COUNT(Adr) 876

65 SQLHiA Aggregat-funksjonerCount/ Distinct SELECT COUNT(Adr), COUNT(DISTINCT Adr), FROM Person NavnAdr NilsenStorgt 3 Havnegt 7 HansenGågata 20 Berg KnutsenStorgt 3 OlsenEkornv 4 Persen MadsenSvingen 8 COUNT(Adr)COUNT(DISTINCT Adr) 65

66 SQLHiA Aggregat-funksjoner-Count / Distinct SELECT COUNT(DISTINCT Mg) FROM Salg Count(Distinct Mg) 6 SNrVNrMengde Salg (ID = SNr + VNr)

67 SQLHiA Aggregat-funksjoner-Max SELECT MAX(Mg) FROM Salg Max(Mg) 70 SNrVNrMengde Salg (ID = SNr + VNr)

68 SQLHiA Aggregat-funksjoner-Min SELECT MIN(Mg) FROM Salg Min(Mg) 10 SNrVNrMengde Salg (ID = SNr + VNr)

69 SQLHiA Aggregat-funksjoner-Max SELECT MAX(SNr+VNr) FROM Salg Max(SNr+VNr) 13 SNrVNrMengde Salg (ID = SNr + VNr)

70 SQLHiA Group By SELECT SNr, MAX(Mg) FROM Salg GROUP BY SNr SNrMax(Mg) SNrVNrMengde SNrVNrMengde Salg (ID = SNr + VNr)

71 SQLHiA Group By SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr SNrVNrMax(Mg) SNrVNrMengde Salg (ID = SNr + VNr)

72 SQLHiA Group By / Having SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr HAVING MAX(Mg) > 30 SNrVNrMax(Mg) SNrVNrMengde Salg (ID = SNr + VNr)

73 SQLHiA Uttrykk SELECT VNr, Pris*1.5 FROM Vare VNrPris* VNrPris Vare (ID = VNr)

74 SQLHiA Tekst-plassering i utlisting SELECT VNr, Pris, ‘Kr’ FROM Vare VNrPris‘Kr’ 8500Kr 1200Kr 3400Kr 5300Kr VNrPris Vare (ID = VNr)

75 SQLHiA Order By SELECT SNr, Navn, PNr FROM Selger ORDER BY SNr SNrNavnPNr 1Hansen9000 2Olsen6400 4Berg6400 5Nilsen5002 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

76 SQLHiA Order ByAsc / Desc SELECT SNr, Navn, PNr FROM Selger ORDER BY PNr ASC, SNr DESC SNrNavnPNr 5Nilsen5002 4Berg6400 2Olsen6400 1Hansen9000 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

77 SQLHiA Order By / Group By SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr ORDER BY VNr SNrVNrMax(Mengde) SNrVNrMengde Salg (ID = SNr + VNr)

78 SQLHiA Kolonne-nummer-sortering SELECT SNr, Navn, PNr FROM Selger ORDER BY 3 DESC SNrNavnPNr 1Hansen9000 2Olsen6400 4Berg6400 5Nilsen5002 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

79 SQLHiA Join SELECT Selger.Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNrID NavnPNrSted Hansen9000Tromsø Olsen6400Molde Berg6400Molde Nilsen5002Bergen SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr) PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr)

80 SQLHiA Join-Produkt-tabell SNrNavnPNrPNrSted 5Nilsen Bergen 2Olsen Bergen 1Hansen Bergen 4Berg Bergen 5Nilsen Molde 2Olsen Molde 1Hansen Molde 4Berg Molde 5Nilsen Tromsø 2Olsen Tromsø 1Hansen Tromsø 4Berg Tromsø SelgerAdr SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT Selger.SNr, Selger.Navn, Selger.PNr Adr.Sted FROM Selger, Adr

81 SQLHiA Join SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT Selger.Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr Feilkoblinger ( PNr) markert med rødt felt. Gjenstående korrekte poster i resultatsett markert med *. SNrNavnPNrSted 5Nilsen5002Bergen 2Olsen6400Bergen 1Hansen9000Bergen 4Berg6400Bergen 5Nilsen5002Molde 2Olsen6400Molde 1Hansen9000Molde 4Berg6400Molde 5Nilsen5002Tromsø 2Olsen6400Tromsø 1Hansen9000Tromsø 4Berg6400Tromsø SelgerAdr ********

82 SQLHiA Join SELECTSelger.Navn, Adr.Sted Vare.VNr, Vare.Pris Salg.Mg FROM Selger, Adr, Vare, Salg WHERE Selger.PNr = Adr.PNrAND Salg.SNr =Selger.SNrAND Salg.VNr=Vare.VNr NavnStedVNrPrisMg NilsenBergen OlsenMolde OlsenMolde BergMolde BergMolde BergnMolde HansenTromsø HansenTromsø850040

83 SQLHiA 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 First.NavnSec.NavnFirst.PNr NilsenNilsen5002 OlsenOlsen6400 BergOlsen6400 HansenHansen9000 OlsenBerg6400 BergBerg6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

84 SQLHiA 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.PNrAND First.Navn < Sec.Navn First.NavnSec.NavnFirst.PNr BergOlsen6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

85 SQLHiA Join-Kobling av en tabell mot seg selv NrNavnSjef 105Adams Smith Clark 112Cruz Jones112 SELECT First.Navn, Sec.Navn FROM Tilsatt First, Tilsatt Sec WHERE First.Sjef = Sec.Nr Tilsatt NavnSjef SmithAdams CruzSmith AdamsCruz JonesCruz List ut alle tilsatte med tilhørende sjef NrNavnSjef 105Adams Smith Clark 112Cruz Jones112 First NrNavnSjef 105Adams Smith Clark 112Cruz Jones112 Sec

86 SQLHiA Join uten Parent / Child relasjon NavnTilsattDato Adams Jones Smith Clark Cruz OrdreNrDatoBelop TilsattOrdre SELECT Ordre.OrdreNr FROM Tilsatt, Ordre WHERE Ordre.Dato = Tilsatt.TilsattDato AND Tilsatt.Navn= ‘Adams’ Lister ut alle ordre som ble ekspedert samme dato som Adams ble tilsatt. OrdreNr Ordre

87 SQLHiA Join m/NULL-verdier SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT Navn, PNr FROM Selger List selgere med tilhørende postnummer NavnPNr Nilsen5002 Olsen6400 Hansen Berg6400

88 SQLHiA Join m/NULL-verdier SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr List selgere med tilhørende postnummer NavnSted NilsenBergen OlsenMolde BergMolde Hansen mangler

89 SQLHiA Join-Outer JoinANSI standard SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr *= Adr.PNr List selgere med tilhørende postnummer NavnSted NilsenBergen OlsenMolde Hansen BergMolde

90 SQLHiA Join-Outer joinSQLBase SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr (+) List selgere med tilhørende postnummer NavnSted NilsenBergen OlsenMolde Hansen BergMolde

91 SQLHiA Join-Outer joinSQLBaseNULLVALUE SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen 4Berg6400 Selger PNrSted 5002Bergen 6400Molde 9000Tromsø Adr SELECT FROM Selger, Adr WHERE Selger.PNr = Adr.PNr (+) List selgere med tilhørende postnummer NavnSted NilsenBergen OlsenMolde HansenUkjent BergMolde

92 SQLHiA 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 joinStepANSI syntaksSQLBase LeftStep 1 + 2c1 *= c2c1 = c2 (+) Right Step 1 + 3c1 =* c2c1 (+) = c2 FullStep c1 *=* c2c1 (+) = c2 (+)

93 SQLHiA Multiple Query-nivåer SELECT SNr, VNr, Mg FROM Salg WHERE SNr = (SELECT SNr FROM Selger WHERE Navn = ‘Hansen’) SNrVNrMg SNrVNrMengde Salg (ID = SNr + VNr) SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

94 SQLHiA Multiple Quer-nivåer-Join SELECT SNr, VNr, Mg FROM Salg WHERE SNr = (SELECT SNr FROM Selger WHERE Navn = ‘Hansen’) SELECT Salg.SNr, Salg.VNr, Salg.Mg FROM Salg, Selger WHERE Selger.SNr = Salg.SNr AND Selger.Navn = ‘Hansen’ Multippel Query-nivå Join SNrVNrMengde Salg (ID = SNr + VNr) SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr)

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

96 SQLHiA View SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Selger (ID = SNr) PNrSted 5002Bergen 6400Molde 9000Tromsø Adr (ID = PNr) SNrNavnPNrSted 5Nilsen5002Bergen 2Olsen6400Molde 1Hansen9000Tromsø4 Berg6400Molde SelgerAdr SelgerAdr CREATE VIEW SelgerAdr AS SELECT Selger.SNr, Selger,Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Adr.PNr = Selger.PNr

97 SQLHiA View SELECT SNr, Navn, PNr, Sted FROM SelgerAdr SNrNavnPNrSted 5Nilsen5002Bergen 2Olsen6400Molde 1Hansen9000Tromsø 4Berg6400Molde SNrNavnPNrSted 5Nilsen5002Bergen 2Olsen6400Molde 1Hansen9000Tromsø4 Berg6400Molde SelgerAdr SelgerAdr

98 SQLHiA View CREATE VIEW SelgerTot AS SELECTSelger.SNr, Selger.Navn, Selger.PNr, Adr.Sted, Salg.Mg, Vare.VNr, Vare.Pris FROM Selger, Adr, Vare, Salg WHERE Adr.PNr = Selger.PNrAND Salg.SNr = Selger.SNrAND Salg.VNr=Vare.VNr SNrNavnPNrStedMgVNrPris 1Hansen9000Tromsø Hansen9000Tromsø Olsen6400Molde Olsen6400Molde Berg6400Molde Berg6400Molde Berg6400Molde Nilsen5002Bergen308500

99 SQLHiA UPDATE Oppdaterer en tabell UPDATEtable name view namecorrelation name SETcolumn name=expression NULL WHEREsearch conditionCHECK EXISTS CURRENT OF cursor name

100 SQLHiA Oppdatering av databasen UPDATE Vare SET Pris = 450 WHEREVNr = 3 UPDATE Vare SET Pris = 450 UPDATE Vare SET Pris = Pris * 1.10 WHEREVNr = 3 UPDATE Vare SET Pris = Pris * 1.10 UPDATE Tab SET a =... b =... c =...

101 SQLHiA DELETE Sletter rad(er) i en tabell DELETEtable name view namecorrelation name WHEREsearch condition CURRENT OF cursor name

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

103 SQLHiA SQL Funksjoner Aggregat funksjoner String funksjoner Date / Time funksjoner Logiske funksjoner Spesielle funksjoner Matematikk funksjoner Finans funksjoner

104 SQLHiA Aggregat-funksjoner AVGGjennomsnitt COUNTAntall MINMinimum avvik

105 SQLHiA String tegn til en desimal tegn til første tegn i en en string, gitt et to til string1 i (venstre) av en til små en string, gitt string/tall spesifisert ved y hvis x er av første bokstav i hvert ord til stor av en string med seg selv n tegn i en (høyre) en string etter gitt av tall til en del av en av blanke tegn (innledende og til store fra string til tall

106 SQLHiA Date / Time til en en i til i en i et dag i en Date / som representerer dag i et av et en date/time verdi fra av av en relativt til dag i år

107 SQLHiA @LNNaturlige logaritme

108 SQLHiA Finans perioder for å oppnå en fremtidig verdi av ekvidistante innbetalinger ved av ekvidistante for å vokse til gitt av et års innbetalings-perioder for gitt investering

109 SQLHiA Spesielle en verdi basert på verdi av en hexadesimal av et en string, gitt et string fra et basert på internasjonalt tegn-sett

110 SQLHiA Logiske og returnerer 1 hvis TRUE, 2 hvis TRUE hvis NULL

111 SQLHiA Funksjoner-Eksempel SELECT FROM SelgerAdr WHERE = ‘HANSEN’ Usikkerhet angående skrivemåte av navn i databasen (små eller store bokstaver, mellomrom,... )

112 SQLHiA (SelNr, a, b, c, d, e, f, g) SNr =6 gir her siste verdi g SelNrResultat aacgaacg

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

114 SQLHiA (Belop, p, n) 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 SQLHiA SQLEt større eksempel(1) SELECT StlngMax.Periode, StlngMax.StRang, FROM StlngMax, Ekteskap WHERE StlngMax.PersonID = Ekteskap.MannID AND Ekteskap.ENrMann = 1 AND GROUP BY StlngMax.Periode, StlngMax.StRang 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) StlngMaxEkteskap PersonID ….. Periode StRang MannID KvinneID ….. ENrMann ENrKvinne EVarighet PeriodeStillingGjEVarighetCount Kap29,3211 Sp30,1105 … Kap31,2323 Sp31,7258 …..

116 SQLHiA SQL-Et større eksempel(2) SELECT StlngMax.StRang, StlngMax.Periode, FROM StlngMax, Ekteskap WHERE StlngMax.PersonID = Ekteskap.MannID AND Ekteskap.ENrMann = 1 AND GROUP BY StlngMax.StRang, StlngMax.Periode 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) StlngMaxEkteskap PersonID ….. Periode StRang MannID KvinneID ….. ENrMann ENrKvinne EVarighet StillingPeriodeGjEVarighetCount Kap , ,2323 ….. Sp , ,7258 …..

117 SQLHiA UNLOAD Laster data fra en database ut til en fil av gitt format UNLOADSQL‘file name’source table COMPRESSDATACONTROL ‘file name’OVERWRITE ALL ASCII‘file name’source table DATACONTROL ‘file name’OVERWRITE DIF‘file name’source table DATACONTROL ‘file name’OVERWRITE DATABASE‘file name’ COMPRESSSHEMACONTROL ‘file name’OVERWRITE ALL ONCLIENTLOG ‘logfile name’ SERVER

118 SQLHiA UNLOAD-Eksempel UNLOAD DATA SQL c:\data\Adr.txt Adr INSERT INTOAdr (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 SQLHiA LOAD Laster data fra en fil av gitt format inn til en tabell i databasen LOADSQL‘file name’ COMPRESSCONTROL ‘file name’ ASCII‘file name’table name CONTROL ‘file name’ DIF‘file name’ CONTROL ‘file name’table name ONCLIENTLOG ‘logfile name’START AT line SERVER

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

121 SQLHiA ALTER TABLE Endrer på kolonne-strukturen i en tabell ALTER TABLEtable name, DROPcolumn name ADDcolumn namedata type (size)NOT NULL NOT NULL WITH DEFAULT, RENAMEcolumn namenew name TABLEnew name, MODIFYcolumn name data type (length)NULL NOT NULL NOT NULL WITH DEFAULT

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

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

124 SQLHiA ALTER TABLE (Error Message) Endrer på USERERROR strukturen i en tabell ALTER TABLEtable name ADDUSERERRORerror number DROP MODIFY FOR‘DELETE_PARENT’OFPRIMARY KEY ‘UPDATE_PARENT’FOREIGN KEYkey name ‘UPDATE_DEPENDENT’

125 SQLHiA ALTER TRIGGER Enable / Disable en trigger ALTERTRIGGERtrigger nameENABLE DISABLE

126 SQLHiA COMMIT Commits alle endringene til databasen siden forrige COMMIT eller ROLLBACK. Commits gjelder alle SqlHandles / Cursors som gjeldende applikasjon har koblet opp mot databasen. COMMIT WORKTRANSACTION FORCE

127 SQLHiA ROLLBACK Omgjør siste transaksjon ROLLBACK savepoint identifier TRANSACTION FORCE

128 SQLHiA SAVEPOINT Genererer SAVEPOINT til bruk ved ROLLBACK SAVEPOINT savepoint identifier

129 SQLHiA CREATE INDEX Oppretter en indeks CREATEINDEX index name UNIQUECLUSTERED HASHED, ON table name(column name) ASC DESC PCTFREE integer constantSIZE integer valueROWS BUCKETS Max size=6+number of+sum of<=255 columns inlength of all indexcolumns in index

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

131 SQLHiA CREATE SYNONYM Oppretter synonym (alias) navn til en tabell CREATESYNONYM synonym name PUBLIC FORtable name authorization IDview name

132 SQLHiA ROWCOUNT Returnerer antall rader i en tabell ROWCOUNT tablename

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

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

135 SQLHiA 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.

136 SQLHiA Brukere / Privilegier Brukere med DBA-privilegier Brukere med RESOURCE-privilegier Brukere med CONNECT-privilegier Det finnes tre hoved-typer brukere:

137 SQLHiA Authority Level SYSADM DBA RESOURCE CONNECT

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

139 SQLHiA 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.

140 SQLHiA 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.

141 SQLHiA Tilordning av autoritet / privilegier GRANT CONNECT TO Nilsen IDENTIFIED BY Katt GRANT CONNECT TO Olsen IDENTIFIED BY Gris GRANT CONNECT TO Hansen IDENTIFIED BY Hest GRANT RESOURCE TO Olsen GRANT DBA TO Hansen GRANT SELECT, UPDATE (Navn, PNr) ON Selger TO Olsen

142 SQLHiA Database Authority, GRANTRESOURCETOAuthID DBA,, CONNECT TOAuthIDIDENTIFIED BYPassword

143 SQLHiA Table Privileges, GRANTALL SELECT INSERT DELETE INDEX ALTER UPDATE, ( ColumnName ),, ONTableNameTOAuthID ViewNamePUBLIC

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

145 SQLHiA 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.

146 SQLHiA Embedded SQL / API DBMSAPIEmbedded Language Support DB2NeiAPL, Assembler, Basic, Cobol, Fortran, PL/I SQL/DSNeiAPL, Assembler, Basic, Cobol, Fortran, PL/I, Prolog OracleJaAda, C, Cobol, Fortran, Pascal, PL/I IngresNeiAda, Basic, C, Fortran, Pascal, PL/I SybaseJaIngen InformixNeiAda, C, Cobol OS/2 EENeiC SQLBaseJaIngen

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

148 SQLHiA 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.

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

150 SQLHiA SQL knyttet opp mot høgnivåspråk-variabler EXEC SQLSELECT SNrID, PNr INTO:Nr, :Navn, :PostNr FROMSelger WHERESNrID = 2 EXEC SQLINSERT INTOSelger VALUES(:Nr, :Navn, :PostNr)

151 SQLHiA Resultat-sett med mer enn en record Applikasjon Database Resultat-sett Record_1 Record_2 Record_3... SQL-statement Cursor Fetch

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

153 SQLHiA 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.

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

155 SQLHiA 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.

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

157 SQLHiA 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);... }

158 SQLHiA SAL funksjonalitet i SQLBase (1) SqlClearImmediateDisconnect Sql Handle benyttet av SqlImmediate SqlCloseLukker en navngitt cursor SqlCommitCommit gjeldende SQL transaksjon SqlConnectConnect en Sql Handle til en database SqlDisconnectDisconnect en Sql Handle fra en database SqlDropStoredCmdSletter en lagret kommando eller lagret prosedyre SqlErrorHenter gjeldende error kode for gitt Sql Handle SqlExecuteEksekverer et SQL statement, lagret kommendo eller lagret prosedyre SqlExistsSjekker eksistens av spesifisert(e) rad(er) SqlFetchNextHenter neste rad i et resultatsett SqlFetchPreviousHenter forrige rad i et resultatsett SqlFetchRowHenter gitt rad i et resultatsett SqlGetErrorPositionReturnerer offset i en error innen et SQL statement SqlGetErrorTextReturnerer error-tekst for et gitt SQL error number SqlGetModifiedRowsReturnerer antall endrete rader i en INSERT, UPDATE eller DELETE SqlGetParameterReturnerer en databaseparameter SqlGetParameterAllReturnerer en databaseparameter SqlGetResultSetCountReturnerer antall rader i et resultatsett SqlGetRollbackFlagReturnerer database rollback flag

159 SQLHiA SAL funksjonalitet i SQLBase (2) SqlImmediateKompilerer og eksekverer et SQL statement SqlOpenNavngir en cursor og eksekverer et SQL statement SqlPrepareKompilerer et SQL statement eller ikke-lagret prosedyre SqlPrepareAndExecuteKompilerer og eksekverer et SQL statement eller ikke-lagret prosedyre SqlRetrieveHenter en lagret kommando eller lagret prosedyre SqlSetIsolationLevelSetter isolasjonsnivå SqlSetLockTimeoutSetter timeout periode for venting på en lås SqlSetParameterSetter en database parameter SqlSetParameterAllSetter en database parameter SqlSetResultSetSetter resultatsett mode på/av SqlStorKompilerer og lagrer en kommando eller prosedyre

160 SQLHiA Relaterte SQLTalk kommandoer ERASESletter en lagret kommando eller lagret prosedyre EXECUTEEksekverer en lagret kommando eller lagret prosedyre PERFORMEksekverer enten en preparert SQL kommando / lagret prosedyre eller gjenfinner en lagret kommando / lagret prosedyre PREPAREKompilerer en SQL kommando eller ikke-lagret prosedyre SET TRACEEnable/Diasable statement tracing SET TRACEFILETrace output til server-fil eller servers aktivitets-skjerm SHOW TRACEViser enabling/disabling av TRACE SHOW TRACEFILEViser trace output (server-fil eller aktivitets-skjerm) STOREKompilerer og lagrer en kommando eller prosedyre i systemkatalogene (og dens eksekveringsplan for seinere eksekvering)

161 SQLHiA Connect / Disconnect SqlDatabaseDEMO SqlUserSYSADM SqlPasswordSYSADM SqlConnect SqlDisconnect Predefinerte variableDefault-verdier Centura-funksjoner

162 SQLHiA End


Laste ned ppt "SQLHiA SQL Standard databasespråk for relasjons-databaser."

Liknende presentasjoner


Annonser fra Google