sql
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 PresentationTRANSCRIPT
SQL
The questing beastSir 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
En standardANSIISO
SQL kompetanse er etterspurtUtviklet av IBMObjektorienterte utvidelser (extensions)
SQL
Et komplett databasespråkDatadefinisjon
Definisjon av tabeller og view
DatamanipulasjonSpesifikasjon av spørringerVedlikehold av databasen• INSERT• UPDATE• DELETE
SQL
Ikke et komplett programmeringsspråkBrukes sammen med fullstendige programmeringsspråk
For eksempel, COBOL, vb.net, C++ og JavaEmbedded SQL
Datadefinisjon
Tabeller, viewer og indekser kan defineres mens systemet er i driftBasistabell
En frittstående, navngitt tabellCREATE TABLE
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);
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));
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);
Datatyper
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
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
Beskrankninger (Constraints)
ALTER TABLE dept ADD CONSTRAINT
fk_dept_emp FOREIGN KEY(empno) REFERENCES emp;
ALTER TABLE dept DROP CONSTRAINT fk_dept_emp;
Et view
CREATE VIEW
DROP VIEW
An index
CREATE INDEX
DROP INDEXCREATE [UNIQUE] INDEX indexname
ON base-table(column[order] [,column [order]]...)
[CLUSTER];
Datamanipuleringssetninger
INSERT
UPDATE
DELETE
SELECT
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');
UPDATE
En radMange raderAlle rader
UPDATE table SET column=expression [,column=expression] [WHERE condition]
DELETE
En radMange raderAlle rader
Ikke det samme som DROP TABLE
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;
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
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;
Variasjoner av JoinSELECT * FROM stock INNER JOIN nation USING (natcode);
SELECT * FROM stock NATURAL JOIN nation;
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
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
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
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 [=, <>, >, ≥, <, ≤]
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);
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
Aggregatfunksjoner
COUNT
SUM
AVG
MAX
MIN
SQL Routines
FunctionsProceduresIntrodusert med SQL-99
Ikke alle leverandører følger standarden
Forbedre fleksibilitet, produktivitet og håndheving av forretningsregler.
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;
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
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;
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);
Trigger
A set of actions set off by an SQL statement that changes the state of the databaseUPDATE
INSERT
DELETE
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));
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);
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?
Sikkerhet
Data er verdifulle ressurserHvorfor
Tilgang bør kontrolleresSQL sikkerhetsprosedyrerCREATE VIEW
Autoriseringskommandoer
Autorisering
Basert på privilegie-konseptetDu kan ikke gjennomføre en operasjon i databasehåndteringssystemet uten de nødvendige privilegier. DBA (databaseadministrator) har ALLE privilegier
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.
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
Å 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;
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
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;
Beskyttelse koster
Å vedlikeholde privilegier tar tid og innsatsBegrensninger gjør arbeid mer tungvint
Må spørre noen som har tilgang
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
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';
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
Open Database Connectivity (ODBC)
Application
ODBC API
ODBC driver manager
Service provide API
Driver for DBMS server
DBMS server
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
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
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
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.
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
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.