DB undervisning 01-01



Relaterede dokumenter
De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

1. Opret følgende flade database, find selv passende datatyper. 2. Opret begrænsningerne på datatyperne, du ser fx fornavn maks 25 tegn

Begrænsninger i SQL. Databaser, efterår Troels Andreasen

Views etc. Databaser

Karens lille vejledning til Access

Introduktion til SQL queries

Data lagring. 2. iteration (implement backend)

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

1. Basal select med (stjerne)

Hvad er en relationsdatabase? Odense, den 19. januar Version 1.0

Trin 1 INSERT INTO Debitor (DebitorNr, KundeKategori, KreditMax, SidstRykket, Sælger ) VALUES (20121, 10, 40000, NULL, "Bjarne Larsen");

Introduktion til programmering

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Opgave 1 Basal select med (stjerne)

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Database design for begyndere

Import af rekursivt (parent-child) hierarki i Palo

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Skriftlig eksamen i kurset. Informationssystemer

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

Databaseadgang fra Java

Vigtigste funktionstaster Microsoft Dynamics C / NAV 2013

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Database optimering - Indeks

Sidste forelæsning. Jacob Aae Mikkelsen. 28. april 2013 IMADA. Jacob Aae Mikkelsen (IMADA) Sidste forelæsning 28.

Relationel Algebra og SQL

Anne Randorff Højen

Anvisning i aflevering af bitemporale data

En Kort Introduktion til Oracle

3. semester, 2. projekt: Database

Manglende konsistens i datamodellen og upræcise SQLsætninger er årsagen til, at mange IT-systemer fejler.

Eksamen, DSDS, efterår 2007

Eksamen, DSDS, efterår 2008

Opgaver til modul 5 Access 97

OPC Access 3.0 opdatering via Stored Procedure

SQL for MySQL-begyndere

Modul 2 Database projekt Multimediedesign 3. semester Gruppe 3 IRF/TUJE

Ratingsystem i PHP og MySQL

Database for udviklere. Jan Lund Madsen PBS10107

Databaser Obligatorisk opgave 1

Gæstebog med validering opbygget med MySQL

Jayne Alice Jensen [Link til portfolio]

Databasesystemer. IT Universitetet i København 8. juni 2006

Kursus/workshop: SQL

Dataanalyse og databaser

Indholdsfortegnelse for kapitel 3

SQL-opgaver 5 løsning

Jørgen Koch. Access. Opgavehæfte

Projekt 1 Database. Cphbusiness Lyngby Multimediedesigner, 3. semester mul-a12e, gruppe 1

Pivottabeller, diagrammer og databehandling. Underviser: Nina Kirkegaard Schou Mobil

Eksamen, DSDS, forår 2009

Grænseflade til indberetning af institutionsmæssige stamoplysninger til EfterUddannelse.dk

I mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.

Word-9: Brevfletning i Word 2003

MICROSOFT OUTLOOK 2010

Tagwall med Php & MySQL

Database programmerings tips

Hjælp til MV-ID Administration

Vejledning til Tælleplansmodul

Opgave 1. Opret de 4 tabeller i FTSFrontend programmet. Indsæt mindst 3 forskellige tabelværdier i kunder, målerstatus, byer og regning..

Identifikation af planer der ikke findes i PlansystemDK vha. datasættet... 9

Tietgenskolen - Nørrehus. Data warehouse. Database for udviklere. Thor Harloff Lynggaard DM08125

Produktdokumentation

Foto-Applikation Dokumentation. Et Kod-i-Ferien projekt

Vejledning til Klubadministratorer

A11: Last Year s Exam

Rette bunkefejl i Legacy

Klik på denne knap for at komme til FaktaNet live! Forside. Siden der bl.a viser hvor mange nye/opdaterede projekter brugeren har.

Samspillet mellem databaser og kort styres af GeoCAD programmet GeoDB.

Eksempel på en database: studenter, kurser, eksamener

(fig.1. Eksempel på en almindelig entity)

ViKoSys. Virksomheds Kontakt System

Begrynder til at lave log ind system

WINDOWS LIVE MAIL

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Database. lv/

