Introduktion til SQL



Relaterede dokumenter
Introduktion til SQL

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

EXCEL 2011 TIL MAC GODT I GANG MED PETER JENSEN GUIDE VISUEL

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

Introduktion til programmering

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

Hvorfor skal vi bruge objekt orienteret databaser?

Introduktion til SQL queries

Excel til ipad Kom i gang og videre med. Martin Simon. Forlaget TextMaster ISBN: E-bogsudgave 2014

Jørgen Koch. och. Access. Normalisering m.v.

SQL for MySQL-begyndere

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.

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

HOFTEALLOPLASTIK - DATAUDTRÆK OG IMPORT TIL EXCEL

Jørgen Koch. Access. Opgavehæfte

Internet. Komplet featureliste. Aesiras - integreret Regnskab, Handel og Internet

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

1. Basal select med (stjerne)

DB undervisning 01-01

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

Database for udviklere. Jan Lund Madsen PBS10107

R E D C A P M A N U A L. Importér data til REDCap fra CSV-fil. Opbyg din eksisterende database i REDCap Version 1.0

SQL - Login, Role, Schema og User

Funktions opdatering ASPECT4 QueryManager (B=fejl, S=support/Info, T=Opgave, W=Releaseønske)

Hjælp til MV-ID Administration

Skriftlig opgave. Designtanker i database-nære systemer

Excel sortering-filtrering

LaserNet v6.6 Release Nyhedsbrev

Umbraco installationsvejledning

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

Afhentning af ansøgninger til de videregående. Brugervejledning Optagelse.dk

Kontakthierarkier i. Denne vejledning beskriver forskellige måder, man kan præsentere sin myndighed over for borgere og virksomheder

Vejledning til CVRselvbetjeningsløsning

SecureAware Opfølgning Manual

Installation og Drift. Aplanner for Windows Systemer Version

Database design for begyndere

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

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

Skriftlig eksamen i kurset. Informationssystemer

Vejledning til udtræk fra UNIK (Version: UNIK Bolig 4)

e-conomic modul til Magento

How to do in rows and columns 8

TimeLog A/S. TimeLog Project. Standardfakturalinjeeksport. Thomas S. Gudmandsen. w w w. t i m e l o g. d k

Formål Kvikguide beskriver, hvordan du kan foretage filtrering og sortering i henholdsvis tabeller og rapporter.

ALMINDELIGT ANVENDTE FUNKTIONER

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

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

Login og introduktion til SEI2

TILLÆG TIL MANUAL Excel-indlæsning i Vvskatalogets administrationssystem

MatematiKan Et matematisk skriveværktøj for hele skoleforløbet

Fakturalinjeeksport Vejledning

Database optimering - Indeks

Måske kender du nogle af de tips og tricks, guiden indeholder, men så bliver du blot bekræftet i, at du gør det rigtige.

BRUG AF LISTEFUNKTIONER I EXCEL

Sammenknytning af listedata fra MUD til tabel i MapInfo (SVM-eksempel)

Introduktion til FileMaker Pro 4.0/4.1

Data lagring. 2. iteration (implement backend)

Tutorial: Annotationsliste

Databaseadgang fra Java

KMD Brugeradministration til Navision og LDV

1. Oprettelse 1.1 Salgsordre menu åbnes - klik på Salgsordrer. 1.2 Ny salgsordre oprettes. Kunde vælges ved at højreklikke på felt med kundenr.

En Kort Introduktion til Oracle

Afgrænsning/filtrering, sortering m.v. i Klienten

Huskesedler. Design og automatisering af regneark. Microsoft Excel 2013

Daglig brug af JitBesked 2.0

Installation af WeroShop 2.4 S

Casper Fabricius ActiveRecord. O/RM i Ruby on Rails

Manual til opsætning af Jit-klient version 1.0. Opsætning. Copyright Jit-Danmark Aps Find mere information på

GMAIL LÆR DET SELV GMAIL LÆR DET SELV

Denne vejledning dækker opsætning og brug af påmindelsesprofiler og påmindelser om manglende registrering af fravær på AMU kurser.

NemHandelsRegistret (NHR) - Bulk-funktionalitet

ONENOTE 2010 LÆR DET SELV

Integrationsinformationer skal nu udfyldes som nedenstående.

