Kursus/workshop: SQL En workshop - med fokus på workshop. En workshop arrangeret af PROSA Palle Nygaard Hansen Frank Jensen
Indledning Gennemgang af alle basale SQL-sætninger Forløb for alle 3 aftener: Kort indføring om en SQLsætning Øvelser i samme Og forfra igen Forudsætning er, at ingen kender til SQL på forhånd Øvrige forudsætninger: Kunne basale engelske udtryk Basal programmeringserfaring
Indhold for de 3 aftener Aften 1: Basale select sætninger - listning fra tabeller Sortering af udtræk fra tabeller Selektiv søgning - udtræk af udvalgte rækker fra tabeller Statistik-udtræk - antal af forekomster i søgningerne Summationer Aften 2: Beregnede udtræk Grupperede udtræk funktions-søgninger Søgninger på strenge og datoer Aften 3: Kombinationssøgninger på flere tabeller Insert - indsættelse af rækker i tabeller Update - editere i rækker i tabeller Delete - sletning af rækker i tabeller
Teori: Hvad er en database? Et databasesystem skal stille følgende faciliteter til rådighed: Atomare transaktioner, hvilket betyder, at en ændring enten skal gennemføres helt eller også skal der ryddes så godt op, at det ser ud som om ændringen ikke er forsøgt gennemført. Konsistens De atomare transaktioner skal føre databasen fra en sammenhængende tilstand til en anden. Dette kræver, at de enkelte transaktioner er designet korrekt og hænger ikke kun på databasesystemet. Isolation To eller flere programmer, der bruger samme database, må ikke kunne se hinandens ændringer, før de er helt gennemførte. Der anvendes dog forskellige grader af isolation. Varighed Det skal sikres, at data ikke bare forsvinder. Det stiller krav til den anvendte hardware og krav om at skrivninger til disk laves, så data ikke kun lander i en cache undervejs. På engelsk kaldes disse krav om bestemte egenskaber for ACID-properties efter forbogstaverne i de engelske betegnelser atomicy, consistency, isolation og durability.
Teori: Tabel-begrebet I en relationel tabel er data indeholdt i tabeller En tabel er en liste (hver forekomst kaldes en række) Hver række indeholder et antal felter (kaldes kolonner) Eks: I bryggeri-tabellen er der i dette tilfælde vist 7 rækker og 4 kolonner
Eller sagt på en anden måde
Teori: Kolonner Kolonnerne i en tabel kan have forskellige formater Numerisk felt Karakterfelt Datofelt Og andre I bryggeri-tabellen er der 2 numeriske felter, 1 karakter-felt og 1 dato-felt.
Tabeller i workshoppen Tabellerne som bruges til øvelserne i denne workshop er bygget op om temaet øl Tabellerne hedder: bryggeri ol_maerker oltyper bydrikkeri posttabel
Tabeller i workshoppen
SQLkommando-programmerne MySQL Workbench
Aften 1 Basale select sætninger (listning fra tabeller) Sortering af udtræk fra tabeller Selektiv søgning (udtræk af udvalgte rækker fra tabeller) Statistik-udtræk (antal af forekomster i søgningerne
Basale select sætninger 1 Listning af rækker fra tabeller Select * from tabel Eks.: Select * from cpr_tabel Cprnr Navn By Skostørrelse Feltxx -----> 0907761442 Birgitte Birgittesen Humble 46 yy 2412851567 Børge Børgesen Svanneke 35 zz Opgaver
Basale select sætninger 2 Listning af udvalgte kolonner fra tabeller Select felt1,felt2 from tabel Eks.: Select cprnr,navn from cpr_tabel Cprnr Navn 0907761442 Birgitte Birgittesen 2412851567 Børge Børgesen Opgaver
Sorterede select sætninger Listning af udvalgte kolonner fra tabeller Select felt1,felt2 from tabel order by felt1 Eks.: A) Select cprnr,navn from cpr_tabel order by cprnr B) Select cprnr,navn from cpr_tabel order by navn desc A Cprnr Navn B Cprnr Navn 0907761442 Birgitte Birgittesen 1703661678 Sofie Sofiesen 1703661678 Sofie Sofiesen 2412851567 Børge Børgesen 2412851567 Børge Børgesen 0907761442 Birgitte Birgittesen Opgaver
Selektiv søgning Listning af udvalgte rækker fra tabeller Select felt1,felt2 from tabel where felt1 = xyz Eks.: A) Select cprnr,navn from cpr_tabel where cprnr = 1703661678 B) Select cprnr,navn from cpr_tabel where navn = Børge Børgesen A Cprnr Navn B Cprnr Navn 1703661678 Sofie Sofiesen 2412851567 Børge Børgesen Opgaver
Selektiv søgning med andre operatorer Operatorer > større end < mindre end Eks.: <= og >= mindre end/ligmed og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med A) Select cprnr,navn,postnr from cpr_tabel where postnr > 9000 B) Select cprnr,navn,postnr from cpr_tabel where postnr <= 1200 C) select cprnr,navn,postnr from cpr_tabel where postnr between 5000 and 5300 D) select cprnr,navn,landsdel from cpr_tabel where landsdel in ( Fyn, Jylland ) E) select cprnr,navn,mand_kvinde_mk from cprtabel where mand_kvinde_mk!= M
Selektiv søgning med andre operatorer (A) Listning af udvalgte rækker fra tabeller Operatorer: > større end < mindre end <= og >= mindre end/lig med og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med Eks.: A) Select cprnr,navn,postnr from cpr_tabel where postnr > 9000 Cprnr Navn Postnr 0907761442 Birgitte Birgittesen 9350 2412851567 Børge Børgesen 9780 1703661678 Sofie Sofiesen 9200
Selektiv søgning med andre operatorer (B) Listning af udvalgte rækker fra tabeller Operatorer: > større end < mindre end <= og >= mindre end/lig med og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med Eks.: B) Select cprnr,navn,postnr from cpr_tabel where postnr <= 1200 Cprnr Navn Postnr 0907761442 Birgitte Birgittesen 1080 2412851567 Børge Børgesen 1200 1703661678 Sofie Sofiesen 1150
Selektiv søgning med andre operatorer (C) Listning af udvalgte rækker fra tabeller Operatorer: > større end < mindre end <= og >= mindre end/ligmed og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med Eks.: C) select cprnr,navn,postnr from cpr_tabel where postnr between 5000 and 5300 Cprnr Navn Postnr 0907761442 Birgitte Birgittesen 5300 2412851567 Børge Børgesen 5000 1703661678 Sofie Sofiesen 5260
Selektiv søgning med andre operatorer (D) Listning af udvalgte rækker fra tabeller Operatorer: > større end < mindre end <= og >= mindre end/ligmed og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med Eks.: D) select cprnr,navn,landsdel from cpr_tabel where landsdel in ( Fyn, Jylland ) Cprnr Navn Landsdel 0907761442 Birgitte Birgittesen Fyn 2412851567 Børge Børgesen Jylland 1703661678 Sofie Sofiesen Fyn
Selektiv søgning med andre operatorer (E) Listning af udvalgte rækker fra tabeller Operatorer: > større end < mindre end <= og >= mindre end/ligmed og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med Eks.: E) select cprnr,navn,mand_kvinde_mk from cprtabel where mand_kvinde_mk!= M Cprnr Navn Mand_kvinde_mk 0907761442 Birgitte Birgittesen K 1703661678 Sofie Sofiesen K Opgaver
Syntaks-opsamling på select-sætninger Syntaks for en select sætning Select felt1,felt2, from tabel where feltx <operator> xxx order by feltx,felty (desc/asc) Eks.: Select cprnr,navn,postnr from cpr_tabel where postnr > 9000 order by postnr Select cprnr,navn from cpr_tabel where postnr <= 1200 order by postnr,cprnr select cprnr,,postnr from cpr_tabel where postnr between 5000 and 5300 order by postnr desc,cprnr asc Opgaver
Selektiv søgning med flere valg Where kombinationer and flere af de nævnte betingelser skal gælde samtidig or én af de nævnte betingelser skal være sande or/and kan kombineres og der kan benyttes paranteser Eks.: A) Select cprnr,landsdel,postnr from cpr_tabel where postnr > 9000 and landsdel= Sjælland B) Select cprnr,navn,postnr from cpr_tabel where postnr <= 1200 or postnr > 9500 C) select cprnr,postnr from cpr_tabel where landsdel = Fyn and (postnr = 5000 or postnr = 5260) A Cprnr Landsdel Postnr B Cprnr Navn Postnr 0907761442 Sjælland 9750 0907761442 Birgitte Birgittesen 9750 1703661678 Sjælland 9400 2412851567 Børge Børgesen 1100 Opgaver
Simpel kombinationssøgning (join) Listning af felter fra flere tabeller Select tabel1.felt1,tabel2.felt2 from tabel1,tabel2 where tabel1.id1 = tabel2.id1 Eks.: Select cpr_tabel.cprnr,cpr_tabel.navn,cpr_tabel.postnr,posttabel.by from cpr_tabel,posttabel where cpr_tabel.postnr=posttabel.postnr A Cpr_tabel.cprnr Cpr_tabel.navn Cpr_tabel.postnr posttabel.by 0907761442 Børge Hansen 5000 Odense C 1703661678 Anders Jensen 7000 Fredericia Opgaver
Wildcard søgning Listning af udvalgte rækker fra tabeller Select felt1,felt2.. from tabel where felt1 like xxx% Select felt1,felt2.. from tabel where felt1 like y_yy_yy Eks.: A) Select cprnr,navn,postnr from cpr_tabel where navn like Peter Ni% B) Select cprnr,navn,postnr from cpr_tabel where navn like Peter Pe_ersen A Cprnr Navn Postnr B Cprnr Navn Postnr 0907761442 Peter Nielsen 9750 0907761442 Peter Petersen 9750 1703661678 Peter Nicolaysen 9400 2412851567 Peter Pedersen 1100 Opgaver
Statistik på søgninger Listning af de eentydige rækker og antallet af rækker fra tabeller Select count(*) from tabel <where felt1 = xxx > Select distinct(felt1) from tabel <where felt1 = xxx > Eks.: A1) Select count(*) from cpr_tabel A2) Select count(*) from cpr_tabel where postnr = 5000 B1) Select distinct(postnr) from cpr_tabel B2) Select distinct(postnr) from cpr_tabel where bynavn like borg A Antal B Postnr 50098 5800 (Nyborg) 7000 (Viborg) Opgaver
Aften 2 Summationer Beregnede udtræk Funktions-søgninger Grupperede udtræk Søgninger på strenge (og datoer) Performance (evt. overskride tiden?)
Opsamling aften 1 Select alle felter Select udvalgte felter Select rækker på sorteret form (baseret på udvalgte felter) Select udvalgte rækker vha. betingelse (where sætning) Select med wildcard (%) (_) Select med statistik med count(*) Select fra mere end 1 tabel (detaljer 3. aften)
Opsamling syntaks - SELECT sætninger Select felt1,felt2 from tabel
Opsamling syntaks - SELECT sætninger Select felt1,felt2 from tabel
Opsamling syntaks - SELECT sætninger Select felt1,felt2 from tabel1,tabel2,tabel3.
Opsamling syntaks - SELECT sætninger Select felt1,felt2 from tabel Select * from tabel Minimums select sætning
Opsamling syntaks - SELECT sætninger Felt præsentation flere tabeller Select felt7,felt12,felt7 from tabel1,tabel2 Select felt7,felt12,felt7 from tabel1,tabel2 Select tabel1.felt7,tabel2.felt12,tabel2.felt7 from tabel1,tabel2
Opsamling syntaks - SELECT sætninger Sortering Select felt1,felt2 from tabel order by felt3 Select felt1,felt2 from tabel order by felt1,felt3 Select felt1,felt2 from tabel order by felt1 desc,felt3 (asc)
Opsamling syntaks - SELECT sætninger Betingelse Select felt1,felt2 from tabel where felt3 = 9999 Select felt1,felt2 from tabel where felt3 = xxxxyyyzzz Select felt1,felt2 from tabel where felt3 = xxxx and felt2 = 999 Select felt1,felt2 from tabel where felt3 = xxxx or felt2 = 999 Select felt1 from tabel where felt1 = 22 and (felt3 = 43 or felt4=55)
Opsamling syntaks - SELECT sætninger Andre betingelser Select felt1,felt2 from tabel where felt3 > 9999 Select felt1,felt2 from tabel where felt3 <= 9000 Select felt1,felt2 from tabel where felt3 between 200 and 299 Select felt1,felt2 from tabel where felt3 in ( xx, yy, zz ) Select felt1,felt2 from tabel where felt1!= xxx Select felt1,felt2 from tabel where felt1 is not null > større end < mindre end <= og >= mindre end/ligmed og større end/lig med between a and b mellem værdien a og b (inklusive) in (xx,yy,zz,.) blandt værdierne xx, yy eller zz. not in (xx,yy,zz ) ikke blandt værdierne xx, yy eller zz.!= - ikke lig med is not null ikke null værdien (dvs. ingenting )
Opsamling syntaks - SELECT sætninger Wildcard søgning Select felt1,felt2 from tabel where felt3 like xxx% Select felt1,felt2 from tabel where felt3 like %xx%y%zzz Select felt1,felt2 from tabel where felt3 like xx_y Select felt1,felt2 from tabel where felt3 like _xx y_ Select felt1,felt2 from tabel where felt3 like xx_yy%zz
Opsamling syntaks - SELECT sætninger Rækkeantal/distinkte værdier Select count(*) from tabel Select count(*) from tabel where felt3 > 700 Select distinct(felt1) from tabel Select distinct(felt1) from tabel where felt1 like x%
Opsamling syntaks - SELECT sætninger Rækkefølge Select felt1 from tabel Select felt1 from tabel where felt3 > 700 Select felt1 from tabel order by felt2,felt3 Select felt1 from tabel where felt3 > 700 order by felt2,felt3
Opsamling syntaks - SELECT sætninger Opgaver Opsummering aften 1
Summationer Summering af kolonner fra tabel Select sum(felt1) from tabel Select sum(felt2) from tabel where felt1 = xxx Eks.: A) Select sum(solgte_bananer) from solgt_frugt_tabel B) Select sum(købte_is) from is_indkøbs_tabel where isnavn= Magnum A Solgte bananer B Købte is 298 37 Opgaver
Beregnede udtræk (matematiske udtryk) Beregning på en rækkes felter (enkelt-række-baseret) Select felt1,felt2,felt1+felt2 from tabel Select felt1,felt5/felt6 from tabel Eks.: Select frugt_navn,ant_frugt,stk_pris,ant_frugt*stk_pris from frugt_omsaetning frugt_navn ant_frugt stk_pris ant_frugt*stk_pris Banan 60 3 180 Æble 203 2 406 Citron 450 4 1800
Beregnede udtræk - operatorer Multiplikation * Divistion / Addition + Subtraktion - Eks.: Select frugt,ant_frugt,stk_pris,ant_banan*stk_pris from frugt_omsaetning Select antal_piger+antal_drenge from klasse_tabel where klasse = 5A Select højeste_pris-laveste_pris from pris_tabel Select antal_piger/antal_skole_klasser from skole_tabel Opgaver
Beregnede udtræk andre operatorer Beregning på en rækkes felter (enkelt-række-baseret) Select operator(x,y) from tabel Eks.: Select ant_øjne,ant_terninger,power(ant_øjne,ant_terninger) from terninge_kast_tabel where ant_øjne in (2,3,6) Ant_øjne Ant_terninger Power(.) 3 3 27 6 3 216 3 1 3 2 3 8 2 6 64
Beregnede udtræk andre operatorer ABS(x) SIGN(x) Returnerer den absolutte værdi af x (værdi uden fortegn) Returnerer (for)tegnet for x (negativ=-1,nul=0,positiv=1) Mod(x,y) Returnerer resten (heltal) ved en divison (x divideret med y) Floor(x) Ceil(x) Power(x,y) Round(x,y) Sqrt(x) Returnerer den største hele værdi, som er mindre end eller lig med x Returnerer den mindste hele værdi, som er større end eller lig med x Returnerer værdien for x opløftet y gange Returnerer den afrundede værdi af x (evt. med y antal decimaler) Returnerer kvadratroden af x Eks.: Select floor(ant_is/ant_børn) from is_spiseri_tabel Select mod(ant_is,ant_børn) from is_spiseri_tabel Opgaver
Funktions-søgninger Beregning på et antal rækkers felter (mange-række-baseret) Select funktion(felt1) from tabel Select funktion(felt2) from tabel where felt1 = xxx Eks.: Select max(ant_spiste_is) from klasse_spiseri_tabel Select max(ant_spiste_is) from klasse_spiseri_tabel where klasse_navn like 5% Max(ant_spiste_is) 160
Funktions-søgninger (funktioner) MIN MAX SUM AVG COUNT COUNT(*) Returnerer den mindste værdi for et felt blandt en gruppe af rækker Returnerer den største værdi for et felt blandt en gruppe af rækker Returnerer summen af et felt blandt en gruppe af rækker Returnerer gennemsnitsværdien for et felt blandt en gruppe af rækker Returnerer antallet af rækker med en værdi for et felt blandt en gruppe af rækker Returnerer antallet af rækker blandt en gruppe af rækker Eks.: Select min(ant_børn) from skoleklasse_tabel Select avg(ant_børn) from skoleklasse_tabel where klasse_navn in ( 5A, 5B, 6A, 6B )
Funktions-søgninger - gennemsnit Listning af gennemsnittet for kolonne blandt et antal rækker Eks.: Select avg(felt1) from tabel Select avg(felt2) from tabel where felt2 > 8888 A) Select avg(alder) from cpr_tabel B) Select avg(alder) from cpr_tabel where alder > 40 A alder B alder 45 65
Funktions-søgninger minimum/maximum Listning af største/mindste forekomst af en kolonne blandt et antal rækker Select min(felt1) from tabel Select max(felt2) from tabel where felt2 < 666 Eks.: A) Select max(alder) from cpr_tabel B) Select min(alder) from cpr_tabel where alder > 40 A alder B alder 115 41 Opgaver
Grupperede udtræk med funktioner Beregning på et antal rækkers felter (gruppe-baseret) Select felt2,funktion(felt1) from tabel group by felt2 Select felt1,funktion(felt2) from tabel where felt9 = xxx group by felt1 Eks.: Select postnr,avg(alder) from cpr_tabel group by postnr Select postnr,avg(alder) from cpr_tabel group by postnr where postnr between 5000 and 5210 postnr Avg(alder) 5000 42 5100 43 5210 47 Opgaver
Strenge præsentation og søgning Listning af dele af kolonner og søgning på dele af kolonner Select substr(felt10,1,6) from tabel Select felt1,felt2.. from tabel where substr(felt2,1,8) = abcdefgh Eks.: A) Select cprnr,substr(navn,1,14) from cpr_tabel where navn like Peter Ni% B) Select cprnr,navn from cpr_tabel where substr(navn,1,8) = Peter Pe A Cprnr Navn B Cprnr Navn 0907761442 Peter Nielsen 0907761442 Peter Petersen 1703661678 Peter Nicolays 2412851567 Peter Pedersen Opgaver
Aften 3 Dato præsentation og søgning Kombinationssøgninger på flere tabeller Insert - indsættelse af rækker i tabeller Update - editere i rækker i tabeller Delete - sletning af rækker i tabeller
Oplysninger ifm. aftenens indhold Ny tabel: KARAKTER. 3 kolonner: Ølnr, Kursist, Karakter Der er på forhånd indsat nogle rækker, som foregiver, hvad andre kursister på holdet har tildelt af karakterer til nogle øl Er-diagram mangler 3 felter: OPRETTID i bryggeri-tabel TRANSAKTIONS_TID i ol_maerker-tabel BY hedder BYNAVN i posttabel
Dato behandling i SQL Hvert system sine funktioner MySQL date_format() Oracle to_char() MS SQL server convert() DB2 varchar_format() Se evt. mere på http://www.w3schools.com/sql/sql_dates.asp
Datoer præsentation og søgning Listning af dato-felter og søgning på datoer Eks.: Select date_format(dato1, %d-%b-%y ) from tabel Select felt1,felt2.. from tabel where datofelt = date_format( 20070931, %Y%m%d ) A) Select cprnr, date_format(fødselsdato, %d-%b-%y ) from cpr_tabel where navn= Peter B) Select cprnr,navn from cpr_tabel where fødselsdato = date_format ( 2412, %m%y ) A Cprnr Date_format(føds e.. B Cprnr Navn 0907761442 09-jul-1976 2412761443 Peter Jul 1703661678 17-mar-1966 2412851567 Julius Hansen
Datoer date_format (MySQL) Specifier Description %a Abbreviated weekday name (Sun..Sat) %b Abbreviated month name (Jan..Dec) %c Month, numeric (0..12) %d Day of the month, numeric (00..31) %e Day of the month, numeric (0..31) %f Microseconds (000000..999999) %H Hour (00..23) %h Hour (01..12) %i Minutes, numeric (00..59) %j Day of year (001..366) %k Hour (0..23) %l Hour (1..12) %M Month name (January..December) %m Month, numeric (00..12) %r Time, 12-hour (hh:mm:ss followed by AM or PM) %S Seconds (00..59) %s Seconds (00..59) %T Time, 24-hour (hh:mm:ss) %u Week (00..53), where Monday is the first day of the week; WEEK() mode 1 %W Weekday name (Sunday..Saturday) %w Day of the week (0=Sunday..6=Saturday) %Y Year, numeric, four digits %y Year, numeric (two digits) %% A literal % character Opgaver
Kombinations-søgninger flere tabeller Kombinere felter fra flere tabeller Er-diagrammet viser relationerne mellem tabellerne
Kombinations-søgninger flere tabeller Kombinere felter fra flere tabeller Er-diagrammet viser relationerne mellem tabellerne Eksempel: Bryggeri-tabellen indeholder ikke bynavn Men bryggeri-tabellen indeholder postnr. Postnr kan bruges til at hente bynavnet fra posttabellen (Se eksempel næste side) Eksempel: Oel-maerker-tabellen og bryggeri-tabellen indeholder bryggerinr Man kan finde hvilket bryggeri (bryggerinavn) hvorpå en øl er produceret
Joins SELECT bryggerinavn,postnr FROM bryggeri SELECT postnr,bynavn FROM posttabel SELECT bryggerinavn, bynavn FROM bryggeri JOIN posttabel ON posttabel.postnr = bryggeri.postnr
Joins Listning af felter fra flere tabeller SELECT tabel1.felt1,tabel2.felt2 FROM tabel1, tabel2 WHERE tabel1.id1 = tabel2.id1 Eller SELECT tabel1.felt1,tabel2.felt2 FROM tabel1 JOIN tabel2 on tabel1.id1 = tabel2.id1 WHERE Eksempel SELECT cprnr, navn, cpr_tabel.postnr, by FROM cpr_tabel, posttabel WHERE cpr_tabel.postnr = posttabel.postnr eller SELECT cprnr, navn, cpr_tabel.postnr, by FROM cpr_tabel JOIN posttabel ON cpr_tabel.postnr=posttabel.postnr A Cpr_tabel.cprnr Cpr_tabel.navn Cpr_tabel.postnr posttabel.by 0907761442 Børge Hansen 5000 Odense C 1703661678 Anders Jensen 7000 Fredericia
Joins JOIN tabel ON Giver kun de rækker, der opfylder kriteriet der står i ON-clausen
Andre JOIN-typer
Opgaver i Joins Listning af felter fra flere tabeller SELECT tabel1.felt1,tabel2.felt2 FROM tabel1, tabel2 WHERE tabel1.id1 = tabel2.id1 Eller SELECT tabel1.felt1,tabel2.felt2 FROM tabel1 JOIN tabel2 on tabel1.id1 = tabel2.id1 WHERE Eksempel SELECT cprnr, navn, cpr_tabel.postnr, by FROM cpr_tabel, posttabel WHERE cpr_tabel.postnr = posttabel.postnr eller SELECT cprnr, navn, cpr_tabel.postnr, by FROM cpr_tabel JOIN posttabel ON cpr_tabel.postnr=posttabel.postnr A Cpr_tabel.cprnr Cpr_tabel.navn Cpr_tabel.postnr posttabel.by 0907761442 Børge Hansen 5000 Odense C 1703661678 Anders Jensen 7000 Fredericia
Insert Indsætte rækker i tabeller Indsæt en (eller flere) række(r) INSERT INTO table_name VALUES (value1, value2,...) INSERT INTO table_name select felt1,felt2 from table_name2 Eks.: insert into cpr_tabel values (241220061345, Peter Juliusen,5000, Overgade 18 ) insert into cpr_tabel values (241220051346, Sofie Juliusen,5000, Overgade 18 ) commit Insert into cpr_tabel select cprnr,navn,postnr,adresse from grønlandsk_cpr_tabel commit A Cprnr Navn Postnr Adresse 241220061345 Peter Juliusen 5000 Overgade 18 241220051346 Sofie Juliusen 5000 Overgade 18
Commit og Rollback Opdateringer i en tabel kan fortrydes eller godkendes En insert, update eller delete på rækker er ikke fuldendt inden der afgives enten en commit eller en rollback Commit: Godkender den eller de opdateringer, som er sket mod tabellerne Rollback: Fortryder alle opdateringer, som er sket mod tabellerne Eks.: insert into cpr_tabel values (9999998888, Peter Juliusen,5000, Overgade 18 ) insert into cpr_tabel values (1111112222, Sofie Juliusen,5000, Overgade 18 ) rollback insert into cpr_tabel values (241220061345, Peter Juliusen,5000, Overgade 18 ) insert into cpr_tabel values (241220051346, Sofie Juliusen,5000, Overgade 18 ) commit A Cprnr Navn Postnr Adresse 241220061345 Peter Juliusen 5000 Overgade 18 241220051346 Sofie Juliusen 5000 Overgade 18
Insert af rækker med rollback Insert into oltyper values (145, Julebryg ) select * from oltyper where oltypenr >142 rollback select * from oltyper where oltypenr >142
Insert af rækker med commit Insert into oltyper values (145, Julebryg ) select * from oltyper where oltypenr >142 commit select * from oltyper where oltypenr >142 Opgaver
Delete Slette rækker i tabeller Slette én (eller flere) række(r) Delete from table_name Delete from table_name where felt1 = værdi Delete from table_name where felt1 in ( xx, yy, zz, vv ) Delete from table_name1 where felt1 in (select felt1 from table_name2) Eks.: delete from cpr_tabel rollback delete from cpr_tabel where status = Flyttet til udlandet commit Cprnr Navn Bynavn Status 0907761442 Peter Nielsen 0907761442 Bosiddende 1703661678 Peter Nicolaysen 2412851567 Flyttet til udlandet Cprnr Navn Bynavn Status 0907761445 Peter Nielsen 0907761442 Bosiddende Opgaver
Update Opdatere rækker i tabeller Opdatere en (eller flere) række(r) update table_name set felt1= nyværdi, felt2= nyværdi2 update table_name set felt1= nyværdi where felt2 = værdi Eks.: update cpr_tabel set nationalitet= DK, A Cprnr Navn Bynavn MK Nationalitet 0907761443 Rasmus Nielsen Odense M DK 1703661677 Rasmus Lüberth Nuuk DK update cpr_tabel set nationalitet= GR,MK=M where bynavn = Nuuk and navn like Rasmus% commit A Cprnr Navn Bynavn MK Nationalitet 0907761443 Rasmus Nielsen Odense M DK 1703661677 Rasmus Lüberth Nuuk M GR Opgaver
Link-liste http://www.1keydata.com/sql/sql.html http://www.w3schools.com/sql/ Kommer på siden www.prosa.dk/pio ------------------------------------------------------------------------------------------------------ Evaluering
Opsummering Almindelig select med søge-kriterier og sortering Funktions-søgning Gruppebaseret visning og søgning Kombinations-søgninger med flere tabeller Opgaver