Introduktion til programmering

Betjeningsvejledning. for. UniRace

Videregående databaseprogrammering

G-MAIL (GOOGLE)

Brugervejledning. Sådan laves et opslag med avanc. søgning. December 2010

Daglig brug af JitBesked 2.0

DDElibra H Å N D B O G

Reeksamen, DSDS, forår 2008

DATABASE - MIN MUSIKSAMLING

Skriftlig eksamen i. Databaser. Vinter 2002/2003. Vejledende løsninger

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

HåndOffice Foreningsdata

Personnummerregister / CPR Importer

Få sin querystring til at fungere. (Nybegyndere)

Databaseteori. 19. Databaser. 20. Kartotek eller database. 21. Database

Projekt titel. Projekt navn. Gruppe medlemmer. Klasse/Gruppenummer. Databaseprojekt 1. Ferrari

SPORTI foreningsløsning. Foreningsadministration for klubber under DI 15. marts 2009 Tirsbæk Slot, Vejle

Simon Elgaard Sørensen, 8. december 2010

MsSQL: Basal performance tuning, part 1

Skriftlig opgave. Designtanker i database-nære systemer

Transkript:

Databaser... 2 Tabeller... 2 Redundans... 3 Første regel... 4 Anden regel... 4 Tredje regel... 5 Relationer... 5 Opskrift... 6 SQL sætninger til at oprette tabeller... 7 SQL sætninger til at indsætte data... 8 Indsæt dato... 9 Access... 9 SQL sætninger til at oprette relationer... 10 SQL sætninger til at trække data ud af tabeller... 11 Masker... 12 Sortere... 12 Jokertegn... 12 Udtræk fra flere tabeller... 12 Join... 13 Sammenlignings operatorer... 13 Top 5 nyheder... 14 Sub select (Select inden i Select)... 14 Side 1 af 14

Databaser Der findes rigtig mange databaser på markedet, men i Internet sammenhæng er det mest disse tre du ser: MSAccess Microsoft Det er en nem måde at komme i gang på, der er nogle rigtig gode værktøjer som alle er visuelle. Access følger med når man køber Office pakken. Kører i Windows MSSql server Microsoft Det er storebroderen som er en rigtig database. Den skal købes særskilt. Kører i Windows. Den kan hentes gratis i en light udgave hos Microsoft. mysql MySql AB Det er en gratis database som efterhånden har samme muligheder som en betalt database. Kører på flere platforme bl. a. Linux og Windows. Tabeller I databaser ligger data organiseret i tabeller, lige som du ser dem i et regneark: Kolonner hedder felter i en database og en enkelt række kaldes for en post (record), som du kan se er det medlemstabellen der er vist og den indeholder 3 medlemmer. Alle medlemmer har et medlemsnummer som er unikt. Der er ikke og må ikke være to medlemmer med det samme nummer, på den måde kan man bruge medlemsnummeret som en nøgle (primary key) til at finde frem til et medlem. Her ser du den samme tabel i Access: Læg mærke til at der er et nøgle symbol ud for Medlemnr, det er fordi det er nøglen i denne tabel. Læg også mærke til at feltet er af typen tekst, selv om det indeholder et tal. Side 2 af 14

Alt hvad der ikke skal regnes på, eller er en dato/tid, kan lige så godt være tekst. Sådan ser tabellen ud når man åbner den: Sådan ser det ud i mysql Redundans Redundans betyder unødig gentagen information og et af målene med at lægge data ind i en database, er at undgå redundans. Hvis du er tilfreds med at have en liste over medlemmer som den du ser foroven, er der ingen grund til at bruge en database, et regneark eller en tekstfil er fuldt tilstrækkelige. Denne måde at opbevare data på kaldes for flad fil (flat file). Men hvis vi også ønsker at registrere hvilke hold de enkelte medlemmer er tilmeldt, begynder det at blive lidt grimt. MedlemNr Fornavn Efternavn Adresse Postnr Bynavn Hold 121212 Bent Fabrik Fabriksvej 11 4000 Roskilde Fodbold 123123 Ejner Baunehøj Baunehøj 23 3600 Frederikssund Fodbold 131313 Erik Fort Fortvej 34 4000 Roskilde Håndbold 123123 Ejner Baunehøj Baunehøj 23 3600 Frederikssund Håndbold 121212 Bent Fabrik Fabriksvej 11 4000 Roskilde Håndbold 121212 Bent Fabrik Fabriksvej 11 4000 Roskilde Svømning 131313 Erik Fort Fortvej 34 4000 Roskilde Svømning For hvert hold et medlem er tilmeldt, er du nødt til at skrive en ekstra linie, det betyder også at det er umuligt med dette system, at oprette et nyt hold hvis der ikke er en tilmelding og at et hold vil forsvinde, når der ikke længere er nogen tilmeldte. Side 3 af 14