Vejledning til Teknisk opsætning

Introduktion til OPC Access

Bogfunktionen eller Slægtsbogen i FTM

Opgaveteknisk vejledning Word Tornbjerg Gymnasium 10. december 2015

Installationsvejledning til Pro/ENGINEER.

Navision Stat 7.0. CVR Integration. Overblik. Side 1 af april 2015 ØS/ØSY/MAG

Import af udtræk af ODIN-data i Access-databaser

vejman.dk WMS/WFS dokumentation vmgeoserver.vd.dk Maj 2013 Udgave 2.0

Brugervejledning Optagelse.dk. Afhentning af ansøgninger til de videregående uddannelser

5. OPSÆTNING DOKUMENTSKABELONER 5.1 TRIN

poedit og oversættelse af sprogfiler

Kursusbeskrivelse Microsoft Excel Grundkursus

Appelsiner, bananer og citroner

Elevadministrations modulet. Brugervejledning Optagelse.dk

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net

Undervisning Version 1.0 redigering af billeder til hjemmesiden

Transkript:

Introduktion til SQL

Introduktion til SQL 1. udgave, 1. oplag 2013 Copyright 2013 Libris Media A/S Forfatter: Bobby Henningsen Forlagsredaktion: Peter Wiwe og Louise Peulicke Larsen Omslag: Louise Peulicke Larsen Korrektur: Jan Tarbensen Dtp: Jan Tarbensen Tryk: AKA-PRINT a/s ISBN: 978-87-7853-228-2 Libris er en entreprenant udgivervirksomhed med rødder inden for medier, it og detail. Vi har en stærk national tilstedeværelse med mere end 450 distributionspartnere offline og over 30 digitale distributionspartnere. Rettighederne til vores udgivelser er solgt til mere end 14 lande. Siden 1994, hvor selskabet blev grundlagt, har vi i Danmark solgt mere end ni millioner hæfter og bøger. Om forfatteren Bobby Henningsen er uddannet EDB-assistent og certificeret som MCSA SQL Server 2012 og MCSE SQL Server 2012 Data Platform og Busienss Intelligence. Bobby arbejder professionelt som instruktør og konsulent med fokus på Microsoft SQL Server og har mere end 15 års erfaring. Læs mere på www.libris.dk og bliv ven med os på www.facebook.com/librismedia.

Indhold Introduktion...4 Introduktion til databaser...5 Databaser... 5 Tabeller... 5 Skemaer... 5 Rækker og kolonner... 5 Hent data...6 SELECT... 6 Hent flere kolonner...8 Sortering af data...9 ORDER BY... 9 Filtrering af data...12 WHERE... 12 Operatorer... 13 Filtre på datoer og tekster... 14 NULL-værdier... 18 Avanceret filtrering...19 Flere kriterier... 19 AND-operator... 19 OR-operator... 20 IN-operator... 21 NOT-operator... 22 TOP-operator... 24 Evalueringsrækkefølge... 27 LIKE-operatoren... 28 Beregnede felter...36 Konstanter som beregnede felter... 36 Brug af Alias... 37 Sammensætning af felter... 38 Matematiske beregninger... 40 Sortering og filtrering af data med beregnede felter... 42 Beregnede felter og datatyper... 44 Evalueringsrækkefølge af matematiske operatorer... 47 Funktioner...50 Funktioner til håndtering af NULL... 50 Funktioner til strengmanipulation... 52 Funktioner til manipulation af dato og tid... 56 Funktioner til konvertering og formatering af data... 58 Betingede beregnede felter... 61 Beregning af totaler...63 Aggregat-funktioner... 63 Aggregat-funktioner og NULL-værdier... 66 Aggregat-funktioner med unikke værdier... 67 Gruppering af data... 68 Underforespørgsler...77 Selvstændige underforespørgsler... 77 Filtrering af data med underforespørgsler... 77 Underforespørgsler som beregnede felter... 79 Korrelerede Underforespørgsler... 81 Join-forbindelser...84 Introduktion til relationel databaseteori... 84 Relationelle databaser... 84 Normalisering af data... 84 Eksempel på normalisering af database... 88 Implementering af relationer i database... 90 Oprettelse af Join-forbindelser... 91 Join-operatoren... 92 Join-forbindelser og kolonnenavne... 93 Brug af tabelalias... 93 Join-forbindelser med filtrering og sortering... 94 Join-forbindelser og flere tabeller... 95 Join-typer... 96 Kombinerede forespørgsler...102 Redigering af data...104 Indsættelse af data... 104 Opdatering af data... 106 Sletning af data... 111 Microsoft SQL Server Express...116 Installation af Microsoft SQL Server Express. 116 Værktøjer til oprettelse og eksekvering af forespørgsler...121 SQL Server Management Studio... 121 Appendiks A...124 Rækkefølge for datatyper ved implicit konvertering... 124 Appendiks B...125 Bitvise operatorer... 125 Appendiks C...126 Funktioner... 126 Appendiks D...127 Normalformer... 127 Appendiks E...128 Microsoft SQL Server Expressbegrænsninger... 128 3 LIBRIS

