Relationsdatabaser og SQL

Slides:



Advertisements
Lignende præsentationer
Videregående pc-vejledning
Advertisements

Stored Procedure Stored Procedure er programstumper, der gemmes i databasen og afvikles op databaseserveren på samme måde som forespørgsler. Med Stored.
Forsiden 1.Denne knap bruges når du vil taste dagens resultater ind. 2.Denne knap skal kun bruges hvis du allerede har gemt data og du finder ud af at.
Vejledning i blog-værktøjet WordPress Opdateret august 2009.
SQL underforespørgsler og Join
Vejledning i blog-værktøjet WordPress Opdateret oktober 2012.
Vejledning i blog-værktøjet WordPress Opdateret februar 2009.
Formularer (Access, del 3)
Relationsdatabaser og SQL
SQL 1 DDL og DML.
Felter og nøgle-felter (databaser, del 6)
Intro Eksamen 4-ugers-projekter? Eksamensforberedelse De sidste tre gange?
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Regnskab & økonomistyring - Lektion 15 HD 5. semester forår 2010 v/ Jens Godik Højen, April 2010.
Regnskab & økonomistyring - Lektion 2 HD 5. semester forår 2010
Mapning af 1 til mange forbindelser
Introduktion til Access (Access, del 1)
Validering af data (Access, del 7)
Relationsdatabaser og SQL
Beskrivelses- og analyse-teknikker understøttet af Oracle Designer Del 2 af 2: Proces- og funktionsdiagrammering Aalborg Universitet, d. 9. oktober 2006.
Beskrivelses- og analyse-teknikker understøttet af Oracle Designer
NOEA/IT FEN - Databaser/Sikkerhed 1 Lektion 10 Sikkerhed og integritet Områder Autorisationsmatrix Realisering i SQL.
6. SQL1 Standardiseret spørge-sprog mv. til relationsdatabaser.
Relationsdatabaser og SQL
Intro Projekttyper v/ Lise Louv, Uddannelsesafdelingen Siden sidst: evaluering på opgaver og virtuel kursus. Kursets ugeforløb læse – forelæsning – øvelsestime.
Operationer på relationer
22/092VE/E00/RB1 Introduktion til SQL Datalogi 2VE E00 DIKU Forelæsninger 22/9 og 29/9.
7. SQL constraints og triggers1 Aktive elementer i SQL.
1 HMAK XMLRelationel model og XMLNOEA / PQC 2005 SQLServer og XML Hent data via URL Generering af xml –Raw –Auto –Explicit Hent data via template Evt.
SQL – Oracle Relationsdatabase
Data Dictionary (databaser, del 7)
1 SQL2. 2 Funktioner der laver aggregerede beregninger Returnerer count() Antal rækker der opfylder bestemt betingelse min() Laveste værdi (eller null)
Årsmøde Organisationen Danske Arkiver
EASY-A set med usability-konsulentens briller 6. september 2007.
Test 1 Klik her for start. Hvor skal du klikke for at få designvisning?
SQL – Oracle Relationsdatabase
SQL Jesper Tørresø DAB1 E oktober Punkter for i dag. SQL baggrund. Relationel algebra. Brug af VS2005.
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
2009NOEA/IT - Databaser/arkitektur1 Den relationelle model En teoretisk model for databaser Hviler på et sundt teoretisk grundlag Omfatter: Datastruktur.
1 SQL2. 2 Funktioner der laver aggregerede beregninger Returnerer count() Antal rækker der opfylder bestemt betingelse min() Laveste værdi (eller null)
W1b1 PC baseret analyse og simulering. w1b2 Definition Digital Elektronisk beregningsmaskine, der har intern hukommelse til lagring af program og mellem-regninger.
8.7 Security: Grant and revoke1 Sikkerhed 8.7 Security and User Authorization in SQL.
1. Database-systemer, introduktion
Data Warehouse 8. semester forår 2010
Introduktion til Access (Access, del 1). RHS – Informationsteknologi – Fra design til udvikling Vi ved nu, hvordan vi finder et design for en database,
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
Slide Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 15 Algorithms for Query Processing and Optimization.
Intro Større applikationer, f. eks: Bogpris.dk. Nye bøger.
Administratordelen - Sidsel Præsentation af administratordelen Sitemap Webstruktur Transaktioner Fremtid.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Rapid Application Development med Application Express Aalborg Universitet, d. 19. september 2007 B e n t M ø l l e r M a d s e nB e n t M ø l l e r M a.
FENNOEA IT - Databaser/SQL-Eval1 SQL: Opsamling Om SELECT Vurdering af SQL.
Intro Databaserne? Gik det som det skulle?. Databasestøttet webpublicering Forelæsning nr 8 Hvorfor data i en RDB (relationel database)? Databasemodellering.
SQL Jesper Tørresø DAB1 E September Punkter for i dag. SQL baggrund. Relationel algebra. SQL koncept –Vises ved brug af VS2008.
Oprettelse af tabeller (Access, del 2)
SQL – Oracle Vigtige SQL sætninger Lektion 6 7. Semester.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
DWDK – øvelsestime 3 CSS – let the fun begin!!. Tilgængelige slides Disse slides ligger på mit public drev
Oracle Application Express Lektion 2 7. Semester 2008.
Database.
PHP.
Anmelderklub.dk. Struktur - Betina Indledning Hvad er brugervenlighed? Er Anmelderklub.dk brugervenlig? Hvordan kunne vi have testet anderledes? Hvad.
Oracle Application Express Lektion 1 7. Semester 2008.
Objekt-relationel DBMS1 4.5 The Object-Relational Model 9.4 User-Defined Types in SQL 9.5 Operations on Object-Relational Data Ullman: Object-Relational.
Videregående pc-vejledning
Database Some walk through lv/ Figures & some text from: © Pearson Education Limited 1995,
Modellering og data Nyt forløb.
MySQL dat2sem2018Fall Modul 2 – uge 2.
Dat2sem2019 Bornholm Modul 2 – uge 2
Præsentationens transcript:

Relationsdatabaser og SQL Del 3 af 4: Data Manipulation Language (DML) i SQL Aalborg Universitet, d. 6. september 2006 B e n t M ø l l e r M a d s e n

Tegn-forklaring Denne skrifttype er lig kode STORE BOGSTAVER er lig Oracle kommandoer <tekst> betyder at tekst inkl. større-end og mindre-end tegn skal erstattes med den faktiske tekst/værdi. [tekst] betyder at tekst er valgfri og kan udelades. De firkantede parenteser skal aldrig skrives i koden. {tekst1|tekst2} betyder at en af teksterne adskilt af de lodrette streger skal vælges. De krøllede parenteser skal aldrig skrives i koden.

Elementer i en tabel Postnumre Postnumre Postnr Bynavn Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast

SQL til tabeldata Data Manipulation Language (DML) INSERT UPDATE DELETE SELECT (MERGE) (TRUNCATE) Vedrører de faktiske data i tabeller 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast

Insert INSERT INTO <tabelnavn> [(<kolonner>)] VALUES (<værdier>); INSERT INTO kunder VALUES (115, 'Føtex', null, '13-08-2006'); INSERT INTO kunder (id, kunde) VALUES (116, 'Netto'); Kunder Id Number Kunde Varchar2 Postnr Dato Date Bemærk, tomt felt

Insert data fra anden tabel INSERT INTO <tabelnavn> [(<kolonner>)] SELECT <kolonnenavne> FROM <tabelnavn>; INSERT INTO kunder_kopi (id, kunde) SELECT (id, kunde) FROM kunder; Bemærk at nøgleordet VALUES udelades ved indsætning af data fra en anden tabel

Regler for (indsættelse af) data Værdierne adskilles med komma , Enkelt anførselstegn ' ' omkring værdier der indsættes (ikke krav ved NUMBER datatype) Der skal (naturligvis) tages hensyn til store og små bogstaver Ved manuel dataindsættelse kan kun én række oprettes for hver INSERT kommando NULL indtastes for et blankt felt. Der skal altid indtastes data i kolonner med NOT NULL betingelse

