SQL HiA
SQL
SQL
Standard databasespråk
for
relasjons-databaser
SQL HiA
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.
SQL HiA
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 HiA
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.
SQL HiA
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
SQL HiA
Database-system
Bruker
Bruker
Bruker
Appl.
Appl.
Appl.
DBMSDBMS
DDDD
DatabaseDatabase
SQL HiA
Database-system - Eksempler
Bruker
Bruker
Bruker
Appl.
Appl.
Appl.
DBMSDBMS
DDDD
DatabaseDatabase
Centura Team/Web Developer
SQLTalk
C++ SQL/API
SQLBase
SQLServer
Oracle
SQL HiA
Eksempel på innhold i en database
TablesTables
IndexesIndexes
TriggersTriggers
ViewsViews ProceduresProcedures
RulesRules
DatatypesDatatypes
DefaultsDefaults
Database
SQL HiA
Database / Tabell / Rad / Kolonne
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Database
Tabell
Rad
Post
Record
Kolonne
Felt
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMSDBMS
Application_2Application_2
SQL-Request
Data
Application_3Application_3
Application_1Application_1
Client Server
SQL HiA
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
SQL HiA
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
SQL HiA
Typer av SQL-kommandoer (3)
• Transaction Control Commands
COMMIT
ROLLBACK
SAVEPOINT
• Data Administration Commands
AUDIT MESSAGE
START AUDIT
STOP AUDIT
SQL HiA
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
SQL HiA
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
SQL HiA
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
SQL HiA
Typer av SQL-kommandoer (7)
• Data Control Commands (4)
REVOKE
REVOKE EXECUTE ON
ROWCOUNT
SET DEFAULT STOGROUP
UNLOAD
UNLOCK DATABASED
UPDATE STATISTICS
SQL HiA
Bruksmåte
• Interaktivt vha et interface-program
• Innebygget i et programmerings-språk
SQL HiA
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
SQL HiA
Salg-tabeller - 3NF
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = 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
Salg (ID = SNr + VNr)
ID Fremmed-
nøkkel
SQL HiA
Salg-tabeller - 3NF
SelgerSelger AdrAdr VareVare
SalgSalg
SQL HiA
Database / Tabell / Rad / Kolonne
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Database
Tabell
Rad
Post
Record
Kolonne
Felt
SQL HiA
Partisjonering av en database
Step 1: Opprett DatabaseArea
Step 2: Opprett StorageGroup
Step 3: Opprett Database
Vol_1 Vol_2
Handel_2
Handel_1 Handel_3
StorageGroup
Handel_Files
StorageGroup
Handel_Log
Handel_2
Handel_1 Handel_3
Data Log filer
Handel_2
Handel_1
Handel_3
Databasen
Handel
SQL HiA
CREATE DBAREA
CREATE DBAREA dbarea 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:CenturaHandel_1 SIZE 5
CREATE DBAREA Handel_2 AS Vol_1:CenturaHandel_2 SIZE 10
CREATE DBAREA Handel_3 AS Vol_2:CenturaHandel_3 SIZE 10
Vol_1 Vol_2
Handel_2
Handel_1 Handel_3
SQL HiA
CREATE STOGROUP
Oppretter en storage group
CREATE STOGROUP stogroup name
,
USING dbarea-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_1 Handel_3
SQL HiA
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
Data Log filer
Handel_2
Handel1 Handel_3
Databasen Handel
SQL HiA
CREATE TABLE
Oppretter en tabell
CREATE TABLE <TableName>
(<ColumnName> <DataType>[<Size>],
<ColumnName> <DataType>[<Size>], ...)
Tabell_1Tabell_1 Tabell_2Tabell_2
Tabell_3Tabell_3
Database
SQL HiA
Oppretting av Salg-tabeller - Adr
CREATE TABLE Adr (
PNr Integer NOT NULL,
Sted Char(20),
PRIMARY Key(PNr)
)
CREATE UNIQUE INDEX AdrNdx ON Adr(PNr)
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
Oppretting av Salg-tabeller - Selger
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)
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
ID Fremmednøkkel
SQL HiA
Oppretting av Salg-tabeller - Vare
CREATE TABLE Vare (
VNr Integer NOT NULL,
Pris Integer,
PRIMARY Key(VNr)
)
CREATE UNIQUE INDEX VareNdx ON Vare(VNr)
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = VNr)
SQL HiA
Oppretting av Salg-tabeller - Salg
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)
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
Salg (ID = SNr + VNr)
SQL HiA
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
SQL HiA
INSERT
Innsetter en rad i en tabellInnsetter en rad i en tabell
INSERT table name
view name ,
( column name )
VALUES ( constant )
bind variable ADJUSTING cursor name
system keyword
subselect
SQL HiA
INSERT - Eksempel
INSERT INTO Adr
VALUES (5002,”Bergen”)
INSERT INTO Adr
VALUES (6400,”Molde”)
INSERT INTO Adr
VALUES (9000,”Tromsø”)
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
INSERT - Eksempel
INSERT INTO Adr (PNr,Sted)
VALUES(:1,:2)

$DATATYPES NUMERIC,CHARACTER
5002,Bergen
6400,Molde
9000,Tromsø
/
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
Innsetting av tabell-verdier - Adr
INSERT INTO Adr
VALUES (5002,”Bergen”)
INSERT INTO Adr
VALUES (6400,”Molde”)
INSERT INTO Adr
VALUES (9000,”Tromsø”)
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
Innsetting av tabell-verdier - Adr
INSERT INTO Adr (PNr,Sted)
VALUES(:1,:2)