Men det bliver meget værre, for vi skal jo også holde styr på, at medlemmerne betaler kontingent for hver måned. Det bliver en linie ekstra pr. medlem pr. hold pr. måned Regnestykket kunne være 500 medlemmer der i gennemsnit er tilmeldt 3 hold. På et år bliver det 500 x 3 x 12 = 1800 linier. Medlemstabellen vil så fylde 1800 poster i stedet for 500. Det er rigtig meget at holde styr på. Løsningen er at lave en database og få lagt data ud i de tabeller hvor de hører hjemme, dette kaldes for datamodellering. Hold hører f. eks hjemme i sin egen tabel: HoldID Holdnavn Traeningsdag Pris Stednavn 1 Fodbold junior mandag 300 Klubhuset 2 Håndbold tirsdag 310 Sportshallen 3 Svømning onsdag 330 Svømmehallen 4 Tennis torsdag 320 Sportshallen 5 Fodbold senior fredag 350 Klubhuset Figur 1 Alle tabeller SKAL have en nøgle, det er praktisk at kalde den det samme som tabellen, efterfulgt af ID. Her der brugt en talværdi genereret af en automatisk tæller, både Access og mysql har den slags indbygget, så det kan overlades helt til databasen. Data skal være så opsplittede som muligt, det var derfor at der i medlemstabellen er to felter (Fornavn og Efternavn) i stedet for et felt (Navn). Det er nemt at samle felter, men det kan være umuligt at opsplitte dem, derfor er det smart at opsplitte dem fra start. Feltnavne må ikke indeholde andet end bogstaver og tal. De danske tegn (æøå) regnes ikke for bogstaver, så de må ikke bruges. Første regel Alle tabeller skal have en nøgle (primær nøgle) Anden regel Alle felter skal være afhængige af denne nøgle og kun denne nøgle Hvis du kigger på Figur 1 Sted kolonnen kan du se at dette ikke er tilfældet her. Sportshallen peger på 2 og 4 som primærnøgle. Her er der altså redundans, løsningen er at oprette en selvstændig tabel for steder og tage primærnøglen herfra og lægge ind i Hold tabellen. HoldID Holdnavn Traeningsdag Pris StedID 1 Fodbold junior mandag 300 1 2 Håndbold tirsdag 310 2 3 Svømning onsdag 320 3 4 Tennis torsdag 310 2 5 Fodbold senior fredag 350 1 Figur 2 StedID Sted 1 Klubhuset 2 Sportshallen 3 Svømmehallen Ud for den post der hedder Håndbold, vil databasen finde en fremmednøgle (StedID) der har værdien 2 og som peger på stedtabellen. Databasen vil så slå op i stedtabellen ud Side 4 af 14