Introduktion SQL er en forkortelse for Structured Query Language og er et programmeringssprog designet til at håndtere data i relationelle database management systemer (RDBMS). Sproget omfatter en lang række funktionaliteter, såsom forespørgsler, redigering af data, oprettelse og redigering af objekter og adgang til data. SQL anses for at være et standardsprog, men der er stadig den dag i dag en række udfordringer i de store leverandørers tolkning af standarden, som gør, at løsninger ikke umiddelbart kan flyttes fra en platform til en anden. SQL er udviklet af IBM i starten af 1970 erne, og denne tidlige version havde navnet SEQUEL (Structured English Query Language). Det viste sig, at dette navn allerede var registreret, og det blev derfor ændret til SQL. Det første kommercielle system baseret på SQL introduceredes i slutningen af 1970 erne af ORACLE (dengang Relational Software, Inc.). Den mest udbredte brug af SQL er i forbindelse med forespørgsler og opdatering af data. Eksempler på dette er oprettelse af kunder i et fakturasystem, et udtræk, der viser det samlede salg, antallet af ordrer for en bestemt kunde eller virksomhedens samlede salg fordelt på varegrupper. Dette hæfte fokuserer på T-SQL, som er Microsofts dialekt af SQL. Dog vil en stor del af hæftets indhold være brugbart på andre platforme som f.eks. ORACLE. Hvem er dette materiale rettet mod? Dette materiale henvender sig til dig: Som ikke kender noget til SQL Som på en hurtig og nem måde vil lære SQL Som ønsker at kunne bruge SQL i dagligdagen til løsning af opgaver LIBRIS 4

Introduktion til databaser Databaser En database er ganske enkelt defineret som en samling af data. Det er vigtigt at have forståelse for en sådan for at kunne bruge SQL. En database er i realiteten en container og den er typisk gemt i filsystemet. En database i vores forstand er i virkeligheden at sammenligne med et arkivskab, bare i digitalt format. Tabeller Data i en database gemmes i tabeller. En tabel er struktureret og gemmer oplysninger om bestemte typer af data, f.eks. kunder, varer eller andre lister af oplysninger. Alle tabeller i en database har et unikt navn. Note Tabelnavne er omfattet af en række simple regler, hvilket blandt andet betyder at disse SKAL begynde med et alfanumerisk tegn. Ud over dette er der få begrænsninger. Dog er det anbefalet så vidt muligt at undgå brugen af specialtegn som @, $, /, blanke tegn osv. i navngivningen. Æ, ø og å kan bruges, men det er også anbefalet at undgå disse. Desværre er det langt fra alle leverandører og udviklere, der følger disse anbefalinger, og dette medfører ind imellem utilsigtede sideeffekter. SQLsproget kan godt håndtere tabelnavne med specialtegn og dette emne behandles senere. Skemaer Enhver tabel er gemt i et skema (Schema). Dette kan bedst sammenlignes med en folder. Teknisk betegnet kaldes det et namespace og er som sådan en samling af objekter. Det mest almindeligt brugte skema er dbo, men der findes en række andre prædefinerede skemaer, og det er desuden muligt at oprette egne. Note dbo er en forkortelse for database owner, men i relation til skemaer er denne betegnelse ikke relevant, da denne ikke på nogen måde har noget med ejerskab at gøre. dbo er dog specielt, da det som det eneste af de prædefinerede skemaer IKKE kan slettes. En dybere gennemgang af skemaer er uden for rammerne i dette hæfte. Rækker og kolonner Tabeller består af rækker og kolonner. En række består af mindst én kolonne og denne er tilknyttet en datatype, der ervalgt på baggrund af den type data, der skal gemmes i den pågældende kolonne. Disse datatyper er i en vis grad begrænsende idet de f.eks. er defineret til at indeholde et tal og derfor IKKE kan indeholde f.eks. tekst. Eksempler på kolonner i en tabel er f.eks. kundenr, navn og adresse. En tabel består af 0 eller flere rækker, og disse benævnes ofte som en post i tabellen. 5 LIBRIS

