160 likes | 261 Views
Forelæsninger 22/9 og 29/9. Introduktion til SQL. Datalogi 2VE E00 DIKU. 22/9 SQL92 - DDL Relationel Algebra SQL92 - DML. 29/9 SQL99 OQL. Plan for SQL forelæsninger. SQL92 Data Definition Language. CREATE TABLE ALTER TABLE DROP TABLE CREATE VIEW DROP VIEW CREATE INDEX
E N D
Forelæsninger22/9 og 29/9 Introduktion tilSQL Datalogi 2VE E00 DIKU 2VE/E00/RB
22/9 SQL92 - DDL Relationel Algebra SQL92 - DML 29/9 SQL99 OQL Plan for SQL forelæsninger 2VE/E00/RB
SQL92Data Definition Language • CREATE TABLE • ALTER TABLE • DROP TABLE • CREATE VIEW • DROP VIEW • CREATE INDEX • DROP INDEX 2VE/E00/RB
Tabel behandling CREATE TABLE person (cpr CHAR(10) NOT NULL, navn VARCHAR(50) NOT NULL, vej VARCHAR(80), husnr SMALLINT, by VARCHAR(30), PRIMARY KEY (cpr) ) ALTER TABLE person ADD COLUMN tlf CHAR(8) DROP TABLE person 2VE/E00/RB
Data Manipulation LanguageOpdatering af data INSERT INTO person (cpr, navn, adr, husnr, by) VALUES (”0101501234”,”Anders And”, ”Paradisæblevej”,14, ”Andeby”) UPDATE person SET husnr=13 WHERE cpr=”0101501234” DELETE FROM person WHERE navn like ”Kla%” AND by=”Andeby” 2VE/E00/RB
Udvælgelse af dataRelational Operatorsdefined by Codd (70,72) • Union • Intersection • Difference • Cartesian product • Restrict • Project • Join • Divide 2VE/E00/RB
SQL92Data Manipulation LanguageForespørgsler Forespørgsel (find cpr og navn på alle i Andeby, sorteret efter navn): SELECT DISTINCT navn, by FROM person WHERE by=”Andeby” ORDER BY navn Resultat: navn by ------------------- ---------- Anders And Andeby Fætter Højben Andeby Joakim Von And Andeby 2VE/E00/RB
Kolonnefunktioner Forespørgsel (list antallet af indbyggere i Andeby): SELECT COUNT(*) FROM person WHERE by=”Andeby” Resultat: COUNT(*) -------- 42 Øvrige funktioner: SELECT SUM(kolonnenavn)… SELECT AVG(kolonnenavn)… SELECT MIN(kolonnenavn)… SELECT MAX(kolonnenavn)… 2VE/E00/RB
Join CREATE TABLE superhelt (navn CHAR(80) NOT NULL, hem_id CHAR(10) NOT NULL, hjemby CHAR(30), PRIMARY KEY (navn,hem_id), FOREIGN KEY (hem_id) REFERENCES person(cpr) ) Forespørgsel (list alle superhelte og deres hemmelige identiteter): SELECT S.navn, P.navn FROM superhelt S, person P WHERE hem_id=cpr Resultat: S.navn P.navn -------------- -------------- Stålanden Anders And 2VE/E00/RB
Gruppering Forespørgsel (list antal superhelte grupperet efter hjemby): SELECT hjemby, count(*) FROM superhelte GROUP BY hjemby Resultat: hjemby count(*) ------------------- -------- Andeby 1 Metropolis 28 2VE/E00/RB
Nested forespørgsler og Al-kvantorer Forespørgsel (list superhelte som har samtlige evner): SELECT navn FROM superhelt H WHERE NOT EXISTS ( SELECT * FROM superevne E WHERE NOT EXIST ( SELECT * FROM helteevne HE WHERE H.navn = HE.heltenavn AND H.hem_id = HE.hem_id AND E.navn = HE.evnenavn ) ) 2VE/E00/RB
NULL • NULL betyder ”værdi ukendt” • X = NULL; X <> NULL • X IS NULL; X IS NOT NULL • X er NULL; X = 10? • X og Y er NULL; X = Y? • SANDT, FALSK, UKENDT • Kun ”SANDT” medtages i resultater, så foreningsmængden af resultaterne SELECT * FROM T WHERE X<5 SELECT * FROM T WHERE X>=5 giver ikke hele tabellen T. Det vil kræve at SELECT * FROM T WHERE X IS NULL også medtages. 2VE/E00/RB
Embedded SQL • Pre-compiled • EXEC SQL DECLARE … • EXEC SQL SELECT x,y INTO :x, :y FROM … • Indikator variable for NULL Cursors: EXEC SQL DECLARE C CURSOR FOR SELECT x, y FROM … EXEC SQL OPEN C; while (sqlcode == 0) { EXEC SQL FETCH C INTO :x, :y; } EXEC SQL CLOSE C; 2VE/E00/RB
Optimering af SQL • SQL er ”selvoptimerende” • Benytter • Indekser • Statistikker • Explain/showplan/queryplan/... • Masser af standardafvigende optimeringer • Tvungen brug af bestemte indeks • Parallel udførsel • Kreativ brug af indeks (MDAM) • Server optimering (memory etc.) 2VE/E00/RB