sql

57
SQL The questing beast Sir Thomas Mallory

Upload: matthew-russo

Post on 01-Jan-2016

31 views

Category:

Documents


2 download

DESCRIPTION

SQL. The questing beast Sir Thomas Mallory. Codds krav. 5.Krav om omfattende språk for datahåndtering Det må finnes et relasjonelt språk som støtter datadefinisjon, datamanipulering, sikkerhet integritetsbeskrankninger (constraints) transaksjonshåndteringsoperasjoner. SQL. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SQL

SQL

The questing beastSir Thomas Mallory

Page 2: SQL

Codds krav

5. Krav om omfattende språk for datahåndtering

Det må finnes et relasjonelt språk som støtter

datadefinisjon, datamanipulering, sikkerhet integritetsbeskrankninger (constraints)transaksjonshåndteringsoperasjoner.

Page 3: SQL

SQL

En standardANSIISO

SQL kompetanse er etterspurtUtviklet av IBMObjektorienterte utvidelser (extensions)

Page 4: SQL

SQL

Et komplett databasespråkDatadefinisjon

Definisjon av tabeller og view

DatamanipulasjonSpesifikasjon av spørringerVedlikehold av databasen• INSERT• UPDATE• DELETE

Page 5: SQL

SQL

Ikke et komplett programmeringsspråkBrukes sammen med fullstendige programmeringsspråk

For eksempel, COBOL, vb.net, C++ og JavaEmbedded SQL

Page 6: SQL

Datadefinisjon

Tabeller, viewer og indekser kan defineres mens systemet er i driftBasistabell

En frittstående, navngitt tabellCREATE TABLE

Page 7: SQL

Beskrankninger (Constraints)

Primary key CONSTRAINT pk_stock PRIMARY KEY(stkcode);

Foreign key CONSTRAINT fk_stock_nation

FOREIGN KEY(natcode) REFERENCES nation;

Unique CONSTRAINT unq_stock_stkname UNIQUE(stkname);

Page 8: SQL

Check constraintTabell og kolonne

TabellCREATE TABLE item (

itemcode INTEGER,

CONSTRAINT chk_item_itemcode CHECK(itemcode <500));

KolonneCREATE TABLE item (

itemcode INTEGER

CONSTRAINT chk_item_itemcode CHECK(itemcode <500),

itemcolor VARCHAR(10));

Page 9: SQL

Check constraintDomene

CREATE DOMAIN valid_color AS CHAR(10)

CONSTRAINT chk_qitem_color CHECK(

VALUE IN ('Bamboo',’Black',’Brown',Green', 'Khaki',’White'));

CREATE TABLE item (

itemcode INTEGER,

itemcolor VALID_COLOR);

Page 10: SQL

Datatyper

Page 11: SQL

Datatyper

BOOLEANINTEGER

31 binary digitsSMALLINT

15 binary digitsFLOAT

Naturvitenskapelig- og ingeniørarbeidDECIMAL

Kommersielle anvendelserCHAR and VARCHAR

Character stringsDATE, TIME, TIMESTAMP, and INTERVALBLOB and CLOB

I Oracle: NUMBER for INTEGER, SMALLINT, FLOAT og DECIMAL

Page 12: SQL

Endre en tabell

DROP TABLESletter en tabell

ALTER TABLELegge til én ny kolonne av gangenLegge til eller slette en constraintKan ikke brukes for å• Endre en kolonnes lagringsformat• Slette en uønsket kolonne

Page 13: SQL

Beskrankninger (Constraints)

ALTER TABLE dept ADD CONSTRAINT

fk_dept_emp FOREIGN KEY(empno) REFERENCES emp;

ALTER TABLE dept DROP CONSTRAINT fk_dept_emp;

Page 14: SQL

Et view

CREATE VIEW

DROP VIEW

Page 15: SQL

An index

CREATE INDEX

DROP INDEXCREATE [UNIQUE] INDEX indexname

ON base-table(column[order] [,column [order]]...)

[CLUSTER];

Page 16: SQL

Datamanipuleringssetninger

INSERT

UPDATE

DELETE

SELECT

Page 17: SQL

INSERT

En radMange raderMed subquery – som kopieringINSERT INTO STOCK

(stkcode, stkfirm, stkprice, stkdiv, stkpe)SELECT code, firm, price, div, peFROM download WHERE code IN

('FC','PT','AR','SLG','ILZ','BE','BS','NG','CS','ROF');