$DATATYPES NUMERIC,CHARACTER
5002,Bergen
6400,Molde
9000,Tromsø
/
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
Innsetting av tabell-verdier - Selger
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
/
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
SELECT
SELECT SelectItem
ALL ,
DISTINCT *
FROM TableSpecification
,
WHERE SearchCondition
GROUP BY GroupingColumn
,
HAVING SearchCondition
ORDER BY SortSpecification
,
SQL HiA
Select - Enkel bruk
SELECT SNr, Navn, PNr
FROM Selger
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
Selger (ID = SNr)
Resultatsett
SQL HiA
Select Kvalifiserte kolonne-navn
SELECT Selger.SNr, Selger.Navn, Selger.PNr
FROM Selger
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
Selger (ID = SNr)
SQL HiA
SELECT - Bruk av *
SELECT *
FROM Selger
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
Selger (ID = SNr)
SQL HiA
SELECT - Enkelt-felter
SELECT PNr, Navn
FROM Selger
PNr Navn
5002 Nilsen
6400 Olsen
9000 Hansen
6400 Berg
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
SELECT - Distinct
SELECT DISTINCT SNr
FROM Salg
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.
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
Salg (ID = SNr + VNr)
SQL HiA
WHERE
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr = 6400
SNr Navn PNr
2 Olsen 6400
4 Berg 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
WHERE
SELECT VNr, Pris
FROM Vare
WHERE Pris > 300
VNr Pris
8 500
3 400
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = VNr)
SQL HiA
WHERE
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr = 6400 AND Navn > ‘C’
SNr Navn PNr
2 Olsen 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
WHERE
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr = 6400 OR SNr > 3
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
4 Berg 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
WHERE
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr = 6400 OR NOT SNr > 3
SNr Navn PNr
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
SQL - 3-verdi logikk
A op B
True
False
NULL
WHERE-test Ok ved True
GROUP BY -test Ok ved True og
NULL
AND True False NULL
True True False NULL
False False False False
NULL NULLFalse NULL
OR True False NULL
True True True True
False True False NULL
NULL True NULLNULL
NOT True False NULL
False True NULL
SQL HiA
IN
SELECT PNr, Sted
FROM Adr
WHERE Sted IN (‘Molde’,Tromsø’)
PNr Sted
6400 Molde
9000 Tromsø
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
BETWEEN
SELECT SNr, Navn, PNr
FROM Selger
WHERE SNr BETWEEN 1 AND 4
SNr Navn PNr
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Joker-symbol % og _
SELECT SNr, Navn, PNr
FROM Selger
WHERE Navn LIKE ‘N%’
SNr Navn PNr
5 Nilsen 5002
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Joker-symbol % og _
SELECT SNr, Navn, PNr
FROM Selger
WHERE Navn LIKE ‘%sen’
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Joker-symbol % og _
SELECT SNr, Navn, PNr
FROM Selger
WHERE Navn LIKE ‘Ni%sen’
SNr Navn PNr
5 Nilsen 5002
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Joker-symbol % og _
SELECT SNr, Navn, PNr
FROM Selger
WHERE Navn LIKE ‘Ni_sen’
SNr Navn PNr
5 Nilsen 5002
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Joker-symbol % og _
SELECT SNr, Navn, PNr
FROM Selger
WHERE Navn LIKE ‘Ni/_%’
SNr Navn PNrSNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Joker-symbol % og _
SELECT SNr, Navn, PNr
FROM Selger
WHERE Navn LIKE ‘Ni//%’
SNr Navn PNrSNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
NULL
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr IS NULL
SNr Navn PNrSNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
NULL
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr IS NOT NULL
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
Selger (ID = SNr)
SQL HiA
Aggregat-funksjoner - Sum
SELECT SUM(Mg)
FROM Salg
Sum(Mg)
290
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
Salg (ID = SNr + VNr)
SQL HiA
Aggregat-funksjoner - Avg
SELECT AVG(Mg)
FROM Salg
Avg(Mg)
36.25
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
Salg (ID = SNr + VNr)
SQL HiA
Aggregat-funksjoner - COUNT
SELECT COUNT(*)
FROM Salg
Count(*)
8
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
Salg (ID = SNr + VNr)
SQL HiA
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)
8 7 6
SQL HiA
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)
6 5
SQL HiA
Aggregat-funksjoner - Count / Distinct
SELECT COUNT(DISTINCT Mg)
FROM Salg
Count(Distinct Mg)
6
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
Salg (ID = SNr + VNr)
SQL HiA
Aggregat-funksjoner - Max
SELECT MAX(Mg)
FROM Salg
Max(Mg)
70
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
Salg (ID = SNr + VNr)
SQL HiA
Aggregat-funksjoner - Min
SELECT MIN(Mg)
FROM Salg
Min(Mg)
10
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
Salg (ID = SNr + VNr)
SQL HiA
Aggregat-funksjoner - Max
SELECT MAX(SNr+VNr)
FROM Salg
Max(SNr+VNr)
13
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
Salg (ID = SNr + VNr)
SQL HiA
Group By
SELECT SNr, MAX(Mg)
FROM Salg
GROUP BY SNr
SNr Max(Mg)
1 50
2 20
4 70
5 30
SNr VNr Mengde
1 5 50
1 8 40
2 1 20
2 3 10
4 1 70
4 3 50
4 5 20
5 8 30
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
Salg (ID = SNr + VNr)
SQL HiA
Group By
SELECT SNr, VNr, MAX(Mg)
FROM Salg
GROUP BY SNr, VNr
SNr VNr Max(Mg)
1 5 50
1 8 40
2 1 20
2 3 10
4 1 70
4 3 50
4 5 20
5 8 30
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
Salg (ID = SNr + VNr)
SQL HiA
Group By / Having
SELECT SNr, VNr, MAX(Mg)
FROM Salg
GROUP BY SNr, VNr
HAVING MAX(Mg) > 30
SNr VNr Max(Mg)
1 5 50
1 8 40
4 1 70
4 3 50
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
Salg (ID = SNr + VNr)
SQL HiA
Uttrykk
SELECT VNr, Pris*1.5
FROM Vare
VNr Pris*1.5
8 750
1 300
3 600
5 450
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = VNr)
SQL HiA
Tekst-plassering i utlisting
SELECT VNr, Pris, ‘Kr’
FROM Vare
VNr Pris ‘Kr’
8 500 Kr
1 200 Kr
3 400 Kr
5 300 Kr
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = VNr)
SQL HiA
Order By
SELECT SNr, Navn, PNr
FROM Selger
ORDER BY SNr
SNr Navn PNr
1 Hansen 9000
2 Olsen 6400
4 Berg 6400
5 Nilsen 5002
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Order By Asc / Desc
SELECT SNr, Navn, PNr
FROM Selger
ORDER BY PNr ASC, SNr DESC
SNr Navn PNr
5 Nilsen 5002
4 Berg 6400
2 Olsen 6400
1 Hansen 9000
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Order By / Group By
SELECT SNr, VNr, MAX(Mg)
FROM Salg
GROUP BY SNr, VNr
ORDER BY VNr
SNr VNr Max(Mengde)
2 1 20
4 1 70
2 3 10
4 3 50
4 5 20
1 5 50
5 8 20
1 8 40
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
Salg (ID = SNr + VNr)
SQL HiA
Kolonne-nummer-sortering
SELECT SNr, Navn, PNr
FROM Selger
ORDER BY 3 DESC
SNr Navn PNr
1 Hansen 9000
2 Olsen 6400
4 Berg 6400
5 Nilsen 5002
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Join
SELECT Selger.Navn, Selger.PNr, Adr.Sted
FROM Selger, Adr
WHERE Selger.PNr = Adr.PNrID
Navn PNr Sted
Hansen 9000 Tromsø
Olsen 6400 Molde
Berg 6400 Molde
Nilsen 5002 Bergen
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SQL HiA
Join - Produkt-tabell
SNr Navn PNr PNr Sted
5 Nilsen 5002 5002 Bergen
2 Olsen 6400 5002 Bergen
1 Hansen 9000 5002 Bergen
4 Berg 6400 5002 Bergen
5 Nilsen 5002 6400 Molde
2 Olsen 6400 6400 Molde
1 Hansen 9000 6400 Molde
4 Berg 6400 6400 Molde
5 Nilsen 5002 9000 Tromsø
2 Olsen 6400 9000 Tromsø
1 Hansen 9000 9000 Tromsø
4 Berg 6400 9000 Tromsø
Selger Adr
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr
SELECT Selger.SNr, Selger.Navn, Selger.PNr
Adr.Sted
FROM Selger, Adr
SQL HiA
Join
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
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 * .
SNr Navn PNr Sted
5 Nilsen 5002 Bergen
2 Olsen 6400 Bergen
1 Hansen 9000 Bergen
4 Berg 6400 Bergen
5 Nilsen 5002 Molde
2 Olsen 6400 Molde
1 Hansen 9000 Molde
4 Berg 6400 Molde
5 Nilsen 5002 Tromsø
2 Olsen 6400 Tromsø
1 Hansen 9000 Tromsø
4 Berg 6400 Tromsø
Selger Adr
*
*
*
*
SQL HiA
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 8 500 30
Olsen Molde 1 200 20
Olsen Molde 3 400 10
Berg Molde 1 200 70
Berg Molde 3 400 50
Bergn Molde 5 300 20
Hansen Tromsø 5 300 50
Hansen Tromsø 8 500 40
SQL HiA
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.Navn Sec.Navn First.PNr
Nilsen Nilsen 5002
Olsen Olsen 6400
Berg Olsen 6400
Hansen Hansen 9000
Olsen Berg 6400
Berg Berg 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
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
First.Navn Sec.Navn First.PNr
Berg Olsen 6400SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
Join - Kobling av en tabell mot seg selv
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
Tilsatt
Navn Sjef
Smith Adams
Cruz Smith
Adams Cruz
Jones Cruz
List ut alle tilsatte med tilhørende sjef
Nr Navn Sjef
105 Adams 112
107 Smith 105
110 Clark
112 Cruz 107
115 Jones 112
First
Nr Navn Sjef
105 Adams 112
107 Smith 105
110 Clark
112 Cruz 107
115 Jones 112
Sec
SQL HiA
Join uten Parent / Child relasjon
Navn TilsattDato
Adams 12.02.90
Jones 17.10.91
Smith 14.06.92
Clark 21.10.92
Cruz 04.01.93
OrdreNr Dato Belop
11305 05.07.89 1000
11296 12.02.90 2000
15320 15.04.92 1500
15900 12.02.90 7200
17541 04.07.93 3100
Tilsatt Ordre
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
11296
15900
Ordre
SQL HiA
Join m/NULL-verdier
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr
SELECT Navn, PNr
FROM Selger
List selgere med tilhørende postnummer
Navn PNr
Nilsen 5002
Olsen 6400
Hansen
Berg 6400
SQL HiA
Join m/NULL-verdier
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr
SELECT Navn, Sted
FROM Selger, Adr
WHERE Selger.PNr = Adr.PNr
List selgere med tilhørende postnummer
Navn Sted
Nilsen Bergen
Olsen Molde
Berg Molde
Hansen mangler
SQL HiA
Join - Outer Join ANSI standard
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr
SELECT Navn, Sted
FROM Selger, Adr
WHERE Selger.PNr *= Adr.PNr
List selgere med tilhørende postnummer
Navn Sted
Nilsen Bergen
Olsen Molde
Hansen
Berg Molde
SQL HiA
Join - Outer join SQLBase
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr
SELECT Navn, Sted
FROM Selger, Adr
WHERE Selger.PNr = Adr.PNr (+)
List selgere med tilhørende postnummer
Navn Sted
Nilsen Bergen
Olsen Molde
Hansen
Berg Molde
SQL HiA
Join - Outer join SQLBase NULLVALUE
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen
4 Berg 6400
Selger
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr
SELECT Navn, @NULLVALUE(Sted,’Ukjent’)
FROM Selger, Adr
WHERE Selger.PNr = Adr.PNr (+)
List selgere med tilhørende postnummer
Navn Sted
Nilsen Bergen
Olsen Molde
Hansen Ukjent
Berg Molde
SQL HiA
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 1 + 2 c1 *= c2 c1 = c2 (+)
Right Step 1 + 3 c1 =* c2 c1 (+) = c2
Full Step 1 + 2 + 3 c1 *=* c2 c1 (+) = c2 (+)
SQL HiA
Multiple Query-nivåer
SELECT SNr, VNr, Mg
FROM Salg
WHERE SNr =
( SELECT SNr
FROM Selger
WHERE Navn = ‘Hansen’)
SNr VNr Mg
1 5 50
1 8 40
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
Salg (ID = SNr +
VNr)
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
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
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
Salg (ID = SNr + VNr)
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
SQL HiA
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.
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
Salg (ID = SNr + VNr)
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = VNr)
VNr Pris
8 500
1 200
3 400
5 300
Vare (ID = VNr)
SQL HiA
View
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
PNr Sted
5002 Bergen
6400 Molde
9000 Tromsø
Adr (ID = PNr)
SNr Navn PNr Sted
5 Nilsen 5002 Bergen
2 Olsen 6400 Molde
1 Hansen 9000 Tromsø
4 Berg 6400 Molde
Selger Adr
SelgerAdr
CREATE VIEW SelgerAdr AS
SELECT Selger.SNr, Selger,Navn, Selger.PNr,
Adr.Sted
FROM Selger, Adr
WHERE Adr.PNr = Selger.PNr
SQL HiA
View
SELECT SNr, Navn, PNr, Sted
FROM SelgerAdr
SNr Navn PNr Sted
5 Nilsen 5002 Bergen
2 Olsen 6400 Molde
1 Hansen 9000 Tromsø
4 Berg 6400 Molde
SNr Navn PNr Sted
5 Nilsen 5002 Bergen
2 Olsen 6400 Molde
1 Hansen 9000 Tromsø
4 Berg 6400 Molde
Selger Adr
SelgerAdr
SQL HiA
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 9000 Tromsø 50 5
300
1 Hansen 9000 Tromsø 40 8
500
2 Olsen 6400 Molde 20 1
200
2 Olsen 6400 Molde 10 3
400
4 Berg 6400 Molde 70 1
200
SQL HiA
UPDATE
Oppdaterer en tabellOppdaterer en tabell
UPDATE table name
view name correlation name
SET column name = expression
NULL
WHERE search condition CHECK EXISTS
CURRENT OF cursor name
SQL HiA
Oppdatering av databasen
UPDATE Vare
SET Pris = 450
WHERE VNr = 3
UPDATE Vare
SET Pris = 450
UPDATE Vare
SET Pris = Pris * 1.10
WHERE VNr = 3
UPDATE Vare
SET Pris = Pris * 1.10
UPDATE Tab
SET a = ...
b = ...
c = ...
SQL HiA
DELETE
Sletter rad(er) i en tabellSletter rad(er) i en tabell
DELETE table name
view name correlation name
WHERE search condition
CURRENT OF cursor name
SQL HiA
DELETE - Eksempel
DELETE FROM Salg
WHERE SNr = 4 AND
VNr= 3
DELETE FROM Salg
Sletting av samtlige poster
i tabellen Salg.
SQL HiA
SQL Funksjoner
• Aggregat funksjoner
• String funksjoner
• Date / Time funksjoner
• Logiske funksjoner
• Spesielle funksjoner
• Matematikk funksjoner
• Finans funksjoner
SQL HiA
Aggregat-funksjoner
AVG Gjennomsnitt
COUNT Antall
MAX Maksimum
@MEDIAN Middelverdi
MIN Minimum
SUM Sum
@SDV Standard avvik
SQL HiA
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
SQL HiA
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
SQL HiA
Matematikk funksjoner
@ABS Absolutt-verdi
@ACOS Arcus cosinus
@ASIN Arcus sinus
@ATAN Arcus tangens
@ATAN2 To-kvadrant arcus tangens
@COS Cosinus
@EXP Eksponential-funksjon
@FACTORIAL Fakultet
@INT Heltallsdel
@LN Naturlige logaritme
@LOG 10’er logaritme
@MOD Divisjonsrest
@PI Tallet Pi (=3.14159265...)
@ROUND Avrunding
@SIN Sinus
@SQRT Kvadratrot
@TAN Tangens
SQL HiA
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
SQL HiA
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
SQL HiA
Logiske funksjoner
@IF Tester og returnerer 1 hvis TRUE, 2 hvis FALSE
@ISNA Returnerer TRUE hvis NULL
SQL HiA
Funksjoner - Eksempel
SELECT SNr, @PROPER(Navn)
FROM SelgerAdr
WHERE @UPPER(@TRIM(Navn)) = ‘HANSEN’
Usikkerhet angående skrivemåte av navn i databasen (små eller store bokstaver, mellomrom, ... )
SQL HiA
@CHOOSE
@CHOOSE (SelNr, a, b, c, d, e, f, g)
SNr <= 0 gir første liste-verdi a, SNr = 1 neste verdi b, …, SNr >=6 gir her siste verdi g
SelNr Resultat
0
-1
2
12
a
a
c
g
SQL HiA
@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
SQL HiA
@FV
@FV (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
SQL HiA
SQL Et større eksempel (1)
SELECT StlngMax.Periode, StlngMax.StRang, COUNT(*),
@ROUND(AVG(Ektekskap.EVarighet),1)
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)
StlngMax Ekteskap
PersonID
…..
Periode
StRang
MannID
KvinneID
…..
ENrMann
ENrKvinne
EVarighet
Periode Stilling GjEVarighet Count
1500-1549 Kap 29,3 211
Sp 30,1 105
…..
1550-1599 Kap 31,2 323
Sp 31,7 258
…..
…..
SQL HiA
SQL - Et større eksempel (2)
SELECT StlngMax.StRang, StlngMax.Periode, COUNT(*),
@ROUND(AVG(Ektekskap.EVarighet),1)
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)
StlngMax Ekteskap
PersonID
…..
Periode
StRang
MannID
KvinneID
…..
ENrMann
ENrKvinne
EVarighet
Stilling Periode GjEVarighet Count
Kap 1500-1549 29,3 211
1550-1599 31,2 323
…..
Sp 1500-1549 30,1 105
1550-1599 31,7 258
…..
SQL HiA
UNLOAD
Laster data fra en database ut til en fil av gitt formatLaster data fra en database ut til en fil av gitt format
SQL ‘file name’ source ta
COMPRESS DATA CONTROL ‘file name’ OVERWRITE ALL
ASCII ‘file name’ sou
DATA CONTROL ‘file name’ OVERWRITE
DIF ‘file name’ sou
DATA CONTROL ‘file name’ OVERWRITE
DATABASE ‘file name’
COMPRESS SHEMA CONTROL ‘file name’ OVERWRITE
ALL
CLIENT LOG ‘logfile name’
SERVER
SQL HiA
UNLOAD - Eksempel
UNLOAD DATA SQL c:dataAdr.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:dataAdr.txt.
SQL HiA
LOAD
Laster data fra en fil av gitt format inn til en tabell i databasenLaster 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
SQL HiA
LOAD - Eksempel
LOAD SQL c:dataAdr.txt
SQL HiA
ALTER TABLE
Endrer på kolonne-strukturen i en tabellEndrer 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
NOT NULL WITH DEFAULT
SQL HiA
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
SQL HiA
ALTER TABLE (Referential Integrity)
Endrer på PRIMARY KEY / FOREIGN KEY strukturen i en tabellEndrer 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
SQL HiA
ALTER TABLE (Error Message)
Endrer på USERERROR strukturen i en tabellEndrer 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’
SQL HiA
ALTER TRIGGER
Enable / Disable en triggerEnable / Disable en trigger
ALTER TRIGGER trigger name ENABLE
DISABLE
SQL HiA
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
WORK TRANSACTION <id> FORCE
SQL HiA
ROLLBACK
Omgjør siste transaksjonOmgjør siste transaksjon
ROLLBACK
savepoint identifier
TRANSACTION <id> FORCE
SQL HiA
SAVEPOINT
Genererer SAVEPOINT til bruk ved ROLLBACKGenererer SAVEPOINT til bruk ved ROLLBACK
SAVEPOINT savepoint identifier
SQL HiA
CREATE INDEX
Oppretter en indeksOppretter en indeks
EATE INDEX index name
UNIQUE CLUSTERED HASHED
,
table name ( column name )
ASC
DESC
CTFREE integer constant SIZE integer value ROWS
BUCKET
Max size = 6 + number of + sum of <= 255
columns in length of all
index columns in
index
SQL HiA
CREATE INDEX - Eksempel
CREATE UNIQUE INDEX Bidndx
ON Bedrift (BedriftsID)
CREATE INDEX BnNdx
ON Bedrift (BedriftsNavn)
SQL HiA
CREATE SYNONYM
Oppretter synonym (alias) navn til en tabellOppretter synonym (alias) navn til en tabell
CREATE SYNONYM synonym name
PUBLIC
FOR table name
authorization ID view name
SQL HiA
ROWCOUNT
Returnerer antall rader i en tabellReturnerer antall rader i en tabell
ROWCOUNT tablename
SQL HiA
UNION
Genererer resultatsett som union av multiple SELECTGenererer resultatsett som union av multiple SELECT
UNION
ALL
select command
,
ORDER BY integer constant
ASC
DESC
SELECT …
UNION ALL
SELECT …
UNION ALL
SELECT …
...
Duplikater blir ikke eliminert
SQL HiA
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
,
SET system catalog column name = expression
,
DISTINCTCOUNT (index key) = expression
TABLE
,
SET system catalog column name = expression
DATABASE
SQL HiA
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.
SQL HiA
Brukere / Privilegier
• Brukere med DBA-privilegier
• Brukere med RESOURCE-privilegier
• Brukere med CONNECT-privilegier
Det finnes tre hoved-typer brukere:
SQL HiA
Authority Level
SYSADMSYSADM
DBADBA
RESOURCERESOURCE
CONNECTCONNECT
SQL HiA
CONNECT
• Adgang til databasen.
• Adgang til å manipulere spesifikke tabeller i følge tilordnede privilegier.
SQL HiA
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.
SQL HiA
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.
SQL HiA
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
SQL HiA
Database Authority
,
GRANT RESOURCE TO AuthID
DBA
, ,
CONNECT TO AuthID IDENTIFIED BY Password
SQL HiA
Table Privileges
,
GRANT ALL
SELECT
INSERT
DELETE
INDEX
ALTER
UPDATE
,
( ColumnName )
, ,
ON TableName TO AuthID
ViewName PUBLIC
SQL HiA
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 HiA
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 HiA
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
SQL HiA
Høgnivå-språk - SQL
Høgnivåspråk
Data-flyt
Variabler
Blokk-struktur
Test
Sløyfer
Input / Output
SQL
Database-aksess
SQL HiA
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.
SQL HiA
SQL-prosessering
SELECT A,B,C
FROM X,Y
WHERE A < 5000 AND
C = ‘ABC’
Parse statement
Validate statement
Optimize statement
Generate Application Plan
Execute statement
Binary form of
SQL statement
Database
system catalog
SQL HiA
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 HiA
Resultat-sett med mer enn en record
ApplikasjonApplikasjon
DatabaseDatabase
Resultat-sett
Record_1
Record_2
Record_3
...
SQL-statement
Cursor
Fetch
SQL HiA
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: %sn”, cityname);
...
}
SQL HiA
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.
SQL HiA
5 faser ved generering av embedded SQL-program
Embedded SQL source programEmbedded SQL source program
Stripped source programStripped source program Database request moduleDatabase request module
Precompiler
Compiler BIND
Object codeObject code DBMS libraryDBMS library Application planApplication plan
Linker
Executable programExecutable program
Application plan
Database
Application plan
Database
SQL HiA
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 HiA
SQL API
Application
progam
Application
progam DBMSDBMS
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 ( )
SQL HiA
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 HiA
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
SQL HiA
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
SQL HiA
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)
SQL HiA
Connect / Disconnect
SqlDatabase DEMO
SqlUser SYSADM
SqlPassword SYSADM
SqlConnect
SqlDisconnect
Predefinerte variable Default-verdier
Centura-funksjoner
SQL HiA
End