for 2 og læse at navnet er Sportshallen. Alt dette er noget databasen klarer automatisk, hvis først tabellerne er blevet sat op på den rigtige måde. Tredje regel Hvis du møder redundante data skal du lægge dem ud i en ny tabel og så skal du hægte tabellerne sammen igen med en pegepind (relation) Læg mærke til at tabellerne i figur 2 nu kun indeholder lige nøjagtig de data som de skal. Informationer om Hold ligger i Holdtabellen og informationer om Steder ligger i Stedtabellen. Relationer Der findes tre typer: En til en (1 n 1) Det er en ret sjælden relation så den bliver ikke gennemgået En til mange ( 1 n M) Det er den mest almindelige Mange til mange (M n M) Det forekommer også hyppigt. For at finde ud af hvilken relation du står overfor, skal du kigge på hvordan tingene hænger sammen: Hold og sted: Et hold opholder sig et sted og kun et sted. Et sted kan have nul, et eller flere hold. Dette er en en til mange relation med sted på 1 siden. Det er primærnøglen fra sted tabellen, der skal optræde som fremmednøgle i holdtabellen. I sted tabellen vil primærnøglen (StedID), forekomme 1 gang og kun en gang. I hold tabellen vil fremmednøglen (StedID), kunne forekomme flere gange, der kan godt være flere forskellige hold på samme sted. Medlem og hold: Et medlem kan være tilmeldt nul, et eller flere hold. Et hold kan bestå af nul, et eller flere medlemmer. Der er altså en mange til mange relation imellem medlem og hold Dette klares ved at lave en samletabel som indeholder to fremmednøgler; nemlig en primærnøgle fra hver af de to tabeller: Medlemnr Navn 121212 Bent Fabrik Medlemnr HoldID 121212 1 121212 2 121212 3 123123 1 123123 2 131313 2 131313 3 HoldID Holdnavn 1 Fodbold junior 2 Håndbold 3 Svømning Ud fra denne tabel kan du læse at medlem 121212 (Bent Fabrik) går på hold 1, 2 og 3 (Fodbold junior, Håndbold og Svømning) Alt dette er noget databasen tager sig af, brugerne ser aldrig nøglerne og du skal kun kende dem for at vide hvordan systemet fungerer. Side 5 af 14

Opskrift 1. Find ud af hvilke data din database skal indeholde 2. Tegn en skitse 3. Opret tabellerne og læg lidt data i. 4. Undersøg om der er redundante data. 5. Omstrukturer evt. tabellerne 6. Lav forespørgsler for at trække data ud 1. Skriv alt ned hvad du vil kunne trække ud, opsplit så meget som muligt Om medlemmer: Navn (Fornavn, Efternavn) Adresse1 Adresse2 (hvis det hele ikke kan stå i et felt) Postnr Bynavn Telefon Mobil Email Fødseldag (Hvis du vil sige tillykke) osv alt hvad der har med medlemmet at gøre Om hold: Holdnavn Sport (Fodbold, Håndbold osv) Træningsdag Fra klokken til klokken Sted Pris pr. måned osv alt hvad der har med holdet at gøre Om kampe Om stævner Om arrangementer osv alt hvad du gerne vil kunne se Side 6 af 14

2.Tegn en skitse Tegn en skitse hvor du laver en firkant for hver ting og som det første skriver navnet på den primære nøgle. PK betyder primary key (primær nøgle) FK betyder foreign key (fremmed nøgle). I den tredje kolonne kan du skrive hvilken type feltet skal være. Der findes en standard der siger at tabelnavne altid starter med tbl, så man kan se at det er en tabel. tblmedlem Medlemnr PK Tekst Fornavn Tekst Efternavn Tekst osv 3. Opret tabeller I både Access og mysql findes der udmærkede grafiske værktøjer til at oprette tabeller, men tabeller kan også oprettes med SQL sætninger, fordelen ved at gøre det på denne måde er at det kan gøres i alle databaser og hvis man sletter en tabel, kan den hurtigt oprettes igen med en SQL sætning, der ligger gemt som en tekst fil. Holdtabellen kan se sådan ud: Access mysql HoldID PK Autonummer Autonummer Holdnavn Tekst(45) VARCHAR(45) Traeningsdag Tekst(45) VARCHAR(45) FraTid DatoTid Time TilTid DatoTid Time Pris Tal (Reelt) Real StedID FK Tal (Langt heltal) Integer Felttyper Du kan se at der er forskellige navne på felttyper i Access og mysql. I dette tilfælde er de ens selv om de har forskellige navne. SQL sætninger til at oprette tabeller I Access ser SQL udtrykket sådan ud: CREATE TABLE tblhold ( HoldID AUTOINCREMENT NOT NULL, HoldNavn CHAR (45) NOT NULL, Traeningsdag CHAR (45) NOT NULL, FraTid TIME, TilTid TIME, Pris REAL, StedID INTEGER NOT NULL, PRIMARY KEY(HoldID)); Side 7 af 14

