I denne serie lektioner lærer du, hvordan du forespørger Microsoft SQL Server ved hjælp af SQL SELECT-anvisningen. Når du har læst denne lektion, vil du kunne:
- Identificere alle tabeller i en SQL Server SSMS-database (SQL Server Management Studio).
- Forstå, hvordan du opregner en tables kolonner.
- For at få vist kolonner, oprette tekst- og matematiske resultater og indstille distinkte værdier skal du bruge SQL SELECT-anvisningen.
- Lær nogle teknikker til at fejlfinde dine kommandoer og rette fejl.
Vigtigt! Følg eksemplerne i din database og gør dem. Hvis du ikke allerede har gjort det, skal du tilmelde dig min guide til at komme i gang med SQL Server. Du kan få vejledning om download af den gratis software og eksempeldatabase.
Forstå din database
En simpel select-anvisning består af to dele. Den første del beskriver, hvilke kolonner vi ønsker at få vist, og den anden del beskriver, hvilken tabel vi får vist. En select-anvisning ser således ud:
SELECT LastName FROM Person.Person
I dette eksempel er LastName kolonnen og Person tabellen. Kolonnerne kommer efter nøgleordet SELECT, mens tabellen indledes med FROM.
Du undrer dig måske over, hvorfor tabellen Person omtales som Person. Person i ovenstående erklæring. Det har noget at gøre med den måde, hvorpå objekter er organiseret på serveren. Databasen kan opfattes som en række indlejrede containere. Containerne er:
- Server/Instance – Den instans af SQL Server, der kører på computeren.
- Databaser – En eller flere databaser oprettet på instansen.
- Skemaer – En måde at gruppere tabeller og andre databaseobjekter logisk.
Det fuldt kvalificerede navn for en tabel er …. Så hvis vi virkelig ville være eksplicitte, kunne vi bruge noget som
SELECT LastName FROM ...
til at lave en forespørgsel. Heldigvis skriver vi typisk forespørgsler inden for rammerne af én database, så vi behøver kun at angive Schema og TableName på følgende måde:
SELECT LastName FROM Person.Person
Men hvad med parenteserne ? De bruges, hvis din tabel har et mellemrum i navnet. Så
SELECT Last NameFROM Person.Person Table
ville fejle
SELECT FROM Person.
Er OK. Mit råd? Hvis du får lov til at navngive dine egne tabeller, så lad være med at bruge mellemrum, parenteser er grimme! Hvis du er nødt til det, så gør som Oracle-folkene og brug understregninger. Person_Table er meget nemmere at læse end , personligt foretrækker jeg PersonTable.
Brug af Object Explorer
For at kunne skrive forespørgsler skal du vide, hvilke tabeller og kolonner der er tilgængelige i dine databaser. Når du bruger SSMS (SQL Server Management Studio), kan du blot udvide databasens mappe med tabeller for at få en liste over alle de tabeller, der findes i din database. Når du finder en tabel, som du gerne vil vide mere om, skal du blot klikke på tabellens navn for at udvide det og derefter på mappen med kolonner for at få vist alle kolonnerne.
Kørsel af forespørgsler i SSMS
Hvor vi kommer for langt, vil jeg vise dig, hvordan du kan køre en forespørgsel i SSMS. Det er faktisk meget nemt. Når du har startet SQL Server Management Studio, skal du vælge din database. Klik derefter på knappen New Query (Ny forespørgsel), der er placeret i den øverste værktøjslinje. Dette viser et forespørgselsvindue til højre. Du kan skrive hvad som helst i dette vindue, da det grundlæggende er en teksteditor. Klip og indsæt eller indtast en SQL-anvisning, og klik derefter på Execute (Udfør) for at køre anvisningen. Resultaterne vises i den nederste del af vinduet, og eventuelle meddelelser, f.eks. fejl, vises i fanebladet Meddelelser.
Vælg flere kolonner
For at vælge mere end én kolonne skal du blot adskille dem med et komma. For eksempel,
SELECT FirstName, LastNameFROM Person.Person
giver både fornavn og efternavn som et resultat. Hvis du undrer dig over, at du kan blande kasus, når du skriver forespørgsler. Det vil sige
SELECT FirstName, LastNameFROM Person.Person
Fungerer lige så godt som
select FirstName, LastNamefrom Person.Person
Tip! En almindelig konvention er at skrive alle nøgleord med stort. Nogle DBA’er føler, at det er nemmere at læse kommandoer skrevet på denne måde. Personligt gør jeg ikke det, men til denne blog vil jeg prøve 🙂
Rename SQL Columns
Du kan omdøbe de kolonner, der er resultatet af dine select statements. Det gør du ved at bruge AS-anvisningen på følgende måde:
SELECT LastName as SirNameFROM Person.Person
Dette viser resultatet som “SirName” i stedet for “LastName”. Dette er en fin funktion ud fra et forfængelighedssynspunkt, men det er også praktisk, når vi ønsker at returnere et beregningsresultat og skal give det et navn. Antag f.eks. at du ønsker at returnere LastName med store bogstaver. Du ville kunne skrive
SELECT UPPER(LastName) AS SirNameFROM Customers
UPPER er kendt som en funktion. SQL Server har mange funktioner, som du kan bruge til at udføre mange typer beregninger. Vi vil se nærmere på dem alle senere, men indtil videre skal du vide, at du kan kæde flere funktioner sammen for at skabe et komplekst udtryk for at udstede dataene, som du har brug for det.
Komplekse kolonneudtryk
Vores medarbejdertabel indeholder separate felter for fornavn og efternavn. Lad os antage, at HR-afdelingen har brug for at se et fuldt navn med store bogstaver. Hvordan ville du gøre dette? Enkelt! Du kunne skrive
SELECT UPPER(FirstName) + ' ' + UPPER(LastName) AS FullNameFROM Person.Person
Denne erklæring ser måske kompliceret ud, men når vi bryder den ned, vil du se, at den blot består af en række enkle elementer.
- Som du lige har lært, bruges UPPER til at returnere den store bogstavsangivelse for en kolonne.
- Plus-tegnet fortæller SQL, at det skal kombinere to værdier sammen.
Alt, hvad der står i anførselstegn (‘), vises bogstaveligt talt, som det er. I vores tilfælde betyder ‘ ‘ at der skal udgives et enkelt mellemrum. Hvis du læser vores udtryk på engelsk, ville det lyde som “Take the uppercase of the FirstName combine it with a space and then add the uppercase of LastName to it.”
Do Math with SQL!
Du kan også få SQL til at lave matematiske tricks for dig. Den kan lave nogle ret komplicerede regnestykker, hvis du giver den lov til det. I dag vil jeg vise dig, hvordan du kan gange to tal, men du kan lige så godt addere, trække fra eller dividere. Senere vil vi gøre det mere indviklet, så du kan genopleve dine Algebra II-dage. 🙂 Her er nogle almindelige matematiske operatorer, du kan bruge i SQL:
- * Multiplicere
- / Dividere
- + Tilføje
- – Subtrahere
Vi vil bruge tabellen OrderDetails og beregne den samlede pris ved at gange enhedsprisen med mængden.
SELECT UnitPrice, OrderQty, UnitPrice * OrderQty AS TotalFROM Purchasing.PurchaseOrderDetail
Biddet ” UnitPrice * OrderQty” siger, at vi skal gange UnitPrice med Quantity.
Være tydelig og fejlfinding
Så vidt vi har brugt select-anvisningen til at hente alle poster i en tabel, uanset om nogle værdier gentager sig eller ej. Hvis du ønsker det, kan du bruge nøgleordet DISTINCT til at fjerne dubletter fra dine resultater. Hvis du f.eks. kun ville returnere en unik liste over medarbejdernes titler, ville du bruge denne SQL-anvisning:
SELECT DISTINCT JobTitleFROM HumanResources.Employee
DISTINCT-anvisningen virker også på mere end én kolonne. Hvis du ønskede det, kunne du få en særskilt liste over stillingsbetegnelser og køn ved at skrive
SELECT DISTINCT JobTitle, GenderFROM HumanResources.Employee
!Trivia: Nøgleordet ALL er DISTINCT’s modstykke og er standardadfærden. Det er derfor, vi ikke skriver det i vores udsagn.
Find og ret fejl
Snart eller senere vil du skrive et select-udsagn forkert i kommandolinjen, og computeren vil råbe til dig – “Syntaksfejl!” eller “Ugyldigt kolonnenavn” Hvad skal du gøre? Du skal blot huske, at select-erklæringen består af to hoveddele: SELECT- og FROM-delen. Generelt ser databasen først efter, om disse nøgleord er til stede, og hvis de ikke er det, udløser den en Syntax error.
Det er bare en finere betegnelse for “du har stavet et nøgleord forkert eller har det i forkert rækkefølge” (f.eks. du har Distinct før Select som i DISTINCT SELECT). Når nøgleordene er kontrolleret, inspiceres erklæringen for at sikre, at du har angivet en tabel. Når tabellen er kendt, kan den kontrollere kolonnerne. Rækkefølgen er altså først at kontrollere nøgleord, derefter tabeller og til sidst korrekte kolonner. Når der vises en fejl, skal du læse den omhyggeligt. Der er stor sandsynlighed for, at du har stavet noget forkert. Computeren vil fortælle dig, hvad du har stavet forkert i anførselstegn; det er din opgave at finde stavefejlen og rette den.
SQL Select Øvelser
Det er vigtigt at øve sig! Brug eksempeldatabasen til at besvare disse spørgsmål.
- Hvordan kan du finde alle tabelnavne i databasen AdventureWorks2012?
- Hvad er to måder at få navnene på alle kolonnerne i databasen Person.Person-tabellen?
- Selekter JobTitle og BirthDate for alle medarbejdere.
- Hvad ville UnitPrice for hver enkelt PurchaseOrderDetail vare være, hvis der var udsalg med halv rabat?
Svarene er her
Godt tillykke! Du har netop lært at bruge select-kommandoen til at forespørge i en database. Der vil følge flere tutorials, og i disse vil vi dykke ned i nogle af de områder, som vi i dag har overset, f.eks. matematiske operatorer og funktioner. Husk! Jeg vil gerne minde jer alle om, at hvis I har andre spørgsmål, I vil have svar på, så skriv en kommentar eller tweet mig. Jeg er her for at hjælpe dig.