Regler for (indsættelser af) datoer Da datoer kan antage mange forskellige formater, er det nødvendigt at definere det anvendte datoformat. Direkte i INSERT kommandoen vha. TO_DATE funktionen INSERT INTO kunder VALUES (115, 'Føtex', null, TO_DATE('13-08-2006', 'DD-MM-YYYY')); Eller ved at definere et datoformat for hele sessionen. ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY'; INSERT INTO kunder VALUES (115, 'Føtex', null, '13-08-2006'); Funktionen SYSDATE indsætter dags dato i kolonnen. INSERT INTO kunder VALUES (115, 'Føtex', null, SYSDATE);

Sekvenser – fortløbende numre Sekvenser anvendes hovedsageligt til at danne indholdet i syntetiske primærnøgler CREATE SEQUENCE <sekvensnavn> [INCREMENT BY <antal>] [START WITH <nummer>]; DROP SEQUENCE <sekvensnavn> SELECT * FROM user_sequences; CREATE SEQUENCE kunder_seq INCREMENT BY 1 START WITH 1000; INSERT INTO kunder (id, kunde) VALUES (kunder_seq.nextval, 'Føtex');

Opdatering af data UPDATE <tabelnavn> SET <kolonnenavn> = <værdi> [WHERE <betingelse>]; UPDATE kunder SET kunde = 'Bilka', postnr = 9000 WHERE kunde = 'A-Z'; Hvis WHERE-sektionen udelades opdateres alle rækker i tabellen!

Sletning af data DELETE [FROM] <tabelnavn> [WHERE <betingelse>]; DELETE FROM kunder WHERE kunde = 'Føtex'; TRUNCATE TABLE kunder; TRUNCATE sletter uden mulighed for at foretage rollback/fortryde, men er til gengæld langt hurtigere end DELETE ved større datasæt.

Gemme og fortryde Når der arbejdes med data i tabeller gemmes ændringer ikke automatisk. COMMIT; Gemmer ændringer SAVEPOINT <navn på savepoint>; Opretter midlertidigt punkt der kan fortrydes tilbage til ROLLBACK [TO <navn på savepoint>]; Fortryd ændringer siden sidste commit eller bestemt savepoint

Udtrække data SELECT - Hvilke data vil jeg have? FROM - Hvor skal data komme fra? [WHERE] - Hvilke betingelser skal være gældende? [GROUP BY] - Hvordan skal data grupperes? [HAVING] - Hvilke betingelser skal være gældende for grupper? [ORDER BY] - Hvordan skal data sorteres?

Komplet udtræk SELECT * FROM postnumre; postnr, bynavn Postnumre 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Resultat Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast

Udtræk på delmængde af kolonner - projection Postnumre SELECT bynavn FROM postnumre; Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Resultat Bynavn Aalborg Vrå Århus C Sorø Ikast

Sortering af output – stigende (asc) eller faldende (desc) Postnumre SELECT * FROM postnumre ORDER BY postnr [ASC] Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Resultat Postnr Bynavn 4180 Sorø 7430 Ikast 8000 Århus C 9000 Aalborg 9760 Vrå

Udtræk på delmængde af rækker - restrict Postnumre SELECT * FROM postnumre WHERE postnr > 8000; Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Resultat Postnr Bynavn 9000 Aalborg 9760 Vrå

Betingelser i WHERE Grundlæggende typer af betingelser: Sammenligning Interval Mængde medlemskab Mønster-match Test for NULL Joins, der fortæller hvordan data fra flere tabeller hænger sammen kan også foretages i WHERE-sektionen, men generelt anbefales det at foretage joins direkte i FROM-sektionen.

Sammenligning Følgende type sammenligninger kan foretages mellem kolonner og/eller værdier = Lig med < Mindre end > Større end <= Mindre end eller lig med >= Større end eller lig med != Forskellig fra <> Forskellig fra

Interval og mængde medlemskab Interval inkl. start- og slutværdi (BETWEEN): SELECT <kolonnenavne> FROM <tabelnavn> WHERE <kolonnenavn> BETWEEN <kolonne1 eller værdi1> AND <kolonne2 eller værdi2>; Mængde medlemsskab (IN): SELECT <kolonnenavn> FROM <tabelnavn> IN (<kolonne1 eller værdi1>, <kolonne2 eller værdi2>, …);