I mysql skrives det sådan: CREATE TABLE tblhold ( HoldID INTEGER NOT NULL AUTO_INCREMENT, HoldNavn VARCHAR(45) NOT NULL, Traeningsdag VARCHAR(45) NOT NULL, FraTid TIME, TilTid TIME, Pris REAL, StedID INTEGER NOT NULL, PRIMARY KEY(HoldID)) Engine = InnoDB; Der er ikke den store forskel på, hvad der skal skrives i de to databaser. Lav en tabel Tabelnavn(Feltnavn Type, Feltnavn Type,..osv.., Primær nøgle (Feltnavn)); NOT NULL betyder at feltet skal være udfyldt. SQL sætninger til at indsætte data I Access kan du skrive INSERT INTO tblhold ( HoldNavn, Traeningsdag, FraTid, TilTid, Pris, StedID ) VALUES ("Fodbold","mandag","10:00","12:00",130.00,1); Access kan kun håndtere indsætning af en post ad gangen. I mysql derimod kan du skrive en længere sætning INSERT INTO tblhold ( HoldNavn, Traeningsdag, FraTid, TilTid, Pris, StedID ) VALUES ("Fodbold juniorer","mandag","10:00","12:00",130.00,1), ("Håndbold","tirsdag","16:00","18:00",120.00,1), ("Tennis","onsdag","14:00","15:00",110.00,1); Det var tre poster der blev lagt ind på en gang. Indsæt i Tabelnavn (Feltnavn, Feltnavn, osv) Værdierne ( Tekstværdi, Tekstværdi, Tid, Tid,Tal,Tal); Tekst skal være omkranset af citationstegn (gåseøjne). Læg mærke til at det er et punktum der er decimal adskiller. SQL sætninger er med engelsk sprogbrug (syntaks). Side 8 af 14