Hent data SELECT Den oftest konstruerede SQL-sætning er baseret på SELECTudtrykket. Denne bruges til at hente data fra en eller flere tabeller og anvendes til f.eks. at hente oplysninger om kunder og deres adresse, telefonnummer, afgivne ordrer osv.. I første omgang fokuseres der på udtræk fra en enkelt tabel. Syntaks SELECT kolonne FROM Tabel; Hent individuelle kolonner Det simplest mulige udtræk er en enkelt kolonne fra en enkelt tabel. Eksempelvis er følgende data registreret i tabellen Kunder: Kunder KundeID FirmaNavn Land ALFKI Alfreds Futterkiste Tyskland WOLZA Wolski Zajazd Polen BLAUS Blauer See Delikatessen Tyskland CACTU Cactus Comidas para llevar Argentina Dette udtryk returnerer en enkelt kolonne, KundeID fra tabellen Kunder, der er placeret i skemaet dbo. SELECT KundeID FROM dbo.kunder; ket returnerer alle rækker, og disse er hverken filtrerede eller sorterede. KundeID ALFKI WOLZA BLAUS CACTU Note Det er ikke nødvendigt at angive navnet på tabellens skema. Følgende udtryk fungerer også: SELECT KundeID FROM Kunder; LIBRIS 6

Hent data Når angivelse af skema undlades, er det op til systemet at håndtere dette. Den bruger, der eksekverer forespørgslen, er tildelt et standardskema, og systemet vil derfor automatisk lede efter den angivne tabel i dette skema. Når tabeller er placeret i skemaet dbo, er det ikke et problem, men bruges brugerdefinerede skemaer og en bruger har dette som standardskema risikeres at få uventede resultater, idet systemet altid omdirigerer forespørgslen til skemaet dbo, hvis den angivne tabel ikke findes under standardskemaet. Ved at angive både skema og tabelnavn sker dette ikke. Note Oprindeligt foreskriver syntaksen i SQL, at et udtryk afsluttes med ;, men det har i T-SQL været muligt at undlade dette, og det er stadig muligt at angive ovenstående udtryk som følger: SELECT KundeID FROM Kunder Denne mulighed forsvinder dog i en af de kommende versioner af Microsoft SQL Server, og derfor er semikolon brugt konsekvent i dette hæfte. Note SQL er pr. definition IKKE case sensitiv, hvilket betyder, at der normalt ikke skelnes mellem store og små bogstaver, således at select og SELECT fortolkes ens. Dog kan navnene på objekter, herunder tabeller, være case sensitive. Dette skyldes ene og alene opsætningen på den bagvedliggende Microsoft SQL Server. 7 LIBRIS

Hent flere kolonner Det er forholdsvis enkelt at returnere flere kolonner idet de ønskede kolonner blot skal angives og adskilles med et komma. Følgende SELECT-udtryk returnerer flere kolonner fra tabellen Kunder: SELECT KundeID, FirmaNavn FROM dbo.kunder; Ovenstående returnerer to kolonner, KundeID og Firmanavn, fra tabellen Kunder og genererer følgende : KundeID FirmaNavn ALFKI Alfreds Futterkiste WOLZA Wolski Zajazd BLAUS Blauer See Delikatessen CACTU Cactus Comidas para llevar Hent alle kolonner I visse tilfælde er det nødvendigt at returnere alle kolonner. Dette kan gøres hurtigt og nemt ved at bruge en asterisk (*) som jokertegn. SELECT * FROM dbo.kunder; Note Fordelen ved at bruge en asterisk (*) er, at det er hurtigt og nemt. Men generelt er det ikke anbefalet, da der er flere problemstillinger at være opmærksom på. Når forespørgslen fortolkes, laver systemet den om til en kolonneliste alligevel. Men et større problem er det faktum, at det oftest er sådan, at modtageren slet ikke er interesseret i alle kolonnerne, og der bruges derfor ressourcer på at returnere en række kolonner, som slet ikke er relevante. Et andet problem ved brugen af asterisk (*) kan opstå, hvis der i den underliggende tabel tilføjes, ændres eller slettes kolonner og der derfor opstår fejl, fordi et kolonnenavn f.eks. er ændret eller kolonner er slettet. Det er anbefalet altid at lave en kolonneliste og kun hente de kolonner, der er nødvendige. Note Hvor overraskende det end måtte forekomme, så er brugen af et udtryk som det ovenstående, hvor der anvendes en asterisk (*) en ikke uvæsentlig grund til, at systemer, som arbejder med data fra en SQL Server, ikke yder optimalt. LIBRIS 8