K06

  • 1.
  • 2.
    SQL HiA 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.
    SQL HiA Historikk • 1970Codd 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
  • 4.
    SQL HiA SQL Data-språkfor 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.
    SQL HiA Hva beståren 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.
  • 7.
    SQL HiA Database-system -Eksempler Bruker Bruker Bruker Appl. Appl. Appl. DBMSDBMS DDDD DatabaseDatabase Centura Team/Web Developer SQLTalk C++ SQL/API SQLBase SQLServer Oracle
  • 8.
    SQL HiA Eksempel påinnhold i en database TablesTables IndexesIndexes TriggersTriggers ViewsViews ProceduresProcedures RulesRules DatatypesDatatypes DefaultsDefaults Database
  • 9.
    SQL HiA Database /Tabell / Rad / Kolonne 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Database Tabell Rad Post Record Kolonne Felt
  • 10.
    SQL HiA Flerbrukersystem Client/ Server DatabaseDBMSDBMS Application_2Application_2 SQL-Request Data Application_3Application_3 Application_1Application_1 Client Server
  • 11.
    SQL HiA Typer avSQL-kommandoer (1) • Data Definition Commands ( DDL ) • Data Manipulation Commands ( DML ) • Data Query Commands ( DQL ) • Transaction Control Commands • Data Administation Commands • Data Control Commands
  • 12.
    SQL HiA Typer avSQL-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.
    SQL HiA Typer avSQL-kommandoer (3) • Transaction Control Commands COMMIT ROLLBACK SAVEPOINT • Data Administration Commands AUDIT MESSAGE START AUDIT STOP AUDIT
  • 14.
    SQL HiA Typer avSQL-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.
    SQL HiA Typer avSQL-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.
    SQL HiA Typer avSQL-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.
    SQL HiA Typer avSQL-kommandoer (7) • Data Control Commands (4) REVOKE REVOKE EXECUTE ON ROWCOUNT SET DEFAULT STOGROUP UNLOAD UNLOCK DATABASED UPDATE STATISTICS
  • 18.
    SQL HiA Bruksmåte • Interaktivtvha et interface-program • Innebygget i et programmerings-språk
  • 19.
    SQL HiA 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
  • 20.
    SQL HiA Salg-tabeller -3NF SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr) VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = 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 Salg (ID = SNr + VNr) ID Fremmed- nøkkel
  • 21.
    SQL HiA Salg-tabeller -3NF SelgerSelger AdrAdr VareVare SalgSalg
  • 22.
    SQL HiA Database /Tabell / Rad / Kolonne 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Database Tabell Rad Post Record Kolonne Felt
  • 23.
    SQL HiA Partisjonering aven database Step 1: Opprett DatabaseArea Step 2: Opprett StorageGroup Step 3: Opprett Database Vol_1 Vol_2 Handel_2 Handel_1 Handel_3 StorageGroup Handel_Files StorageGroup Handel_Log Handel_2 Handel_1 Handel_3 Data Log filer Handel_2 Handel_1 Handel_3 Databasen Handel
  • 24.
    SQL HiA CREATE DBAREA CREATEDBAREA dbarea 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:CenturaHandel_1 SIZE 5 CREATE DBAREA Handel_2 AS Vol_1:CenturaHandel_2 SIZE 10 CREATE DBAREA Handel_3 AS Vol_2:CenturaHandel_3 SIZE 10 Vol_1 Vol_2 Handel_2 Handel_1 Handel_3
  • 25.
    SQL HiA CREATE STOGROUP Oppretteren storage group CREATE STOGROUP stogroup name , USING dbarea-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_1 Handel_3
  • 26.
    SQL HiA CREATE DATABASE Oppretteren database CREATE DATABASE databasename IN stogroup name LOG TO stogroup name CREATE DATABASE Handel IN Handel_Files LOG TO Handel_Log Data Log filer Handel_2 Handel1 Handel_3 Databasen Handel
  • 27.
    SQL HiA CREATE TABLE Oppretteren tabell CREATE TABLE <TableName> (<ColumnName> <DataType>[<Size>], <ColumnName> <DataType>[<Size>], ...) Tabell_1Tabell_1 Tabell_2Tabell_2 Tabell_3Tabell_3 Database
  • 28.
    SQL HiA Oppretting avSalg-tabeller - Adr CREATE TABLE Adr ( PNr Integer NOT NULL, Sted Char(20), PRIMARY Key(PNr) ) CREATE UNIQUE INDEX AdrNdx ON Adr(PNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 29.
    SQL HiA Oppretting avSalg-tabeller - Selger 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) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr) ID Fremmednøkkel
  • 30.
    SQL HiA Oppretting avSalg-tabeller - Vare CREATE TABLE Vare ( VNr Integer NOT NULL, Pris Integer, PRIMARY Key(VNr) ) CREATE UNIQUE INDEX VareNdx ON Vare(VNr) VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = VNr)
  • 31.
    SQL HiA Oppretting avSalg-tabeller - Salg 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) 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 Salg (ID = SNr + VNr)
  • 32.
    SQL HiA 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
  • 33.
    SQL HiA INSERT Innsetter enrad i en tabellInnsetter en rad i en tabell INSERT table name view name , ( column name ) VALUES ( constant ) bind variable ADJUSTING cursor name system keyword subselect
  • 34.
    SQL HiA INSERT -Eksempel INSERT INTO Adr VALUES (5002,”Bergen”) INSERT INTO Adr VALUES (6400,”Molde”) INSERT INTO Adr VALUES (9000,”Tromsø”) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 35.
    SQL HiA INSERT -Eksempel INSERT INTO Adr (PNr,Sted) VALUES(:1,:2) $DATATYPES NUMERIC,CHARACTER 5002,Bergen 6400,Molde 9000,Tromsø / PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 36.
    SQL HiA Innsetting avtabell-verdier - Adr INSERT INTO Adr VALUES (5002,”Bergen”) INSERT INTO Adr VALUES (6400,”Molde”) INSERT INTO Adr VALUES (9000,”Tromsø”) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 37.
    SQL HiA Innsetting avtabell-verdier - Adr INSERT INTO Adr (PNr,Sted) VALUES(:1,:2) $DATATYPES NUMERIC,CHARACTER 5002,Bergen 6400,Molde 9000,Tromsø / PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 38.
    SQL HiA Innsetting avtabell-verdier - Selger 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 / SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 39.
    SQL HiA SELECT SELECT SelectItem ALL, DISTINCT * FROM TableSpecification , WHERE SearchCondition GROUP BY GroupingColumn , HAVING SearchCondition ORDER BY SortSpecification ,
  • 40.
    SQL HiA Select -Enkel bruk SELECT SNr, Navn, PNr FROM Selger 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 Selger (ID = SNr) Resultatsett
  • 41.
    SQL HiA Select Kvalifisertekolonne-navn SELECT Selger.SNr, Selger.Navn, Selger.PNr FROM Selger 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 Selger (ID = SNr)
  • 42.
    SQL HiA SELECT -Bruk av * SELECT * FROM Selger 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 Selger (ID = SNr)
  • 43.
    SQL HiA SELECT -Enkelt-felter SELECT PNr, Navn FROM Selger PNr Navn 5002 Nilsen 6400 Olsen 9000 Hansen 6400 Berg SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 44.
    SQL HiA SELECT -Distinct SELECT DISTINCT SNr FROM Salg 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. 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 Salg (ID = SNr + VNr)
  • 45.
    SQL HiA WHERE SELECT SNr,Navn, PNr FROM Selger WHERE PNr = 6400 SNr Navn PNr 2 Olsen 6400 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 46.
    SQL HiA WHERE SELECT VNr,Pris FROM Vare WHERE Pris > 300 VNr Pris 8 500 3 400 VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = VNr)
  • 47.
    SQL HiA WHERE SELECT SNr,Navn, PNr FROM Selger WHERE PNr = 6400 AND Navn > ‘C’ SNr Navn PNr 2 Olsen 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 48.
    SQL HiA WHERE SELECT SNr,Navn, PNr FROM Selger WHERE PNr = 6400 OR SNr > 3 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 49.
    SQL HiA WHERE SELECT SNr,Navn, PNr FROM Selger WHERE PNr = 6400 OR NOT SNr > 3 SNr Navn PNr 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 50.
    SQL HiA SQL -3-verdi logikk A op B True False NULL WHERE-test Ok ved True GROUP BY -test Ok ved True og NULL AND True False NULL True True False NULL False False False False NULL NULLFalse NULL OR True False NULL True True True True False True False NULL NULL True NULLNULL NOT True False NULL False True NULL
  • 51.
    SQL HiA IN SELECT PNr,Sted FROM Adr WHERE Sted IN (‘Molde’,Tromsø’) PNr Sted 6400 Molde 9000 Tromsø PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 52.
    SQL HiA BETWEEN SELECT SNr,Navn, PNr FROM Selger WHERE SNr BETWEEN 1 AND 4 SNr Navn PNr 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 53.
    SQL HiA Joker-symbol %og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘N%’ SNr Navn PNr 5 Nilsen 5002 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 54.
    SQL HiA Joker-symbol %og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘%sen’ SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 55.
    SQL HiA Joker-symbol %og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni%sen’ SNr Navn PNr 5 Nilsen 5002 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 56.
    SQL HiA Joker-symbol %og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni_sen’ SNr Navn PNr 5 Nilsen 5002 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 57.
    SQL HiA Joker-symbol %og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni/_%’ SNr Navn PNrSNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 58.
    SQL HiA Joker-symbol %og _ SELECT SNr, Navn, PNr FROM Selger WHERE Navn LIKE ‘Ni//%’ SNr Navn PNrSNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 59.
    SQL HiA NULL SELECT SNr,Navn, PNr FROM Selger WHERE PNr IS NULL SNr Navn PNrSNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 60.
    SQL HiA NULL SELECT SNr,Navn, PNr FROM Selger WHERE PNr IS NOT NULL 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 Selger (ID = SNr)
  • 61.
    SQL HiA Aggregat-funksjoner -Sum SELECT SUM(Mg) FROM Salg Sum(Mg) 290 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 Salg (ID = SNr + VNr)
  • 62.
    SQL HiA Aggregat-funksjoner -Avg SELECT AVG(Mg) FROM Salg Avg(Mg) 36.25 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 Salg (ID = SNr + VNr)
  • 63.
    SQL HiA Aggregat-funksjoner -COUNT SELECT COUNT(*) FROM Salg Count(*) 8 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 Salg (ID = SNr + VNr)
  • 64.
    SQL HiA Aggregat-funksjoner CountNull-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) 8 7 6
  • 65.
    SQL HiA 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) 6 5
  • 66.
    SQL HiA Aggregat-funksjoner -Count / Distinct SELECT COUNT(DISTINCT Mg) FROM Salg Count(Distinct Mg) 6 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 Salg (ID = SNr + VNr)
  • 67.
    SQL HiA Aggregat-funksjoner -Max SELECT MAX(Mg) FROM Salg Max(Mg) 70 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 Salg (ID = SNr + VNr)
  • 68.
    SQL HiA Aggregat-funksjoner -Min SELECT MIN(Mg) FROM Salg Min(Mg) 10 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 Salg (ID = SNr + VNr)
  • 69.
    SQL HiA Aggregat-funksjoner -Max SELECT MAX(SNr+VNr) FROM Salg Max(SNr+VNr) 13 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 Salg (ID = SNr + VNr)
  • 70.
    SQL HiA Group By SELECTSNr, MAX(Mg) FROM Salg GROUP BY SNr SNr Max(Mg) 1 50 2 20 4 70 5 30 SNr VNr Mengde 1 5 50 1 8 40 2 1 20 2 3 10 4 1 70 4 3 50 4 5 20 5 8 30 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 Salg (ID = SNr + VNr)
  • 71.
    SQL HiA Group By SELECTSNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr SNr VNr Max(Mg) 1 5 50 1 8 40 2 1 20 2 3 10 4 1 70 4 3 50 4 5 20 5 8 30 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 Salg (ID = SNr + VNr)
  • 72.
    SQL HiA Group By/ Having SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr HAVING MAX(Mg) > 30 SNr VNr Max(Mg) 1 5 50 1 8 40 4 1 70 4 3 50 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 Salg (ID = SNr + VNr)
  • 73.
    SQL HiA Uttrykk SELECT VNr,Pris*1.5 FROM Vare VNr Pris*1.5 8 750 1 300 3 600 5 450 VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = VNr)
  • 74.
    SQL HiA Tekst-plassering iutlisting SELECT VNr, Pris, ‘Kr’ FROM Vare VNr Pris ‘Kr’ 8 500 Kr 1 200 Kr 3 400 Kr 5 300 Kr VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = VNr)
  • 75.
    SQL HiA Order By SELECTSNr, Navn, PNr FROM Selger ORDER BY SNr SNr Navn PNr 1 Hansen 9000 2 Olsen 6400 4 Berg 6400 5 Nilsen 5002 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 76.
    SQL HiA Order ByAsc / Desc SELECT SNr, Navn, PNr FROM Selger ORDER BY PNr ASC, SNr DESC SNr Navn PNr 5 Nilsen 5002 4 Berg 6400 2 Olsen 6400 1 Hansen 9000 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 77.
    SQL HiA Order By/ Group By SELECT SNr, VNr, MAX(Mg) FROM Salg GROUP BY SNr, VNr ORDER BY VNr SNr VNr Max(Mengde) 2 1 20 4 1 70 2 3 10 4 3 50 4 5 20 1 5 50 5 8 20 1 8 40 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 Salg (ID = SNr + VNr)
  • 78.
    SQL HiA Kolonne-nummer-sortering SELECT SNr,Navn, PNr FROM Selger ORDER BY 3 DESC SNr Navn PNr 1 Hansen 9000 2 Olsen 6400 4 Berg 6400 5 Nilsen 5002 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 79.
    SQL HiA Join SELECT Selger.Navn,Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNrID Navn PNr Sted Hansen 9000 Tromsø Olsen 6400 Molde Berg 6400 Molde Nilsen 5002 Bergen SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr)
  • 80.
    SQL HiA Join -Produkt-tabell SNr Navn PNr PNr Sted 5 Nilsen 5002 5002 Bergen 2 Olsen 6400 5002 Bergen 1 Hansen 9000 5002 Bergen 4 Berg 6400 5002 Bergen 5 Nilsen 5002 6400 Molde 2 Olsen 6400 6400 Molde 1 Hansen 9000 6400 Molde 4 Berg 6400 6400 Molde 5 Nilsen 5002 9000 Tromsø 2 Olsen 6400 9000 Tromsø 1 Hansen 9000 9000 Tromsø 4 Berg 6400 9000 Tromsø Selger Adr SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr SELECT Selger.SNr, Selger.Navn, Selger.PNr Adr.Sted FROM Selger, Adr
  • 81.
    SQL HiA Join SNr NavnPNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø 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 * . SNr Navn PNr Sted 5 Nilsen 5002 Bergen 2 Olsen 6400 Bergen 1 Hansen 9000 Bergen 4 Berg 6400 Bergen 5 Nilsen 5002 Molde 2 Olsen 6400 Molde 1 Hansen 9000 Molde 4 Berg 6400 Molde 5 Nilsen 5002 Tromsø 2 Olsen 6400 Tromsø 1 Hansen 9000 Tromsø 4 Berg 6400 Tromsø Selger Adr * * * *
  • 82.
    SQL HiA 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 8 500 30 Olsen Molde 1 200 20 Olsen Molde 3 400 10 Berg Molde 1 200 70 Berg Molde 3 400 50 Bergn Molde 5 300 20 Hansen Tromsø 5 300 50 Hansen Tromsø 8 500 40
  • 83.
    SQL HiA 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.Navn Sec.Navn First.PNr Nilsen Nilsen 5002 Olsen Olsen 6400 Berg Olsen 6400 Hansen Hansen 9000 Olsen Berg 6400 Berg Berg 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 84.
    SQL HiA 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 First.Navn Sec.Navn First.PNr Berg Olsen 6400SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 85.
    SQL HiA Join -Kobling av en tabell mot seg selv 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 Tilsatt Navn Sjef Smith Adams Cruz Smith Adams Cruz Jones Cruz List ut alle tilsatte med tilhørende sjef Nr Navn Sjef 105 Adams 112 107 Smith 105 110 Clark 112 Cruz 107 115 Jones 112 First Nr Navn Sjef 105 Adams 112 107 Smith 105 110 Clark 112 Cruz 107 115 Jones 112 Sec
  • 86.
    SQL HiA Join utenParent / Child relasjon Navn TilsattDato Adams 12.02.90 Jones 17.10.91 Smith 14.06.92 Clark 21.10.92 Cruz 04.01.93 OrdreNr Dato Belop 11305 05.07.89 1000 11296 12.02.90 2000 15320 15.04.92 1500 15900 12.02.90 7200 17541 04.07.93 3100 Tilsatt Ordre 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 11296 15900 Ordre
  • 87.
    SQL HiA Join m/NULL-verdier SNrNavn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr SELECT Navn, PNr FROM Selger List selgere med tilhørende postnummer Navn PNr Nilsen 5002 Olsen 6400 Hansen Berg 6400
  • 88.
    SQL HiA Join m/NULL-verdier SNrNavn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr List selgere med tilhørende postnummer Navn Sted Nilsen Bergen Olsen Molde Berg Molde Hansen mangler
  • 89.
    SQL HiA Join -Outer Join ANSI standard SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr *= Adr.PNr List selgere med tilhørende postnummer Navn Sted Nilsen Bergen Olsen Molde Hansen Berg Molde
  • 90.
    SQL HiA Join -Outer join SQLBase SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr SELECT Navn, Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNr (+) List selgere med tilhørende postnummer Navn Sted Nilsen Bergen Olsen Molde Hansen Berg Molde
  • 91.
    SQL HiA Join -Outer join SQLBase NULLVALUE SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 4 Berg 6400 Selger PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr SELECT Navn, @NULLVALUE(Sted,’Ukjent’) FROM Selger, Adr WHERE Selger.PNr = Adr.PNr (+) List selgere med tilhørende postnummer Navn Sted Nilsen Bergen Olsen Molde Hansen Ukjent Berg Molde
  • 92.
    SQL HiA 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 1 + 2 c1 *= c2 c1 = c2 (+) Right Step 1 + 3 c1 =* c2 c1 (+) = c2 Full Step 1 + 2 + 3 c1 *=* c2 c1 (+) = c2 (+)
  • 93.
    SQL HiA Multiple Query-nivåer SELECTSNr, VNr, Mg FROM Salg WHERE SNr = ( SELECT SNr FROM Selger WHERE Navn = ‘Hansen’) SNr VNr Mg 1 5 50 1 8 40 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 Salg (ID = SNr + VNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 94.
    SQL HiA 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 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 Salg (ID = SNr + VNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr)
  • 95.
    SQL HiA 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. 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 Salg (ID = SNr + VNr) VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = VNr) VNr Pris 8 500 1 200 3 400 5 300 Vare (ID = VNr)
  • 96.
    SQL HiA View SNr NavnPNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr) PNr Sted 5002 Bergen 6400 Molde 9000 Tromsø Adr (ID = PNr) SNr Navn PNr Sted 5 Nilsen 5002 Bergen 2 Olsen 6400 Molde 1 Hansen 9000 Tromsø 4 Berg 6400 Molde Selger Adr SelgerAdr CREATE VIEW SelgerAdr AS SELECT Selger.SNr, Selger,Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Adr.PNr = Selger.PNr
  • 97.
    SQL HiA View SELECT SNr,Navn, PNr, Sted FROM SelgerAdr SNr Navn PNr Sted 5 Nilsen 5002 Bergen 2 Olsen 6400 Molde 1 Hansen 9000 Tromsø 4 Berg 6400 Molde SNr Navn PNr Sted 5 Nilsen 5002 Bergen 2 Olsen 6400 Molde 1 Hansen 9000 Tromsø 4 Berg 6400 Molde Selger Adr SelgerAdr
  • 98.
    SQL HiA View CREATE VIEWSelgerTot 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 9000 Tromsø 50 5 300 1 Hansen 9000 Tromsø 40 8 500 2 Olsen 6400 Molde 20 1 200 2 Olsen 6400 Molde 10 3 400 4 Berg 6400 Molde 70 1 200
  • 99.
    SQL HiA UPDATE Oppdaterer entabellOppdaterer en tabell UPDATE table name view name correlation name SET column name = expression NULL WHERE search condition CHECK EXISTS CURRENT OF cursor name
  • 100.
    SQL HiA Oppdatering avdatabasen UPDATE Vare SET Pris = 450 WHERE VNr = 3 UPDATE Vare SET Pris = 450 UPDATE Vare SET Pris = Pris * 1.10 WHERE VNr = 3 UPDATE Vare SET Pris = Pris * 1.10 UPDATE Tab SET a = ... b = ... c = ...
  • 101.
    SQL HiA DELETE Sletter rad(er)i en tabellSletter rad(er) i en tabell DELETE table name view name correlation name WHERE search condition CURRENT OF cursor name
  • 102.
    SQL HiA DELETE -Eksempel DELETE FROM Salg WHERE SNr = 4 AND VNr= 3 DELETE FROM Salg Sletting av samtlige poster i tabellen Salg.
  • 103.
    SQL HiA SQL Funksjoner •Aggregat funksjoner • String funksjoner • Date / Time funksjoner • Logiske funksjoner • Spesielle funksjoner • Matematikk funksjoner • Finans funksjoner
  • 104.
    SQL HiA Aggregat-funksjoner AVG Gjennomsnitt COUNTAntall MAX Maksimum @MEDIAN Middelverdi MIN Minimum SUM Sum @SDV Standard avvik
  • 105.
    SQL HiA String funksjoner @CHARASCII 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
  • 106.
    SQL HiA 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
  • 107.
    SQL HiA Matematikk funksjoner @ABSAbsolutt-verdi @ACOS Arcus cosinus @ASIN Arcus sinus @ATAN Arcus tangens @ATAN2 To-kvadrant arcus tangens @COS Cosinus @EXP Eksponential-funksjon @FACTORIAL Fakultet @INT Heltallsdel @LN Naturlige logaritme @LOG 10’er logaritme @MOD Divisjonsrest @PI Tallet Pi (=3.14159265...) @ROUND Avrunding @SIN Sinus @SQRT Kvadratrot @TAN Tangens
  • 108.
    SQL HiA Finans funksjoner @CTERMAntall 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
  • 109.
    SQL HiA Spesielle funksjoner @CHOOSEVelger 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
  • 110.
    SQL HiA Logiske funksjoner @IFTester og returnerer 1 hvis TRUE, 2 hvis FALSE @ISNA Returnerer TRUE hvis NULL
  • 111.
    SQL HiA Funksjoner -Eksempel SELECT SNr, @PROPER(Navn) FROM SelgerAdr WHERE @UPPER(@TRIM(Navn)) = ‘HANSEN’ Usikkerhet angående skrivemåte av navn i databasen (små eller store bokstaver, mellomrom, ... )
  • 112.
    SQL HiA @CHOOSE @CHOOSE (SelNr,a, b, c, d, e, f, g) SNr <= 0 gir første liste-verdi a, SNr = 1 neste verdi b, …, SNr >=6 gir her siste verdi g SelNr Resultat 0 -1 2 12 a a c g
  • 113.
    SQL HiA @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.
    SQL HiA @FV @FV (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.
    SQL HiA SQL Etstørre eksempel (1) SELECT StlngMax.Periode, StlngMax.StRang, COUNT(*), @ROUND(AVG(Ektekskap.EVarighet),1) 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) StlngMax Ekteskap PersonID ….. Periode StRang MannID KvinneID ….. ENrMann ENrKvinne EVarighet Periode Stilling GjEVarighet Count 1500-1549 Kap 29,3 211 Sp 30,1 105 ….. 1550-1599 Kap 31,2 323 Sp 31,7 258 ….. …..
  • 116.
    SQL HiA SQL -Et større eksempel (2) SELECT StlngMax.StRang, StlngMax.Periode, COUNT(*), @ROUND(AVG(Ektekskap.EVarighet),1) 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) StlngMax Ekteskap PersonID ….. Periode StRang MannID KvinneID ….. ENrMann ENrKvinne EVarighet Stilling Periode GjEVarighet Count Kap 1500-1549 29,3 211 1550-1599 31,2 323 ….. Sp 1500-1549 30,1 105 1550-1599 31,7 258 …..
  • 117.
    SQL HiA UNLOAD Laster datafra en database ut til en fil av gitt formatLaster data fra en database ut til en fil av gitt format SQL ‘file name’ source ta COMPRESS DATA CONTROL ‘file name’ OVERWRITE ALL ASCII ‘file name’ sou DATA CONTROL ‘file name’ OVERWRITE DIF ‘file name’ sou DATA CONTROL ‘file name’ OVERWRITE DATABASE ‘file name’ COMPRESS SHEMA CONTROL ‘file name’ OVERWRITE ALL CLIENT LOG ‘logfile name’ SERVER
  • 118.
    SQL HiA UNLOAD -Eksempel UNLOAD DATA SQL c:dataAdr.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:dataAdr.txt.
  • 119.
    SQL HiA LOAD Laster datafra en fil av gitt format inn til en tabell i databasenLaster 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.
    SQL HiA LOAD -Eksempel LOAD SQL c:dataAdr.txt
  • 121.
    SQL HiA ALTER TABLE Endrerpå kolonne-strukturen i en tabellEndrer 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 NOT NULL WITH DEFAULT
  • 122.
    SQL HiA 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.
    SQL HiA ALTER TABLE(Referential Integrity) Endrer på PRIMARY KEY / FOREIGN KEY strukturen i en tabellEndrer 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.
    SQL HiA ALTER TABLE(Error Message) Endrer på USERERROR strukturen i en tabellEndrer 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.
    SQL HiA ALTER TRIGGER Enable/ Disable en triggerEnable / Disable en trigger ALTER TRIGGER trigger name ENABLE DISABLE
  • 126.
    SQL HiA COMMIT Commits alleendringene 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.
    SQL HiA ROLLBACK Omgjør sistetransaksjonOmgjør siste transaksjon ROLLBACK savepoint identifier TRANSACTION <id> FORCE
  • 128.
    SQL HiA SAVEPOINT Genererer SAVEPOINTtil bruk ved ROLLBACKGenererer SAVEPOINT til bruk ved ROLLBACK SAVEPOINT savepoint identifier
  • 129.
    SQL HiA CREATE INDEX Oppretteren indeksOppretter en indeks EATE INDEX index name UNIQUE CLUSTERED HASHED , table name ( column name ) ASC DESC CTFREE integer constant SIZE integer value ROWS BUCKET Max size = 6 + number of + sum of <= 255 columns in length of all index columns in index
  • 130.
    SQL HiA CREATE INDEX- Eksempel CREATE UNIQUE INDEX Bidndx ON Bedrift (BedriftsID) CREATE INDEX BnNdx ON Bedrift (BedriftsNavn)
  • 131.
    SQL HiA CREATE SYNONYM Opprettersynonym (alias) navn til en tabellOppretter synonym (alias) navn til en tabell CREATE SYNONYM synonym name PUBLIC FOR table name authorization ID view name
  • 132.
    SQL HiA ROWCOUNT Returnerer antallrader i en tabellReturnerer antall rader i en tabell ROWCOUNT tablename
  • 133.
    SQL HiA UNION Genererer resultatsettsom union av multiple SELECTGenererer resultatsett som union av multiple SELECT UNION ALL select command , ORDER BY integer constant ASC DESC SELECT … UNION ALL SELECT … UNION ALL SELECT … ... Duplikater blir ikke eliminert
  • 134.
    SQL HiA UPDATE STATISTICS Oppdatererstatistikk-informasjon i databasen. Benyttes til å generere applikasjonsplan. 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 , SET system catalog column name = expression DATABASE
  • 135.
    SQL HiA 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.
    SQL HiA Brukere /Privilegier • Brukere med DBA-privilegier • Brukere med RESOURCE-privilegier • Brukere med CONNECT-privilegier Det finnes tre hoved-typer brukere:
  • 137.
  • 138.
    SQL HiA CONNECT • Adgangtil databasen. • Adgang til å manipulere spesifikke tabeller i følge tilordnede privilegier.
  • 139.
    SQL HiA RESOURCE • Adgangtil å 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.
    SQL HiA DBA • Allerettigheter 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.
    SQL HiA Tilordning avautoritet / 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.
    SQL HiA Database Authority , GRANTRESOURCE TO AuthID DBA , , CONNECT TO AuthID IDENTIFIED BY Password
  • 143.
    SQL HiA Table Privileges , GRANTALL SELECT INSERT DELETE INDEX ALTER UPDATE , ( ColumnName ) , , ON TableName TO AuthID ViewName PUBLIC
  • 144.
    SQL HiA 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.
    SQL HiA SQL innebyggetsom 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.
    SQL HiA 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
  • 147.
    SQL HiA Høgnivå-språk -SQL Høgnivåspråk Data-flyt Variabler Blokk-struktur Test Sløyfer Input / Output SQL Database-aksess
  • 148.
    SQL HiA 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.
    SQL HiA SQL-prosessering SELECT A,B,C FROMX,Y WHERE A < 5000 AND C = ‘ABC’ Parse statement Validate statement Optimize statement Generate Application Plan Execute statement Binary form of SQL statement Database system catalog
  • 150.
    SQL HiA SQL knyttetopp 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)
  • 151.
    SQL HiA Resultat-sett medmer enn en record ApplikasjonApplikasjon DatabaseDatabase Resultat-sett Record_1 Record_2 Record_3 ... SQL-statement Cursor Fetch
  • 152.
    SQL HiA 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: %sn”, cityname); ... }
  • 153.
    SQL HiA 5 faserved 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.
    SQL HiA 5 faserved generering av embedded SQL-program Embedded SQL source programEmbedded SQL source program Stripped source programStripped source program Database request moduleDatabase request module Precompiler Compiler BIND Object codeObject code DBMS libraryDBMS library Application planApplication plan Linker Executable programExecutable program Application plan Database Application plan Database
  • 155.
    SQL HiA 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.
    SQL HiA SQL API Application progam Application progamDBMSDBMS 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.
    SQL HiA 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.
    SQL HiA SAL funksjonaliteti 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.
    SQL HiA SAL funksjonaliteti 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.
    SQL HiA Relaterte SQLTalkkommandoer 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.
    SQL HiA Connect /Disconnect SqlDatabase DEMO SqlUser SYSADM SqlPassword SYSADM SqlConnect SqlDisconnect Predefinerte variable Default-verdier Centura-funksjoner
  • 162.