Indsæt dato Access I Access er datoformatet mm-dd-yyyy og skal være omkranset af nummertegn (#) INSERT INTO tblarrangement ( ArrFraDato ) VALUES (#1/16/2006#); Her bliver den 16 januar 2006 indsat i tabellen tblarrangement i feltet ArrFraDato INSERT INTO tblarrangement ( ArrFraDato ) VALUES (Date()); Her er det dags dato der bliver indsat. mysql I mysql er datoformatet yyyy-mm-dd og skal være omkranset af citationstegn ( ) Insert Into tblarrangement (ArrFraDato) values ('2006-01- 16'); Her bliver den 16 januar 2006 indsat i tabellen tblarrangement i feltet ArrFraDato Insert Into tblarrangement (ArrFraDato) values (curdate()); Her er det dags dato der bliver indsat. 4. Undersøg om der er redundante data Medlemstabellen ser sådan ud: MedlemNr Fornavn Efternavn Adresse Postnr Bynavn 121212 Bent Fabrik Fabriksvej 11 4000 Roskilde 123123 Ejner Baunehøj Baunehøj 23 3600 Frederikssund 131313 Erik Fort Fortvej 34 4000 Roskilde By navn er ikke afhængig af primær nøglen, det er afhængig af hvad der står som postnummer, så det skal ud i sin egen tabel; 5. Omstrukturer evt. tabellerne tblpostnr Postnr Bynavn 4000 Roskilde 3600 Frederikssund tblmedlem MedlemNr Fornavn Efternavn Adresse Postnr 121212 Bent Fabrik Fabriksvej 11 4000 123123 Ejner Baunehøj Baunehøj 23 3600 131313 Erik Fort Fortvej 34 4000 Side 9 af 14

tblpostnr handler kun om det der har med postnumre at gøre og tblmedlem handler kun om det der har med medlemmer at gøre. Der findes ikke mere redundante data i tabellerne. SQL sætninger til at oprette relationer De pegepinde der er tegnet mellem tabellerne hedder relationer og de sikrer at tabellerne hænger sammen igen og at data er konsistente. Det betyder at der f.eks ikke i medlemstabellen kan skrives et postnummer der ikke eksisterer og at et postnummer ikke kan slettes, så længe det er i brug i medlemstabellen eller stedtabellen. I Access kan man få et billede frem der viser tabellerne og deres relationer. I dette tilfælde mangler der nogle felter, men alle primær og fremmed nøgler er taget med: De felter som er fede og hvor der står et 1 ud for er primærnøglerne, de kan kun forekomme en gang. I medlemstabellen kan feltet tblmedlem.medlemnr kun have værdien 121212 en gang. De steder hvor der er et liggende 8 tal er fremmed nøglerne, her kan den samme værdi forekomme mange gange. tblmedlem_hold.medlemid vil have værdien 121212 for hvert hold medlemmet er tilmeldt. I Access er det langt det hurtigste at bruge den grafiske brugerflade til at lave relationerne med. I mysql kan du skrive: ALTER TABLE tblsted ADD CONSTRAINT FK_tblsted_1 FOREIGN KEY FK_tblsted_1 (Postnr) REFERENCES tblpostnr (Postnr) ON DELETE RESTRICT ON UPDATE RESTRICT; Ændre tabel Tabelnavn Tilføj Constraint Constraintnavn Constrainttype Constraintnavn (Feltnavn) Peger på Tabelnavn (Feltnavn) Ved sletning begræns Ved opdatering begræns Side 10 af 14

Efter som tabellen eksisterer skal der bruges ALTER for at ændre tabellen, så skal relationen have et navn og pege på et felt i en anden tabel. ON DELETE RESTRICT og ON UPDATE RESTRICT betyder at man ikke får lov til at slette et postnummer, eller ændre på et postnummer, hvis det er i brug i medlemstabellen eller stedtabellen. I Access kan du skrive: ALTER TABLE tblsted ADD CONSTRAINT FK_tblsted_1 FOREIGN KEY (Postnr) REFERENCES tblpostnr (Postnr); 6. Træk data ud fra tabeller SQL sætninger til at trække data ud af tabeller Hvis du vil prøve at trække data ud af tabellerne, skal alle tabeller være oprettet og der skal være indsat lidt data i hver tabel. For at komme der til, kan du hente de nødvendige filer på hjemmesiden. Hvis du vil trække alle data ud af medlemstabellen kan du skrive SELECT * FROM tblmedlem; Så får du alle felter - for stjernen betyder alle - og alle rækker Hvis det kun er bestemte felter du vil se, kan du skrive SELECT Fornavn, Efternavn FROM tblmedlem; så er det kun de to felter der bliver vist i resultatet. Hvis du vil have fornavn og efternavn til at komme ud i et kan du samle dem. Access: SELECT Fornavn & " " & Efternavn AS Medlemnavn, Adresse1, Adresse2, Postnr FROM tblmedlem; mysql: SELECT CONCAT(Fornavn, ' ', Efternavn) as Medlemnavn, Adresse1, Adresse2, Postnr FROM tblmedlem; Teknikken hedder concatenere, læg mærke til at feltet får et andet navn fordi der står AS Medlemnavn. Hvis det ikke er alle rækker du vil se skal der en begrænsning på: SELECT Fornavn, Efternavn, Adresse1, Adresse2, Postnr FROM tblmedlem WHERE Fornavn Like "t%"; Side 11 af 14

Udvælg Feltnavn, Feltnavn, osv Fra Tabelnavn Hvor Feltnavn Ligner maske; Masker Når du bruger LIKE kan du bruge masker. Her er det "t%" det betyder alle rækker hvor fornavn starter med t, hvis du skriver %t% betyder der alle der indeholder et t og hvis du skriver %t betyder det alle der slutter på t. Det er atter en god grund til at have felterne i databasen som tekstfelter. Sortere Hvis du vil have sorteret medlemslisten efter efternavn skal du skrive: SELECT Fornavn, Efternavn, Adresse, Postnr FROM tblmedlem ORDER BY Efternavn; Hvis du vil sortere først efter efternavn og derefter fornavn skal du skrive sådan: SELECT Fornavn, Efternavn, Adresse, Postnr FROM tblmedlem ORDER BY Efternavn, Fornavn; Sorteringsrækkefølgen der den rækkefølge du angiver i ORDER BY. Jokertegn % er et jokertegn der gælder for et ukendt antal tegn. Medlemsnr er et tekstfelt og de betyder at du kan søge med masker. WHERE Medlemnr Like "12%"; så får du alle medlemmer hvis nummer starter med 12, hvis medlemsnummeret var et tal og ikke tekst, ville du være tvunget til at lave en nøjagtig søgning: WHERE Medlemnr = 121212; Udtræk fra flere tabeller Hvis du vil lave et udtræk fra medlemstabellen, hvor der også er et bynavn med, er du nødt til at trække data fra to tabeller. Dette gøres ved at skrive hvilke felter i de to tabeller, der har relation til hinanden. SELECT tblmedlem.medlemnr, tblmedlem.fornavn, tblmedlem.efternavn, tblmedlem.adresse1, tblmedlem.adresse2, tblmedlem.postnr, tblpostnr.bynavn FROM tblmedlem, tblpostnr WHERE tblpostnr.postnr = tblmedlem.postnr; Side 12 af 14

Det der binder tabellerne sammen er feltet Postnr, som findes i begge tabeller: WHERE tblpostnr.postnr = tblmedlem.postnr; Når du sætter to tabeller sammen, vil der findes felter med samme navn i begge tabeller, så derfor er det nødvendigt at skrive det på formen tabelnavn.feltnavn. Yderligere skal navnene på tabellerne med: FROM tblmedlem, tblpostnr Hvis du skal begrænse søgningen, skal du udvide WHERE delen: WHERE tblpostnr.postnr = tblmedlem.postnr AND tblmedlem.postnr > 3000; Det giver alle medlemmer som bor et sted, hvor postnummeret er større end 3000. Join Det samme kan opnås ved at bruge en INNER JOIN SELECT tblmedlem.medlemnr, tblmedlem.fornavn, tblmedlem.efternavn, tblmedlem.adresse1, tblmedlem.adresse2, tblmedlem.postnr, tblpostnr.bynavn FROM tblpostnr INNER JOIN tblmedlem ON tblpost.postnr = tblmedlem.postnr; Sammenlignings operatorer LIKE Lige som. Kan bruges på tekst sammen med joker tegn > Større end. Kan bruges på tekst, tal og datoer < Mindre end. Kan bruges på tekst, tal og datoer <> Forskellig fra. Kan bruges på tekst, tal og datoer BETWEEN.. AND Imellem. Kan bruges på tekst, tal og datoer = Lig med. Kan bruges på tekst, tal og datoer >= Større end eller lig med. Kan bruges på tekst, tal og datoer <= Mindre end eller lig med. Kan bruges på tekst, tal og datoer IN Findes i en samling Side 13 af 14

Top 5 nyheder Hvis du vil vise de 5 seneste nyheder, skal du sortere dem i faldene orden efter dato og sætte en yderligere begrænsning på: Access SELECT TOP 5 Overskrift, Broedtekst, OprettetAf FROM tblnyhed ORDER BY OprettetDato DESC; mysql SELECT Overskrift, Broedtekst, OprettetAf FROM tblnyhed ORDER BY OprettetDato DESC LIMIT 5; Sub select (Select inden i Select) Ideen i en sub select er at have en indre Select, der leverer data til where delen af af en ydre select. SELECT Fornavn, Efternavn FROM tblmedlem WHERE MedlemID IN (SELECT tblkontingent.medlemid FROM tblkontingent WHERE tblkontingent.skyldbeloeb > tblkontingent.betaltbeloeb); Den indre select sætning finder alle der skylder et beløb: SELECT tblkontingent.medlemid FROM tblkontingent WHERE tblkontingent.skyldbeloeb > tblkontingent.betaltbeloeb disse (nul, et eller flere) MedlemID er bliver så brugt i den ydre Select, ved hjælp af operatoren IN. Side 14 af 14