Page 18: SQL

UPDATE

En radMange raderAlle rader

UPDATE table SET column=expression [,column=expression] [WHERE condition]

Page 19: SQL

DELETE

En radMange raderAlle rader

Ikke det samme som DROP TABLE

Page 20: SQL

Produkt

Alle rader fra den første tabellen kombinert med alle mulige rader av den andre tabellen.Å lage produktet mellom aksje og nasjon:SELECT * FROM stock, nation;

Page 21: SQL

ProduktFinn prosentandelen av Australske aksjer i

porteføljent

CREATE VIEW austotal (auscount) AS SELECT COUNT(*) FROM stock WHERE natcode = 'AUS';

CREATE VIEW TOTAL (totalcount) AS SELECT COUNT(*) FROM stock;

SELECT DECIMAL((FLOAT(auscount)/FLOAT(totalcount)*100),5,2) AS percentage FROM austotal, total;

18.75

Page 22: SQL

Join

Join lager en ny tabell fra to eksisterende tabeller ved å matche på en kolonne som er felles for begge tabelleneEquijoin

Den nye tabellen inneholder to identiske kolonnerSELECT * FROM stock, nation

WHERE stock.natcode = nation.natcode;

Page 23: SQL

Variasjoner av JoinSELECT * FROM stock INNER JOIN nation USING (natcode);

SELECT * FROM stock NATURAL JOIN nation;

Page 24: SQL

Outer join

Left outer joinEn indre join pluss radene fra t1 som ikke er inkludert i den indre joinen.SELECT * FROM t1 LEFT JOIN t2 USING (id);

t1 t2

id col1 id col2

1 a 1 x

2 b 3 y

3 c 5 z

t1.id col1 t2.id col2

1 a 1 x

2 b null null

3 c 3 y

Page 25: SQL

Right outer join

En indre join pluss de radene fra t2 som ikke er inkludert i den indre joinen.SELECT * FROM t1 RIGHT JOIN t2 USING

(id);

t1.id col1 t2.id col2

1 a 1 x

3 c 3 y

null null 5 z

t1 t2

id col1 id col2

1 a 1 x

2 b 3 y

3 c 5 z

Page 26: SQL

Outer join

Full outer joinEn indre join pluss alle radene i t1 og t2 som ikke deltar i joinen.SELECT * FROM t1 FULL JOIN t2 USING (id);

t1 t2

id col1 id col2

1 a 1 x

2 b 3 y

3 c 5 z

t1.id col1 t2.id col2

1 a 1 x

2 b null null

3 c 3 y

null null 5 z

Page 27: SQL

Theta join

En join er et produkt med et vilkårVilkåret er ikke avgrenset til likhet..En theta join er den generelle versjonenTheta er en variabel som kan ta en hvilket som helst verdi fra mengden [=, <>, >, ≥, <, ≤]

Page 28: SQL

Korrelert underspørring

Den indre spørringen er evaluert mange ganger heller enn en.

Finn alle aksjer hvor antallet er større enn gjennomsnittet for det aktuelle landet.

SELECT natname, stkfirm, stkqty FROM stock, nation

WHERE stock.natcode = nation.natcode

AND stkqty >

(SELECT AVG(stkqty) FROM stock

WHERE stock.natcode = nation.natcode);

Page 29: SQL

Korrelert underspørring

ClueBehovet for å sammenlikne hver rad av tabellen med en funksjon (for eksempel avg eller count) for noen rader av en kolonne.

Må brukes sammen med EXISTS eller NOT EXISTS

Page 30: SQL

Aggregatfunksjoner

COUNT

SUM

AVG

MAX

MIN

Page 31: SQL

SQL Routines

FunctionsProceduresIntrodusert med SQL-99

Ikke alle leverandører følger standarden

Forbedre fleksibilitet, produktivitet og håndheving av forretningsregler.

Page 32: SQL

SQL function

Samme hensikt som innebygde funksjoner

CREATE FUNCTION km_to_miles()

RETURNS FLOAT

CONTAINS SQL

RETURN 0.6213712;

Bruk i SQL SELECT distance*km_to_miles FROM travel;

Page 33: SQL

SQL prosedyre

En lagret prosedyre (stored procedure) er SQL kode som dynamisk lastes og utføres ved et CALL statementRegnskapseksempel

ACCOUNT

*acctnoacctbalance

ENTRY

entrytype