Sortering af data ORDER BY For at sortere et udtræk af data f.eks. efter postnr. eller alfabetisk efter efternavn bruges ORDER BY, hvor det angives, hvilke kolonner der skal sorteres efter. Syntaks SELECT kolonne FROM Tabel ORDER BY Kolonne 1, Kolonne 2, Kolonne 3,...n; Sortering efter en enkelt kolonne I det foregående returneredes data i umiddelbart tilfældig rækkefølge. Reelt set returneres data i den rækkefølge, de er lagret i i den underliggende tabel. Rækkefølgen af disse er løbende påvirket af opdateringer som har slettet data, indsat nye rækker eller redigeret eksisterende rækker. Det sidste kan i en række tilfælde medføre, at rækker skal flyttes rent fysisk. Derfor kan og bør det ikke forventes, at data returneres i en given rækkefølge medmindre det angives i forespørgslen med ORDER BY. SELECT KundeID, FirmaNavn FROM dbo.kunder ORDER BY KundeID; KundeID ALFKI BLAUS CACTU WOLZA FirmaNavn Alfreds Futterkiste Blauer See Delikatessen Cactus Comidas para llevar Wolski Zajazd Ovenstående sorterer data efter kolonnen KundeID i stigende orden. Det er standard, at sorteringer er stigende medmindre andet angives. Det kan angives eksplicit ved at bruge nøgleordet ASC (forkortelse for ascending), men dette er som sagt ikke nødvendigt. Ønskes sorteringen at være i faldende orden gøres dette ved at bruge nøgleordet DESC (forkortelse for descending). SELECT KundeID, FirmaNavn FROM dbo.kunder ORDER BY KundeID DESC; KundeID FirmaNavn WOLZA Wolski Zajazd CACTU Cactus Comidas para llevar BLAUS Blauer See Delikatessen ALFKI Alfreds Futterkiste 9 LIBRIS

Sortering af data Sorter efter flere kolonner Ofte er det nødvendigt at sortere efter flere kolonner. Ganske som i en gammeldags telefonbog, hvor personer var sorteret efter efternavn og derefter fornavn. Syntaksmæssigt er det forholdsvist nemt, da kolonnerne, der ønskes sorteret efter, angives kommasepareret. SELECT Land, FirmaNavn FROM dbo.kunder ORDER BY Land, Firmanavn; Land Argentina Polen Tyskland Tyskland FirmaNavn Cactus Comidas para llevar Wolski Zajazd Alfreds Futterkiste Blauer See Delikatessen Ovenstående sorterer dataudtrækket efter kolonnen Land og derefter kolonnen Firmanavn. I ovenstående er ikke angivet en sorteringsretning, og dermed sorteres data i stigende orden. Det er muligt at angive eksplicit for hver enkelt kolonne, hvorvidt de skal sorteres stigende eller faldende. SELECT Land, FirmaNavn FROM dbo.kunder ORDER BY Land, Firmanavn DESC; Land Argentina Polen Tyskland Tyskland FirmaNavn Cactus Comidas para llevar Wolski Zajazd Blauer See Delikatessen Alfreds Futterkiste Ovenstående sorterer dataudtrækket stigende efter land og derefter faldende efter firmanavn. Hvis sorteringen skal foretages faldende for begge kolonner, er det også nødvendigt at angive nøgleordet DESC efter kolonnen Land. SELECT Land, FirmaNavn FROM dbo.kunder ORDER BY Land DESC, Firmanavn DESC; Der er under normale omstændigheder ikke noget krav i det angivne SQL-udtryk om, at kolonner, der sorteres efter, SKAL indgå i kolonnelisten i SELECT-udtrykket. Der er dog få undtagelser, og dette gennemgås senere i hæftet. LIBRIS 10