Editor's Notes

  • #2 SQL er standard databasespråk for relasjons-databaser.
  • #3 Oversikt over hva SQL-forkortelsen betyr og hvilke tjenester vi kan få utført ved hjelp av dette databasespråket.
  • #4 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.
  • #5 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.
  • #6 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.
  • #7 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.
  • #9 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 1-31. 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)
  • #10 En del viktige begrep: - Database - Tabell - Rad / Post / Record - Kolonne / Felt
  • #12 De ulike SQL-kommandoene er det vanlig å gruppere etter ulike bruks-områder.
  • #19 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.
  • #20 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.
  • #21 Fire 3NF tabeller fra databasen Handel.
  • #22 1:n relasjonene mellom de fire Handel-tabellene Selger - Adr - Vare - Salg.
  • #23 En del viktige begrep: - Database - Tabell - Rad / Post / Record - Kolonne / Felt
  • #28 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.
  • #29 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.
  • #30 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.
  • #31 Oppretting av tabellen Vare. Kolonnen VNr danner ID.
  • #32 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.
  • #33 Ulike datatyper i SQLBase.
  • #37 Innsetting av data i tabellen Vare. SQL-kommandoen INSERT benyttes.
  • #38 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.
  • #39 Innsetting av data i tabellen Selger (bruk av spesiell INSERT i SQLBase).
  • #41 Enkel bruk av SELECT. Farge-bruk:- RødSQL-statement - BlåDatabase-tabell - GulResultat-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.
  • #42 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.
  • #43 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.
  • #44 Utlisting av kolonnene PNr og Navn (i denne rekkefølge) fra tabellen Selger.
  • #45 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.
  • #46 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.
  • #47 Utlisting av poster fra tabellen Vare hvor vare-prisen er større enn 300.
  • #48 Utlisting av SNr, Navn og PNr fra tabellen Selger når både betingelsen PNr = 6400 og betingelsen Navn &amp;gt; ‘C’ er oppfylt.
  • #49 Utlisting av SNr, Navn og PNr fra tabellen Selger når minst en av betingelsene PNr = 6400 eller SNr &amp;gt; 3 er oppfylt.
  • #50 Utlisting av SNr, Navn og PNr fra tabellen Selger når minst en av betingelsene PNr = 6400 eller NOT SNr &amp;gt; 3 er oppfylt. NOT SNr &amp;gt; 3 er det samme som SNr &amp;lt;= 3.
  • #51 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.
  • #52 List ut PNr og Sted fra tabellen Adr hvor Sted er med i mengden bestående av Molde og Tromsø.
  • #53 List ut SNr, Navn og PNr fra tabellen Selger hvor SNr ligger mellom 1 og 4 (1 og 4 inkludert).
  • #54 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.
  • #55 Utskrift av alle navn (i tillegg til SNr og PNr) som slutter på ‘sen’.
  • #56 Utskrift av alle navn som begynner på ‘N’ og slutter på ‘sen’.
  • #57 Utskrift av alle navn som begynner på ‘Ni’ og som slutter på ‘sen’ og som har nøyaktig ett tegn mellom ‘Ni’ og ‘sen’.
  • #58 Hvis underscore ( _ ) som markerer ett enkelt tegn selv skal være med i navnet, må _ prefikses med slash ( / ).
  • #59 Hvis slash ( / ) selv skal være med i navnet, må slash selv prefikses med en slash.
  • #60 List ut alle rader fra tabellen Selger hvor feltet PNr er tomt (NULL).
  • #61 List ut aller rader fra tabellen Selger hvor feltet PNr inneholder data (er NOT NULL).
  • #62 List ut summen av alle verdiene i kolonnen Mg i tabellen Salg.
  • #63 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.
  • #64 List ut totalt antall rader i tabellen Salg.
  • #65 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.
  • #66 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.
  • #67 Lister ut totalt antall ulike varemengder fra kolonnen Mg i tabellen Salg.
  • #68 Lister ut største verdien i kolonnen Mg i tabellen Salg.
  • #69 Lister ut minste verdi i kolonnen Mg i tabellen Salg.
  • #70 Lister ut største sum av verdiene SNr og VNr i en rad i tabellen Salg.
  • #71 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.
  • #72 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.
  • #73 HAVING setter betingelser på hver enkelt gruppe i motsetning til WHERE som setter betingelser på hver enkelt rad.
  • #74 List ut VNr og Pris*1.5, dvs prisen i output er justert opp med 50% i forhold til prisen i tabell-kolonnen.
  • #75 Teksten Kr påføres bakerst på hver rad i tillegg til VNr og Pris.
  • #76 Sortering i stigende rekkefølge på kolonnen SNr.
  • #77 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.
  • #78 Gruppene SNr / VNr sortert i stigende rekkefølge på VNr.
  • #79 Sortering i synkende rekkefølge på kolonne nr 3, dvs kolonnen PNr i tabellen Selger.
  • #80 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.
  • #81 Ovenfor ser vi output (12 rader) ved Join mellom Selger og Adr når vi utelater tabell-koblingen i WHERE-statementet.
  • #82 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 *.
  • #83 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.
  • #84 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.
  • #85 Her er antall rader i output ved kobling av tabellen Selger mot seg selv redusert ved at en tilleggsbetingelse er lagt på.
  • #86 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 .
  • #87 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.
  • #88 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.
  • #89 Ved NULL-kolonner og tabell-kobling vha WHERE vil radene med NULL-verdier i koblings-kolonnene utebli fra resultatsettet.
  • #90 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.
  • #91 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.
  • #92 Hvis vi i output ønsker en bestemt tekst (her Ukjent) i NULL-verdi kolonnen ved Outer Join, kan funksjonen @NULLVALUE benyttes.
  • #93 Ovenfor vises reglene ved Outer Join med NULL-verdi kolonner både i den førstnevne og den sistnevnte kolonnen.
  • #94 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 ...
  • #95 Ovenfor er to likeverdige SQL-statement. Første statement benytter muliple query-nivåer, mens andre statement benytter join.
  • #96 Exists.
  • #97 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.
  • #98 SELECT-statement benyttet på view’et SelgerAdr.
  • #99 Et view bestående av sammensetning av tabellene Selger, Adr, Vare og Salg.
  • #100 UPDATE benyttes til oppdatering av tabeller.
  • #101 UPDATE benyttes til oppdatering av tabeller.
  • #104 SQL inneholder mange funksjoner, delt inn i grupper som vist ovenfor.
  • #105 Aggregat-funksjoner.
  • #106 String-funksjoner.
  • #107 Date / Time funksjoner.
  • #108 Matematikk-funksjoner.
  • #109 Finans-funksjoner.
  • #110 Spesielle funksjoner.
  • #111 Logiske funksjoner.
  • #112 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, …).
  • #116 SQL - Et større eksempel.
  • #117 .SQL - Et større eksempel.
  • #136 Til en database kan det opprettes ulike brukere hver med ulike rettigheter i databasen.
  • #137 Bruker-nivåer rangert ovenfra og nedover: - SYSADM - DBA - RESOURCE - CONNECT
  • #138 Bruker-nivåer rangert ovenfra og nedover: - SYSADM - DBA - RESOURCE - CONNECT
  • #139 CONNECT
  • #140 RESOURCE
  • #141 DBA
  • #142 SQL-kommandoen GRANT kan benyttes til å tilordne autoritet / privilegier til ulike brukere.
  • #143 GRANT-kommandoen - Syntaks Autoritet
  • #144 GRANT-kommandoen - Syntaks Privilegier
  • #145 SQL kontra høgnivåspråk
  • #146 SQL kan innebygges som en del av et prosedyre-språk. To ulike metoder benyttes: - Embedded SQL - Application Program Interface (API)
  • #147 Embedded SQL / API for ulike databaser og prosedyre-språk.
  • #148 Høgnivåspråk og SQL
  • #149 Prosessering av et SQL-statement.
  • #150 Prosessering av et SQL-statement
  • #151 SQL knyttet opp mot høgnivåspråk-variabler. Høgnivåspråk-variablene er prefikset med kolon ( : ).
  • #152 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.
  • #153 Embedded SQL eksempel
  • #154 5 faser ved generering av embedded SQL-program
  • #155 5 faser ved generering av embedded SQL-program
  • #156 SQL API
  • #157 SQL API
  • #158 SQL APIProgram-eksempel