Mønster-match Mønster-match - jokertegn: hvis den præcise værdi ikke kendes eller værdier med bestemte karakteristika ønskes WHERE <kolonnenavn> LIKE '<%_>'; _ = præcis én vilkårlig karakter % = 0 til mange vilkårlige karakterer Eks: SELECT * FROM medarbejdere WHERE fornavn LIKE 'Ann_' AND efternavn LIKE '%rist%nsen'; WHERE email like '%@%';

Test for NULL Test om feltet er tomt eller ej Eks: WHERE <kolonnenavn> IS NULL; WHERE <kolonnenavn> IS NOT NULL; Eks: SELECT kunde_id, kunde FROM kunder WHERE tlf IS NOT NULL;

Bemærk forskellene i betingelserne! WHERE Kunde = 'Bilka’ Finder rækker hvor kundenavnet er præcis ’Bilka’. WHERE Kunde = 'Bil%’ Finder rækker hvor kundenavnet er præcis ’Bil%’. WHERE Kunde = 'null’ Finder rækker hvor kundenavnet er præcis ’null’. WHERE Kunde like 'Bil%’ Finder rækker hvor kundenavnet starter med ’Bil’. WHERE Kunde is null Finder rækker hvor kundenavnet er tomt.

Flere samtidige betingelser og negation af betingelser Flere betingelser kan kombineres ved anvendelse af AND og OR i WHERE-sektionen NOT kan anvendes til at negere en betingelse (opnå det modsatte resultat) Evalueringsrækkefølge: Generelt fra venstre mod højre Dog evalueres parenteser først Og NOT evalueres før AND, der evalueres før OR Select * FROM kunder WHERE (postnr >= 9000) AND (kunde = 'Føtex') OR NOT(kunde != 'Bilka');