Sortering af data Note Det er muligt at sortere efter kolonneposition, således at det foregående SQL-udtryk kan omskrives til følgende: SELECT Land, FirmaNavn FROM dbo.kunder ORDER BY 1 DESC, 2 DESC; Det er naturligvis hurtigere og simplere at skrive, men læsbarheden er ikke så god. Desuden vil ændringer i kolonnelisten kunne påvirke resultatet. Teknikken kan selvfølgelig ikke bruges, hvis der sorteres efter kolonner, der IKKE er i SELECT-udtrykkets kolonneliste. Note Der er teoretisk ikke nogen øvre grænse for antallet af kolonner i listen i ORDER BY. Dog er der en øvre grænse, der dikterer, at den sammenlagte størrelse af kolonnerne i denne liste maksimalt må være 8.060 bytes, og det begrænser reelt set antallet af kolonner. Note Det er kun få datatyper, der ikke understøttes i sorteringer. Det drejer sig om følgende datatyper: Text, ntext, Image og XML. De tre førstnævnte er i Microsoft SQL Server-sammenhæng forældede og udgår i en fremtidig version af SQL Server. Note Det kan forekomme, at data umiddelbart er sorteret, selv om det ikke eksplicit er angivet i det brugte SQL-udtryk. Dette skyldes, at den underliggende tabel er indekseret, og derfor er data sorteret i den underliggende tabel. Der er dog heller ikke i det tilfælde garanti for rækkefølgen, hvis der eksekveres et simpelt SELECT-udtryk med brug af asterisk (*) som angivet i det foregående. Dette kan skyldes fysisk fragmentering. Note Det kan opleves, at sorteringer af data ikke er korrekte i forhold til f.eks. æ, ø, å, store og små bogstaver og specialtegn. Følgende er et eksempel på et sådant resultat: FirmaNavn Ådalens Konfekture Alfreds Futterkiste Cactus Comidas para llevar En sådan fejl skyldes den underliggende Microsoft SQL Server, som er konfigureret med en forkert collation i forhold til det danske tegnsæt. Ovenstående sorteringsproblem kan løses ved at bruge nøgleordet COLLATE i SQL-udtrykket som i det følgende: SELECT FirmaNavn FROM dbo.kunder ORDER BY Firmanavn COLLATE Danish_Norwegian_ci_ai; 11 LIBRIS

Filtrering af data WHERE Det er ofte nødvendigt at begrænse mængden af data, der returneres i et udtræk, f.eks. for at vise kunderne i en bestemt by eller varer inden for et givent prisinterval. For at gøre dette anvendes udtrykket WHERE, som angives umiddelbart efter referencen til tabelnavnet. Syntaks SELECT kolonne FROM Tabel WHERE ORDER BY Kolonne, Kolonne,...n; Simpel filtrering Tabeller i en database indeholder ofte store mængder data, og som det er tilfældet med kolonner, er det ofte ikke nødvendigt at returnere alle rækker fra en tabel. For at begrænse dataudtrækket til en given delmængde af data angives et søgekriterium eller filter. Eksempelvis er følgende data registreret i tabellen Ordre: Ordre Ordrenr Ordredato KundeID Fragt Afsendelsesdato 10374 1996-12-05 00:00:00.000 WOLZA 7,00 1996-12-09 00:00:00.000 10501 1997-04-09 00:00:00.000 BLAUS 8,00 1997-04-16 00:00:00.000 10509 1997-04-17 00:00:00.000 BLAUS 6,00 1997-04-29 00:00:00.000 10521 1997-04-29 00:00:00.000 CACTU 6,00 1997-05-02 00:00:00.000 10582 1997-06-27 00:00:00.000 BLAUS 7,25 1997-07-14 00:00:00.000 10611 1997-07-25 00:00:00.000 WOLZA 9,00 1997-08-01 00:00:00.000 10614 1997-07-29 00:00:00.000 BLAUS 5,00 NULL 10643 1997-08-25 00:00:00.000 ALFKI 5,00 NULL SELECT Ordrenr, Ordredato, Fragt FROM dbo.ordre WHERE Fragt = 7; Ordrenr Ordredato Fragt 10374 1996-12-05 00:00:00.000 7,00 Ovenstående er et eksempel på simpel filtrering, hvor kun ordrer med en given fragtomkostning returneres. T-SQL understøtter en lang række muligheder for at filtrere, som gør det muligt at lave komplekse filtre ved brug af en række forskellige operatorer. LIBRIS 12