TRANSACTION

*transidtransamttransdate

Page 34: SQL

SQL procedureCREATE PROCEDURE overfør (IN betkonto INTEGER, IN motkonto INTEGER, IN beløp DECIMAL(9,2),IN transnr INTEGER)LANGUAGE SQLBEGININSERT INTO transaksjon VALUES (transno, amt, current date);UPDATE kontoSET kontobalanse = kontobalanse + beløpWHERE kontonr = motkonto;INSERT INTO bevegelse VALUES(transnr, motkonto, ’inn');UPDATE kontoSET kontobalanse=kontobalanse-beløpWHERE kontonr = betkonto;INSERT INTO bevegelse VALUES (transno, betkonto, ’ut');END;

Page 35: SQL

SQL procedure

Utføre (Execute)CALL transfer(cracct, dbacct, amt, transno);

EksempelTransaksjon 1005 overfører $100 fra konto 1 (betalerens konto) til konto 2 (mottakerens konto)

CALL transfer(1,2,100,1005);

Page 36: SQL

Trigger

A set of actions set off by an SQL statement that changes the state of the databaseUPDATE

INSERT

DELETE

Page 37: SQL

TriggerAutomatically log all updates to a log file

Create a table for storing log rowsCreate a trigger

CREATE TABLE stock_log ( stkcode CHAR(3), old_stkprice DECIMAL(6,2), new_stkprice DECIMAL(6,2), old_stkqty DECIMAL(8), new_stkqty DECIMAL(8), update_stktime TIMESTAMP NOT NULL, user_name VARCHAR2(30) PRIMARY KEY(update_stktime));

Page 38: SQL

TriggerCREATE TRIGGER stock_update

AFTER UPDATE ON stock

REFERENCING old AS old_row new AS new_row

FOR EACH ROW MODE db2sq1

INSERT INTO stock_log VALUES

(old_row.stkcode, old_row.stkprice, new_row.stkprice, old_row.stkqty, new_row.stkqty, CURRENT TIMESTAMP,

USER);

Page 39: SQL

Nulls

Ikke bland sammen med blank eller OMange betydninger

Ukjente data (bevisstløs pasient)

Data som ikke passer i denne raden (gravid for mann)

Data ikke oppgitt Verdien er ikke definert (skadesum før takst er holdt)

Nuller skaper forvirring fordi man ikke vet hva de innebærerDate foreslår at NOT NULL brukes på alle kolonner for å unngå forvirring.

Er dette et godt råd?

Page 40: SQL

Sikkerhet

Data er verdifulle ressurserHvorfor

Tilgang bør kontrolleresSQL sikkerhetsprosedyrerCREATE VIEW

Autoriseringskommandoer

Page 41: SQL

Autorisering

Basert på privilegie-konseptetDu kan ikke gjennomføre en operasjon i databasehåndteringssystemet uten de nødvendige privilegier. DBA (databaseadministrator) har ALLE privilegier

Page 42: SQL

GRANT

Definerer en brukers privilegierFormatGRANT privilegier ON objekt TO brukere [WITH GRANT OPTION];

Et objekt er en basetabell eller et viewPrivilegiet kan være ALL PRIVILEGES eller valgt fra

SELECTUPDATEDELETEINSERT

Privilegier kan gis til alle ved hjelp av nøkkelordet PUBLIC eller til utvalgte brukere ved å oppgi deres brukeridentifikator.

Page 43: SQL

GRANT

UPDATE privilegiet kan spesifisere hvilke kolonner som kan oppdateres i en basistabell eller et viewNoe privilegier gjelder bare for basistabeller

ALTER

INDEX

WITH GRANT OPTIONTillater en bruker å gi privilegier videre til en annen bruker

Page 44: SQL

Å bruke GRANT

Gi Alice alle rettigheter til AKSJE-tabellenGRANT ALL PRIVILEGES ON AKSJE TO alice;

Tillate regnskapspersonalet, Todd og Nancy, to å oppdatere en aksjeprisGRANT UPDATE (stkprice) ON stock TO todd, nancy;

Gi hele staben privilegiet til å hente rader fra VARE.GRANT SELECT ON VARE TO PUBLIC;

Gi Alice alle rettigheter til viewet STK.GRANT SELECT, UPDATE, DELETE, INSERT ON stk

TO alice;

Page 45: SQL

REVOKE

Trekker tilbake rettigheterFormatREVOKE privilegier ON objekt FROM brukere;

