1.62k likes | 1.79k Views
SQL. SQL. Standard databasespråk for relasjons-databaser. SQL. SQL ( S tructured Q uery L anguage, 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.
E N D
SQL SQL Standard databasespråk for relasjons-databaser
SQL • SQL (Structured Query Language, uttales: sequel eller ess-que-ell)er et komplett sett av kommandoer for aksess til en relasjons-database. • SQLer i dag standard database-språk for relasjons-databaser. • SQLbenyttes til: - Opprette datase-tabeller - Lagre data - Gjenfinne data - Endre data - Endre tabell-strukturer - Kombinere og beregne data - Ta hånd om database-sikkerhet • SQLer mengde-orientert, dvs kan anvendes på en gruppe av recordseller enkelt-record. • SQLer ikke-prosedyrisk, men kan innebygges i prosedyre-språk.
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. • 1976 SEQUEL/2 IBM prototype kalt System R. • 1980 Navnet endres til SQL. ANSI-standard. • 1997 SQL m/objektorientering
SQL Data-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.
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 SystemDatabase software til operasjoner på databasen
Database-system Bruker Appl. Database DBMS Bruker Appl. DD Bruker Appl.
Database-system - Eksempler Centura Team/Web Developer Bruker Appl. Database DBMS SQLTalk Bruker Appl. C++ SQL/API DD Bruker Appl. SQLBase SQLServer Oracle
Eksempel på innhold i en database Database Views Procedures Rules Tables Datatypes Indexes Defaults Triggers
Database / Tabell / Rad / Kolonne Database Tabell 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Rad Post Record Kolonne Felt
Flerbrukersystem Client / Server Client Server Database DBMS Application_1 SQL-Request Data Application_2 Application_3
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
Typer av SQL-kommandoer (2) • Data Definition Commands ( DDL )CREATE EVENTCREATE INDEXCREATE SYNONYMCREATE TABLECREATE TRIGGERCREATE VIEWPROCEDURE • Data Manipulation Commands ( DML )DELETEINSERTUPDATE • Data Query Commands ( DQL )SELECT
Typer av SQL-kommandoer (3) • Transaction Control CommandsCOMMITROLLBACKSAVEPOINT • Data Administration CommandsAUDIT MESSAGESTART AUDITSTOP AUDIT
Typer av SQL-kommandoer (4) • Data Control Commands (1)ALTER DATABASEALTER DBAREAALTER PASSWORDALTER STOGROUPALTER TABLEALTER TRIGGERCHECK DATABASECHECK TABLECOMMENT ON
Typer av SQL-kommandoer (5) • Data Control Commands (2)CREATE DATABASECREATE DBAREACREATE EVENTCREATE INDEXCREATE STOGROUPCREATE SYNONYMCREATE TABLECREATE TRIGGERCREATE VIEW
Typer av SQL-kommandoer (6) • Data Control Commands (3)DBATTRIBUTEDEINSTALL DATABASEDROP DBAREADROP EVENTDROP INDEXDROP STOGROUPDROP SYNONYMDROP TABLEDROP TRIGGERDROP VIEWGRANTGRANT EXECUTE ONINSTALL DATABASELABELLOADLOCK DATABASE
Typer av SQL-kommandoer (7) • Data Control Commands (4)REVOKEREVOKE EXECUTE ONROWCOUNTSET DEFAULT STOGROUPUNLOADUNLOCK DATABASEDUPDATE STATISTICS
Bruksmåte • Interaktivt vha et interface-program • Innebygget i et programmerings-språk
Salg-tabell - 1NF SNr Navn Sted PNr VNr Pris Mengde 5 Nilsen Bergen 5002 8 500 30 2 Olsen Molde 6400 1 200 20 2 Olsen Molde 6400 3 400 10 1 Hansen Tromsø 9000 5 300 50 1 Hansen Tromsø 9000 8 500 40 4 Berg Molde 6400 1 200 70 4 Berg Molde 6400 3 400 50 4 Berg Molde 6400 5 300 20 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
Salg-tabeller - 3NF Selger (ID = SNr) Adr (ID = PNr) Vare (ID = VNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø VNr Pris 8 500 1 200 3 400 5 300 Salg (ID = SNr + VNr) SNr VNr Mengde 5 8 30 2 1 20 2 3 10 1 5 50 1 8 40 4 1 70 4 3 50 4 5 20 ID Fremmed- nøkkel
Salg-tabeller - 3NF Selger Adr Vare Salg
Database / Tabell / Rad / Kolonne Database Tabell 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Rad Post Record Kolonne Felt
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 Handel_3 Step 3: Opprett Database Handel_1 Databasen Handel Handel_2
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
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
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
CREATE TABLE Oppretter en tabell CREATE TABLE <TableName> (<ColumnName> <DataType>[<Size>], <ColumnName> <DataType>[<Size>], ...) Database Tabell_1 Tabell_2 Tabell_3
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 Salg-tabeller - Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 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 Salg-tabeller - Vare Vare (ID = VNr) VNr Pris 8 500 1 200 3 400 5 300 CREATE TABLE Vare ( VNr Integer NOT NULL, Pris Integer, PRIMARY Key(VNr) ) CREATE UNIQUE INDEX VareNdx ON Vare(VNr)
Oppretting av Salg-tabeller - Salg Salg (ID = SNr + VNr) SNrVNr Mengde 5 8 30 2 1 20 2 3 10 1 5 50 1 8 40 4 1 70 4 3 50 4 5 20 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)
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, +32767] 5 siffer Integer [-2147483648, + 2147483647] 10 siffer Decimal[(prec, scale)] [-999....., + 999.....] 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 10.12.1899 Time = Frac part (0 = 12:00 AM) TimeStamp Samme som DateTime (DB2 komp.) Date Time part = 0 Time Date part = 0
INSERT Innsetter en rad i en tabell INSERT table name view name , ( column name ) VALUES ( constant ) bind variable ADJUSTING cursor name system keyword subselect
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”) INSERT INTO Adr VALUES (9000,”Tromsø”)
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ø /
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”) INSERT INTO Adr VALUES (9000,”Tromsø”)
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ø /
Innsetting av tabell-verdier - Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 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 /
SELECT SELECT SelectItem ALL , DISTINCT * FROM TableSpecification , WHERE SearchCondition GROUP BY GroupingColumn , HAVING SearchCondition ORDER BY SortSpecification ,
Select - Enkel bruk SELECT SNr, Navn, PNr FROM Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Resultatsett
Select Kvalifiserte kolonne-navn SELECT Selger.SNr, Selger.Navn, Selger.PNr FROM Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400
SELECT - Bruk av * SELECT * FROM Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400
SELECT - Enkelt-felter SELECT PNr, Navn FROM Selger Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 PNr Navn 5002 Nilsen 6400 Olsen 9000 Hansen 6400 Berg
SELECT - Distinct SELECT DISTINCT SNr FROM Salg Salg (ID = SNr + VNr) SNr VNr Mengde 5 8 30 2 1 20 2 3 10 1 5 50 1 8 40 4 1 70 4 3 50 4 5 20 SNr 1 2 4 5 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.
WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 2 Olsen 6400 4 Berg 6400
WHERE SELECT VNr, Pris FROM Vare WHERE Pris > 300 Vare (ID = VNr) VNr Pris 8 500 1 200 3 400 5 300 VNr Pris 8 500 3 400
WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 AND Navn > ‘C’ Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 2 Olsen 6400
WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 OR SNr > 3 Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 4 Berg 6400
WHERE SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 OR NOT SNr > 3 Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 2 Olsen 6400 1 Hansen 9000 4 Berg 6400
SQL - 3-verdi logikk 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 NOT True False NULL False True NULL