Filtrering af data Operatorer T-SQL understøtter en række sammenligningsoperatorer ud over det allerede viste lighedstegn (=). Tabellen viser en oversigt over alle sammenligningsoperatorerne. En række af disse er redundante og betyder det samme. Eksempelvis har operatorerne <> og!= samme funktionalitet. Operator Beskrivelse = Lig med <> Forskellig fra > Større end < Mindre end <= Mindre end eller lig med >= Større end eller lig med IS NULL NULL-værdier BETWEEN Mellem 2 værdier (Inklusive)!=,!<,!> Negation Brugen af en række af ovenstående operatorer adskiller sig ikke nævneværdigt fra hinanden syntaksmæssigt. Nedenstående er en række eksempler på brugen af de simple sammenligningsoperatorer. SELECT Ordrennr, Ordredato, Fragt FROM dbo.ordre WHERE Fragt > 7; Ordrenr Ordredato Fragt 10501 1997-04-09 00:00:00.000 8,00 10582 1997-06-27 00:00:00.000 7,25 10611 1997-07-25 00:00:00.000 9,00 Ovenstående returnerer alle ordrer, hvor fragtomkostninger er større end 7. Endnu et eksempel på brugen af sammenligningsoperator: SELECT Ordrenr, Ordredato, Fragt FROM dbo.ordre WHERE Fragt >= 7; Ordrenr Ordredato Fragt 10374 1996-12-05 00:00:00.000 7,00 10501 1997-04-09 00:00:00.000 8,00 10582 1997-06-27 00:00:00.000 7,25 10611 1997-07-25 00:00:00.000 9,00 ket returnerer alle ordrer med fragtomkostninger, der er 7 eller større. Ligeledes kunne operatoren!< bruges. 13 LIBRIS

Filtrering af data Slutteligt et eksempel på et negativt filter: SELECT Ordrenr, Ordredato, Fragt FROM dbo.ordre WHERE Fragt < > 7; Ordrenr Ordredato Fragt 10501 1997-04-09 00:00:00.000 8,00 10509 1997-04-17 00:00:00.000 6,00 10521 1997-04-29 00:00:00.000 6,00 10582 1997-06-27 00:00:00.000 7,25 10611 1997-07-25 00:00:00.000 9,00 10614 1997-07-29 00:00:00.000 5,00 10643 1997-08-25 00:00:00.000 5,00 Ovenstående returnerer alle ordrer, hvor fragtomkostninger IKKE er 7. Ligeledes kunne operatoren!= være brugt. Note Decimaladskilleren i decimaltal angives altid med et. i T-SQL og ikke med et,. Uanset om opsætningen i det givne system er indstillet til dansk, ville brugen af et komma være i konflikt med sprogets syntaks. Derfor angives decimaltal altid som i det følgende: 0.56 3.44 Osv. Note Som med sortering er der IKKE noget krav om, at den eller de kolonner, der filtreres på, SKAL være angivet i SELECT-udtrykkets kolonneliste. Dette kan på den ene side gøre, at resultatet ikke er umiddelbart gennemskueligt, men på den anden side er det ofte særdeles brugbart, da kolonnen eller kolonnerne, der filtreres på, ikke nødvendigvis er interessante at have med i dataudtrækket. Filtre på datoer og tekster Brug af filtre, der inkluderer datoer eller tekststrenge, er ikke ualmindelige og er også i de fleste tilfælde simple at anvende. I T-SQL angives både datoer og strenge med det, der på dansk kaldes et primtegn ('). På engelsk hedder det single quote. Det er vigtigt at huske, at T-SQL bruger netop dette og ikke anførselstegn ("), som man ser i en række andre sprog. Her er et eksempel på et filter med en tekststreng: LIBRIS 14