Joins Anvendes til søgning på data fra flere tabeller Tabellerne samles (”join'es”) via kolonner med ens indhold ofte kolonner med fremmed- og primærnøgler Join kan ske i FROM- eller WHERE-delen Typer af joins Naturligt join Inner join Outer join (left, right, full) Kartesisk produkt

Simpelt ”gammeldags” join i WHERE Postnumre SELECT k.kunde, k.postnr, p.bynavn FROM postnumre p, kunder k WHERE p.postnr = k.postnr Når samme kolonnenavn forekommer i begge tabeller skal kolonnen præciseres med tabelnavnet Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Kunder ID Kunde Postnr 101 Bilka 9000 102 Kvickly 105 Spar 4180 103 Ikea 5000 Kunde Postnr Bynavn Bilka 9000 Aalborg Spar 4180 Sorø

Naturligt join på alle enslydende kolonner Postnumre SELECT k.kunde, postnr, p.bynavn FROM postnumre p NATURAL JOIN kunder k Tabelnavn må IKKE stå foran join-kolonnen i et naturligt join Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Kunder ID Kunde Postnr 101 Bilka 9000 102 Kvickly 105 Spar 4180 103 Ikea 5000 Kunde Postnr Bynavn Bilka 9000 Aalborg Spar 4180 Sorø

Inner Join på delmængde af enslydende kolonnenavne Postnumre SELECT k.kunde, postnr, p.bynavn FROM postnumre p JOIN kunder k USING (postnr) Tabelnavn må IKKE stå foran join-kolonnen ved USING Postnr Navn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Kunder ID Navn Postnr 101 Bilka 9000 102 Kvickly 105 Spar 4180 103 Ikea 5000 Kunde Postnr Bynavn Bilka 9000 Aalborg Spar 4180 Sorø

Inner Join på kolonner med forskellige navne Postnumre SELECT k.kunde, k.postnr, p.bynavn FROM postnumre p JOIN kunder k ON (p.nr = k.postnr) Nr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Kunder ID Kunde Postnr 101 Bilka 9000 102 Kvickly 105 Spar 4180 103 Ikea 5000 Kunde Postnr Bynavn Bilka 9000 Aalborg Spar 4180 Sorø

{Left|right|full} outer join Postnumre SELECT k.kunde, postnr, p.bynavn FROM postnumre p NATURAL RIGHT OUTER JOIN kunder k {LEFT|RIGHT|FULL} OUTER kan tilføjes til alle typer FROM-joins Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Kunder Kunde Postnr Bynavn Bilka 9000 Aalborg Kvickly Spar 4180 Sorø Ikea 5000 ID Kunde Postnr 101 Bilka 9000 102 Kvickly 105 Spar 4180 103 Ikea 5000

Det kartesiske produkt Postnumre SELECT k.kunde, k.postnr, p.bynavn FROM postnumre p CROSS JOIN kunder k Resultatet er lig alle kombinationer af rækkerne fra kildetabellerne Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Kunder Kunde Postnr Bynavn Bilka 9000 Aalborg Vrå … Ikea 5000 Ikast ID Kunde Postnr 101 Bilka 9000 102 Kvickly 105 Spar 4180 103 Ikea 5000

Beregninger på kolonner Postnumre Alle almindelige regneoperationer (plus, minus, gange og division) kan foretages på tal-kolonner Plus og minus kan også foretages på datoer for at lægge dage til eller trække dage fra en dato. SELECT postnr – 1000 AS nyt_postnr FROM postnumre; Postnr Bynavn 9000 Aalborg 9760 Vrå 8000 Århus C 4180 Sorø 7430 Ikast Resultat Nyt_postnr 8000 8760 7000 3180 6430

Funktioner Concatenation sammentrækker data fra flere felter til et felt: <kolonnenavn1 eller værdi1> || <kolonnenavn2 eller værdi2> CONCAT(< kolonnenavn1 eller værdi1 >, <kolonnenavn2 eller værdi2>) CONCAT virker kun med to kolonner/værdier af gangen Eks: SELECT 'Navn: ' || kunde AS kundenavn FROM kunder;

Funktioner Udtræk en delmængde af teksten i et felt. Tallet m siger hvorfra der skal klippes, mens n er antal tegn fra m der klippes ud SUBSTR (<kolonnenavn>, m,n) SELECT SUBSTR(kunde, 1,3) FROM kunder; Viser de første 3 bogstaver i hver kundes navn Udskift tomme / null værdier med egen tekst/tal eller indholdet fra en anden kolonne. NVL(<kolonnenavn>, <kolonnenavn eller værdi>) SELECT NVL(kunde, 'Ukendt') FROM kunder;

Funktioner Find/vis længden af hver enkelt værdi i en kolonne LENGTH(<kolonnenavn>) Fjern decimaler, så der kun er m antal tilbage TRUNC (<kolonnenavn>, m) Afrund, så der kun er m antal decimaler tilbage ROUND (<kolonnenavn>, m) Fjern foran- og/eller bagvedstillede karakterer TRIM (LEADING [<karakter>] FROM <kolonne>) TRIM (TRAILING [<karakter>] FROM <kolonne>) TRIM ([BOTH] [<karakter>] FROM <kolonne>) TRIM (<kolonne>)

Funktioner Konvertering af dataformat TO_CHAR (<kolonnenavn>) TO_NUMBER (<kolonnenavn>) TO_DATE (<kolonnenavn>,'datoformat') Datoformat f.eks. lig 'DD-MM-YYYY' for '15-06-2004' Ændring af tekst til STORE / små bogstaver UPPER (<kolonnenavn>) LOWER (<kolonnenavn>)

Aggregeringsfunktioner og GROUP BY SELECT COUNT(<kolonnenavn> eller *) MIN (<kolonnenavn>) MAX (<kolonnenavn>) AVG (<kolonnenavn>) SUM (<kolonnenavn>) Ved hjælp af GROUP BY kan der laves aggregeringer gruppevis i stedet for alle valgte rækker. HAVING kan anvendes med GROUP BY til at begrænse de grupper, der skal vises. Kan sammenlignes med WHERE

Aggregeringsfunktioner - eksempler SELECT COUNT(*) FROM kunder SELECT MIN (postnr), MAX (postnr) FROM kunder; SELECT postnr, COUNT (*) AS antal FROM kunder GROUP BY postnr HAVING COUNT(*) >= 10 ORDER BY postnr; COUNT(*) 264 MIN(postnr) MAX(postnr) 4180 9000 Postnr Antal 5000 15 7400 19 8200 17 9000 27

Distinct DISTINCT finder de unikke værdier i en eller flere kolonne DISTINCT <kolonnenavn(e)> SELECT DISTINCT postnr FROM KUNDER; SELECT DISTINCT kunde, postnr FROM KUNDER; DISTINCT kan anvendes i aggregerings-funktioner, hvor den mest interessante typisk er COUNT SELECT COUNT(DISTINCT postnr) FROM KUNDER; Hvis man vil tælle unikke værdier over flere kolonner skal de først sammentrækkes til et felt

CASE CASE anvendes til at danne nye værdier, hver gang der er et match på eksisterende værdier. (CASE <kolonnenavn> WHEN <originalværdi> THEN <ny værdi> … [ELSE <default_værdi>] END) AS <ny kolonne> (CASE WHEN <betingelse> THEN <ny værdi> … [ELSE <default_værdi>] END) AS <ny kolonne>

Case - eksempler SELECT kunde, (CASE postnr WHEN 9000 THEN 'Aalborg’ WHEN 9220 THEN 'Aalborg Øst’ ELSE 'Ukendt by’ END) AS Bynavn FROM kunder; SELECT postnr, bynavn, (CASE WHEN postnr < 5000 THEN ’Sjælland’ WHEN postnr >= 6000 THEN ’Jylland’ ELSE ’Fyn’ END) AS region FROM postnumre;

Sæt operatorer Sæt operatorer kombinere resultatet (rækkerne) fra forskellige select-sætninger UNION (Alle rækker minus dubletter) UNION ALL (Alle rækker inkl. dubletter) INTERSECT (Alle dubletter) MINUS (Unikke rækker fra første Select) JOIN UNION/INTERSECT/MINUS

Sæt operator - eksempel Alle unikke samarbejdspartnere og postnr SELECT kunde AS navn, postnr FROM kunder UNION SELECT lev_navn, postnr FROM leverandoerer; Alle samarbejdspartnere, der både er kunder og leverandører fra samme postnr SELECT kunde AS navn, postnr FROM kunder INTERSECT SELECT lev_navn, postnr FROM leverandoerer; navn postnr Ikea 5000 Spar 4180

Subqueries Anvendelse af resultatet fra en (indre) SELECT-sætning som input i en anden (ydre) SELECT-sætning. Eks: SELECT <kolonnenavn> FROM <tabelnavn> WHERE <kolonnenavn> IN (SELECT……); SELECT <kolonnenavn> FROM (SELECT……) WHERE …;

Subqueries – eksempler Find navnet på byen der har det største postnr SELECT postnr, bynavn FROM postnumre WHERE postnr = ( SELECT max (postnr) FROM postnr ); Banalt eks. hvor en forespørgsel anvendes som den komplette kilde til en ny forespørgsel SELECT id, kunde FROM ( SELECT * FROM kunder WHERE postnr > 8000 ) ORDER BY kunde;

Eksempel på hierarkisk forespørgsel Medarbejdere Hierarkier kan gemmes i tabeller ved at have ”far/parent”- kolonne, der viser den over- ordnede række. SELECT id, navn, PRIOR navn AS chef, LEVEL FROM medarbejdere CONNECT BY PRIOR id = chef_id START WITH chef_id IS NULL; ID Navn Chef_id 101 Hans 102 Jens 105 Niels 103 Peter Resultat ID Navn Chef Level 102 Jens 1 101 Hans 2 103 Peter 3 105 Niels

View Virtuel tabel, der baseres på en gemt SQL-sætning Formål I databasen gemmes kun sql-sætningen Formål Forenkle komplicerede forespørgsler Implementering af sikkerhed Give forskellige brugere forskellige måder at se de samme data Logisk uafhængighed af ændringer i tabelstrukturer Alle SELECT-forespørgsler kan foretages mod et view Begrænsede muligheder for INSERT, UPDATE og DELETE afhængig af konstruktionen

Oprettelsen af et view Oprettelsen af et view Forespørgsel mod et view CREATE [OR REPLACE] VIEW <viewnavn> AS SELECT <kolonner> FROM <tabelnavne> WHERE … ; Forespørgsel mod et view SELECT * FROM <viewnavn>; Sletning af et view DROP VIEW <viewnavn>; Vis definitionerne af alle views SELECT * FROM user_views;

DUAL tabel i Oracle DUAL tabellen er en dummy tabel, der ikke har noget indhold, men som kan anvendes ved SELECT-sætninger, hvor der reelt ikke er en kildetabel Eks: SELECT 5*10 FROM DUAL; SELECT SYSDATE FROM DUAL; SELECT USER FROM DUAL;

Trigger En trigger er et lille program, der ved en bruger-defineret aktivitet udfører en bestemt handling. CREATE [OR REPLACE] TRIGGER <trigger-navn> {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON <tabel-navn> [REFERENCING [NEW AS <navn for ny række>] [OLD AS <navn for gammel række>]] [FOR EACH ROW [WHEN (<trigger-betingelse>)]] <trigger-handling>

Trigger der automatisk henter næste værdi fra en sekvens ind i en tabel CREATE OR REPLACE TRIGGER kunde_seq_trigger BEFORE INSERT ON kunder FOR EACH ROW BEGIN IF ( :NEW.kunde_id IS NULL ) THEN SELECT kunde_seq.NEXTVAL INTO :NEW.kunde_id FROM DUAL; END IF; END; /

Kommentarer - Comments Kommentarer der ikke registreres i databasen -- hvis kommentaren kun fylder én linie /* */ hvis kommentaren fylder flere linier Kommentarer der registreres i databasen COMMENT ON TABLE <tabelnavn> IS '<kommentarer>'; COMMENT ON COLUMN <tabelnavn.kolonnenavn> SELECT table_name, comments FROM user_tab_comments WHERE table_name = '<tabelnavn>';

Access Rights (DCL) Brugerstyring og hvilke brugere, der har adgang til hvilke data. GRANT <access_right> ON <tabelnavn> TO <user_id>; REVOKE <access_right> ON <tabelnavn> FROM <user_id>; Eks: GRANT SELECT ON kunder TO bmm; REVOKE SELECT ON kunder FROM bmm;

Brugerstyring med SQL Opret bruger: Slet bruger Rettigheder til bruger CREATE USER <brugernavn> IDENTIFIED BY <password>; Slet bruger DROP USER <brugernavn> [CASCADE]; Rettigheder til bruger GRANT CONNECT, RESOURCE, CREATE VIEW TO <brugernavn> Ændre password: ALTER USER <brugernavn> IDENTIFIED BY <nyt password>; Log på med bruger: CONNECT brugernavn>/<password>@<databasenavn>;

Indeksering Hvorfor? Syntaks Hvilke kolonner skal man så indeksere? Større hastighed Uden et indeks må databasen søge sekventielt Tilsvarende at skulle finde oplysninger i en bog Syntaks CREATE [UNIQUE] INDEX <indeksnavn> ON <tabelnavn> (<kolonnenavn> [DESC]); Hvilke kolonner skal man så indeksere? Primære og unikke nøgler indekseres automatisk Fremmednøgler Felter der ofte søges på

Data dictionary Databasens systemtabeller (ejes af sys): Tabeldefinitioner Integrity constraints Sikkerhedsinformation Definition af indeks, views, mv.

Data dictionary Nyttige views i Oracle's data dictionary: user_tables user_constraints user_cons_columns (Constraints kolonner) user_views user_sequences user_synonyms user_indexes user_ind_columns (Indeks kolonner)

Scripts Et script er en eller flere sql-sætninger placeret i en tekstfil – typisk med endelsen ”.sql”. Kan eksekveres fra SQL-prompten med @<sti og filnavn>; Eksempel: @C:\scripts\create_tables.sql;

?