Cascading REVOKETilbakestiller bruk av WITH GRANT OPTIONNår en brukers rettigheter trekkes tilbake, taper alle brukere som har fått rettigheter via WITH GRANT OPTION sine rettigheter

Page 46: SQL

Bruke REVOKE

Trekke tilbake Sofies mulighet til å se en VARE.REVOKE SELECT ON VARE FROM sophie;Nancy har ikke lenger rett til å oppdatere aksjepriser.REVOKE UPDATE ON stock FROM nancy;

Page 47: SQL

Beskyttelse koster

Å vedlikeholde privilegier tar tid og innsatsBegrensninger gjør arbeid mer tungvint

Må spørre noen som har tilgang

Page 48: SQL

Katalogen

En relasjonsdatabase som inneholder definisjonene av tabeller, viewer osv.Kan utspørres ved hjelp av SQLKalles systemtabeller heller enn basistabellerHovedtabeller er

syscatalogsyscolumnsSysindexes

For Oracle-spesifikk informasjon, sehttp://www.sqlzoo.net/howto/x12metaoracle.htm

Page 49: SQL

Utspørring av katalogen

Finne tabellen med flest kolonner.SELECT tname FROM system.syscatalog

WHERE ncols = (SELECT MAX(ncols)

FROM system.syscatalog);

Hvilke kolonner i hvilke tabeller lagrer dato?SELECT tname, cname FROM system.syscolumns

WHERE coltype = 'date';

Page 50: SQL

Spørringer fra naturlig språk

English SQL generated for MS AccessWhich movies havewon best foreignfilm sorted byyear?

SELECT DISTINCT [Year], [Title]FROM [Awards] INNER JOIN [Movies]ON [Movies].[Movie ID] =[Awards].[Movie ID] WHERE[Categorie] = 'Best Foreign Film'and [Status]='Winner' ORDER BY[Year] ASC

Page 51: SQL

Open Database Connectivity (ODBC)

Application

ODBC API

ODBC driver manager

Service provide API

Driver for DBMS server

DBMS server

Page 52: SQL

Embedded SQL

SQL er ikke et frittstående programmeringsspråkSQL setninger kan bygges inn i applikasjonsprogrammer som deretter prekompileres (noe som oversetter den innebygde SQLen til prosedyrekall mot et databasebibliotek)Gammel teknologi, aktuell for noen systemer som fortsatt kjører, spesielt COBOLInkompatibiliteten mellom tabellprosesseringen til SQL og en post av gangen prosesseringen til COBOL håndteres ved hjelp av en cursor

Page 53: SQL

MS Access vs SQLStyrker

GrensesnittSQL DMLReferanseintegritetRask eksekveringViewer (spørringer)Oppdaterbare viewer

SvakheterIkke støtte for GRANT og REVOKEDomenerIkke støtte for COMMIT og ROLLBACKBegrenset kontroll over samtidige transaksjoner

Page 54: SQL

SQLs framtid

En av de mest suksessrike standardiseringeneSvært portabelObjekter har ført til vansker med standardiseringen ettersom leverandørene av databasemotorer har lagt til utvidelser før standarden ble satt

Page 55: SQL

SQL-99Bedre støtte for Java og andre objektorienterte språkStøtte for multimedia utvidelserOpprettholder portabiliteten ved å fastlegge standarder for objektorienterte utvidelser av relasjonsmodellenUtvidelsene øker funksjonalitet på bekostning av enkelhet.

Page 56: SQL

Brukerdefinerte datatyperKan brukes på samme måte som innebygde datatyperEn brukerdefinert datatype er definert ved å

Spesifisere deklarasjoner av de lagrede attributtene som represneterer verdien av UDTenSpesifisere operasjoner som definerer likhet og rekkefølgesammenhenger i UDTenSpesifisere operasjoner og deriverte attributter som representerer oppførselen til UDTen

Page 57: SQL

SQLJ og JDBCSQLJ er embedded SQL for javaSQLJ er en ANSI standardSQLJ-integrasjonen mellom SQL og Java styrker Java som alternativ for dataintensive virksomhetsapplikasjonerSQLJ har enkel syntaks for statiske SQL-programmeringsoppgaver.SQLJ tillater sjekk av syntaks og semantikk på SQL-setningene før kjøring.SQLJ krever oversettelse før java-kompileringBruk JDBC for å løse dynamiske oppgaver.