INNEHÅLL SQL DEL 2. Funktioner inbyggda Aggregatfunktioner Skalärfunktioner. Chapter 11. Beginning SQL Server 2008 for Developers



Relevanta dokument
Se kurshemsidan för användbara länkar för att genomföra denna laboration.

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Databaser och. SQL, utsökningar mot en tabell

9. Between 10. Group by 11. Aggregatfunktionerna max, min, sum och avg 12. Nästlade sökningar

Introduktion till frågespråket SQL (v0.91)

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

Structured query language (SQL)

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Structured Query Language (SQL)

Microsoft Office Excel, Grundkurs 2. Funktioner

Övningar i SQL. SQLAccess.doc Ove Lundgren

Grunderna i SQL del 1

Starta MySQL Query Browser

Databaser. Vad du ska lära dig: Ordlista

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

Innehåll Programability Del 2

Databasutveckling Tabeller. tinyint 1 byte (0-255) Upp till 8 bytes

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

07/11/14. Databasteknik och informationssystem DD1370 F2. Allmänna frågor. Är Lab0 svårbegriplig? Nu: Clickers. Är Kurswebben svårbegriplig?

Innehåll Programability del 1

1. SQL 2. Utsökningar mot flera tabeller. 4. IN-operatorn 5. Join 6. Kartesisk produkt 7. Tabellalias

Det är fullt tillåtet att göra laborationen innan laborationstillfället.

Innehåll Programability del 1

Tentamen för DD1370 Databasteknik och informationssystem

1.Lär känna MS SQL Observera. Tips. Förberedelse

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

VAD GÖR DU / VEM ÄR DU?

Innehåll MySQL Intro. Historik / Utveckling Produkter Primära delsystem Installation Tabell och datatyper Namnsättning

Innehåll MySQL Intro. Ex på ett index Index typer ISAM Balanserat träd Pk och Fk i MySQL Eget index För o nackdelar med index

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Vad är SQL? Introduktion till SQL

Uppgift 1 (grundläggande konstruktioner)

Grunderna i SQL del 1

Laboration SQL. Kom igång.

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

1. PLSQL 2 2. Select into

Grupp/Center-statistik. Terminologi/ordlista...2 Urval...3 Analystyper...4

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Grunderna i SQL del 2 1. Underfrågor 2. Underfrågor som sökvillkor 3. Andra användningsområden för underfrågor 4. Komplexa underfrågor 5.

Grunderna i SQL del 2 1. Underfrågor 2. Underfrågor som sökvillkor 3. Andra användningsområden för underfrågor

Laboration 2, MS SQL. Observera. Tips. Förberedelse. Genomförande

Databasutveckling Introduktion till SQL och TSQL

VAD GÖR DU / VEM ÄR DU?

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

Tentamen för DD1370 Databasteknik och informationssystem

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Datalager och datautvinning

1. SQL DDL (Data Definition Language) 2. Skapa tabell

Första databastillämpningen

Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Föreläsning 13 Testning och strängar

Introduktion MySQL och MariaDB

3. Dynamiska webbplatser, 20 Yhp (4 v)

Lösningar till tentamen i EDAF75

Innehåll. Excel för avancerade användare

Tentamen för DD1370 Databasteknik och informationssystem

Nya webbservern Dvwebb.mah.se

Sample exam questions. Database exam TIG058

SQL del 2. Christer Stuxberg Institutionen för Informatik och Media

FileMaker 14. SQL-referens

08/11/13. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Deadline på tisdag

Utredningar som inleds inom en månad

Modul DB1-3 Datamodellering

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Databasapplikationen HYR AKS. Vers 1.0 6, AKS har framtagits av ApplData AB på uppdrag av TillSaluGrejorAB

WCMS-15, Webbutvecklare CMS

Ett arbetsexempel Faktureringsrutin

Konvertering från sträng. Winstrand Development

kl Tentaupplägg

efact Sök Sök/Rapporter ( )

Komma iga ng med formler och funktioner

Introduktion till MySQL

Informationssystem och Databasteknik, 2I-1100 HT2001. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.

Tentamen ges för: Tentamensdatum: Tid:

kl Tentaupplägg

Excel Övning 1 ELEV: Datorkunskap Sida 1 Niklas Schilke

Sid 1 (9) Tillämpad fysik och elektronik Karin Fahlquist. Laboration: Databasdesign & SQL

Summering av tider. Version Medvind Informationsteknik AB Sida 1

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Kapitel 10 Matriser. Beräkning med hjälp av matriser. Redigering av matriser

Exempel-Tentamen III

Databaser och Datamodellering Foreläsning IV

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Introduktion HTML och PHP 732G16 Databaser design och programmering

Palette. Matchning fakturor mot order - Manual. Version 1.0 /

Statistik över heltal

Inledande programmering med C# (1DV402) Summera med while"-satsen

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Prova på-laboration i SQL

Databaser och SQL - en kort introduktion

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

Historik Primära Delsystem Produkter MSSQL Installationen Objekten i MS SQL Server Namn konvention Datatyper

Labb LABB 15. XML användande i praktiken. Plushögskolan Frågeutveckling inom MSSQL - SU14

Föreläsningsmaterial (Syntax och variabler)

Transkript:

INNEHÅLL SQL DEL 2 Funktioner inbyggda Aggregatfunktioner Skalärfunktioner Chapter 11. Beginning SQL Server 2008 for Developers 1

FUNKTIONER, INBYGGDA Det finns ett mängd med funktionen du kan använd dig av. Beroende på databashanterare kan dessa variera en del. Studera därför respektive databashanteras specifika utformning av funktioner. I MySQL se hjälpen i Query Browser. I MSSQL se länken som leder till SQL Server Developer Center MS SQL Server MySQL ABS ABS Returnerar absolutbeloppet av ett tal CEILING CEILING Omvandlar till heltal uppåt FLOOR FLOOR Omvandlar till heltal nedåt ROUND ROUND Avrundar tal till n decimaler DATEADD ADDDATE Lägger till dagar till datum DATEDIFF DATEDIFF Ex diff i antal dagar mellan två datum MONTH MONTH Månadsnumret 2

FUNKTIONER, DATEADD SELECT Datum, betvillkor,dateadd(day,betvillkor,datum) as Fdatum FROM Faktura Alternativ i MSSQL: SELECT Datum, betvillkor, datum+betvillkor as Fdatum FROM Faktura; Syntax: Datum Betvillkor Fdatum 2012-03-28 30 2012-04-27 2012-04-12 20 2012-05-02 2012-04-17 15 2012-05-02 DATEADD (datepart, number, date) Datepart anger typ; år, månad, dag, timmar etc. Se Books On line Number är värdet i detta fallet antal dagar Date är angivet datum som beräkningen går ut från 3

DAG / MÅNAD / ÅR SELECT GETDATE() as dagens, YEAR(GETDATE()) as året, DATEPART ( YEAR, GETDATE() ) as året1, MONTH(GETDATE()) as månnr, DATEPART ( MONTH, GETDATE() ) as månnr1, DATENAME ( MONTH, GETDATE() ) as månnamn, DATEPART ( WEEK, GETDATE() ) as veckonr, DATEPART ( WEEKDAY, GETDATE() ) as veckodagnr, DATENAME ( WEEKDAY, GETDATE() ) as veckodag DATENAME ( datepart, date ) Hämta namn med datepart DATEPART ( datepart, date ) Hämta värde med datepart parameter Se Books On Line för Datepart och Datename. 4

FUNKTIONER, ROUND, FLOOR, CEILING SELECT Antal, Pris, ROUND(antal*pris,2) as Summa FROM Artikel; ROUND (number, dec) Avrundar till antal dec SELECT Antal, Pris, FLOOR(antal*pris) as Summa FROM Artikel; FLOOR (number) Sänker till närmaste heltal SELECT Antal, Pris, CEILING(antal*pris) as Summa FROM Artikel; CEILING (number) Höjer till närmaste heltal Antal Pris Summa 10 1,75 17,50 25 1,3 32,50 Antal Pris Summa 10 1,75 17 25 1,3 32 Antal Pris Summa 10 1,75 18 25 1,3 33 5

SKALÄRFUNKTIONER Skalärfunktioner arbetar mot ett värde och returnerar detta värde modifierat. MS SQL Server MySQL UPPER(k) UCASE(k) Returnerar strängen i VERSALER (Uppercase) LOWER(k) LCASE(k) Returnerar strängen i gemener (Lowercase) SUBSTRING(k, start, nr) MID(k, start, nr) Returnerar nr antal tecken från tecknet start i kolumnen k. GETDATE() NOW() Returnerar aktuellt datum och tid (på servern) ISNULL(k, nytt) IFNULL(k, nytt) Byter ut NULL mot nytt i kolumen k CAST/CONVERT CAST Konvertera från ett format till annat Givetvis så finns det en hel uppsjö med ytterligare specialfunktioner beroende på databashanterare. Här är respektive databashanterares hemsida på nätet en guldgruva. SELECT UPPER(Produktnamn) AS NAMN FROM Produkt; NAMN STOLEN GUNNAR BORDET JAN PALLEN GUN KASSEN JARL KVITTO 6

SKALÄRFUNKTIONER UPPER om vandlar alla tecken till versaler SELECT UPPER(Artnamn) AS NAMN FROM Artikel; SUBSTR läser av antal tecken SELECT SUBSTRING(postnr,1,3) AS Region FROM Kund; NAMN DVD SPELARE CD-SKIVOR BILDSKÄRM TANGENTBORD USB MINNE Region 393 394 395 7

CAST AND CONVERT Att slå samman data av lika datatyper och olika datatyper SELECT Fnamn + ' + Enamn as Namn FROM Personal; Fnamn Enamn Anna Ek Sture Gran Namn Anna EK Sture Gran SELECT Avgift+Stöd as Total FROM Medlem; Avgift Stöd Total 100 50 150 225 30 255 SELECT Artikelnamn + ' + CAST(pris*antal as varchar(10)) AS Produkt FROM Artikel; Alternativ: Artnamn Pris Antal Produkt Stol 50 10 Stol 500 DVD 30 50 DVD 1500 SELECT Artikelnamn + ' + STR(pris*antal) AS Produkt FROM Artikel; 8

CAST AND CONVERT CAST och CONVERT kan vi använda om vi vill ta bort visning av timmar, minuter och sekunder från datum: SELECT Datum FROM Faktura; Formatet på datatypen smalldatetime i SQL Server är förutom datum också hh:mm:ss Datum 2009-01-05 00:00:00 2009-01-15 00:00:00 2009-01-25 00:00:00 2009-02-08 00:00:00 2009-02-04 00:00:00 SELECT CONVERT(char(10),datum,120) AS Datumet FROM Kund; Konverterar till datatypen char(10) Vad ska konverteras Hur det ska konverteras Se Books OnLine under CAST AND CONVERT Datumet 2009-01-05 2009-01-15 2009-01-25 2009-02-08 2009-02-04 9

AGGREGATFUNKTIONER Aggregatfunktioner arbetar mot en grupp av värden men returnerar bara ett värde. COUNT(kolumn) Returnerar antalet rader exkl. NULL-poster COUNT(*) Returnerar antalet rader inkl. NULL-poster AVG(kolumn) Returnerar medelvärdet av posterna MAX(kolumn) Returnerar högsta värdet i kolumnen MIN(kolumn) Returnerar lägsta värdet i kolumnen SUM(kolumn) Returnerar summan av värdena i kolumen Beroende på databashanteraren så kan det finnas fler aggregatfunktioner. ProduktID Artnr Produktnamn Pris typid 1 3443 Stolen Gunnar 123 12 2 5423 Bordet Jan 433 21 3 6534 Pallen Gun 199 12 4 6545 Kassen Jarl 12 2 Maxpris 433 SELECT MAX(pris) AS Maxpris FROM Produkt 10

AGGREGATFUNKTIONER COUNT räknar antal förekomster SELECT COUNT(*) as AntaletKunder FROM Kund WHERE Ort= KALMAR ; AntaletKunder 1250 SUM beräknar summa av värdet i angivet fält SELECT SUM(Antal*pris) as Summan FROM Artikel; Summan 93750,50 Avrundar nedåt. SELECT FLOOR(SUM(Antal*pris)) as Summan FROM Artikel; Summan 93750 SELECT MAX(Antal), MIN(ANTAL),AVG(Antal) FROM Fakturarad; Max Min Avg 75 1 23 11

AGGREGATFUNKTIONER Vad är vår nettointäkt för varje rad på våra fakturor? Syntax: SELECT kolumn, Aggregatfunktion(kolumn) FROM tabell Uppgift: Beräkna nettosumma för varje rad i fakturan. Lösning: SELECT SUM(fr.antal*fr.pris) AS Nettopris FROM Faktura AS f LEFT JOIN Fakturarad AS fr ON f.fakturaid = fr.fakturaid; Nettopris 1250 1490 2100 1100 2870 12

GROUP BY FORTS. Utgångspunkten är en eller flera tabeller där vi har flera poster som vi exempelvis vill summera och presentera ett slutresultat. En faktura innehåller flera rader och vi vill har ett svar på hur är nettopriset för hela fakturan, dvs summan för alla raderna i fakturan: Rader i Fakturarad Fakturaid Antal Pris Radsumma 1 10 125,00 1250 1 20 74,50 1490 Summa 2740 2 1 980,00 980 2 20 56,00 1120 Summa 2100 3 10 397,00 3970 Det finns två rader i fakturarad som tillhör faktura 1 Dessa summeras till och presenteras som en rad genom GROUP BY i SQL-satsen: Sammanställt med GROUP BY Summa 3970 Fakturaid Datum Nettopris 1 2008-02-15 2740 2 2008-03-21 2100 3 2008-04-12 3970 13

GROUP BY FORTS. Med hjälp av GROUP BY kan vi se till att gruppera poster och på så sätt använda aggregatfunktioner på grupperna. Syntax: SELECT kolumn, Aggregatfunktion(kolumn) FROM tabell GROUP BY kolumn Uppgift: Beräkna nettosumma för varje faktura. Lösning: SELECT f.fakturaid,f.datum, SUM(fr.antal*fr.pris) AS Nettopris FROM Faktura AS f INNER JOIN Fakturarad AS fr ON f.fakturaid = fr.fakturaid GROUP BY f.fakturaid, f.datum; Fakturaid Datum Nettopris 1 2008-02-15 2740 2 2008-03-21 2100 3 2008-04-12 3970 14

Exemplet från föregående sida: Lösning: SELECT f.fakturaid,f.datum, SUM(fr.antal*fr.pris) AS Nettopris FROM Faktura AS f INNER JOIN Fakturarad AS fr ON f.fakturaid = fr.fakturaid GROUP BY f.fakturaid, f.datum; GROUP BY De fält i urvalet som inte omfattas av aggregatfunktion måste alla vara med i GROUP BY. Datum är omfattas av aggregatfunktionen MAX. Alternativ lösning: Fakturaid Datum Nettopris 1 2008-02-15 2740 2 2008-03-21 2100 3 2008-04-12 3970 SELECT f.fakturaid, MAX(f.datum), SUM(fr.antal*fr.pris) AS Nettopris FROM Faktura AS f INNER JOIN Fakturarad AS fr ON f.fakturaid = fr.fakturaid GROUP BY f.fakturaid; 15

Syntax: HAVING Med hjälp av HAVING kan vi utföra villkorsoperationer tillsammans med aggregatfunktionerna. SELECT kolumn, Aggregatfunktion(kolumn) FROM tabell GROUP BY kolumn HAVING Aggregatfunktion(kolumn) operator villkor Uppgift: Beräkna nettosumma för varje faktura där sum*antal >2200. Lösning: SELECT f.fakturaid,f,datum, SUM(fr.antal*fr.pris) AS Nettopris FROM Faktura AS f INNER JOIN Fakturarad AS fr ON f.fakturaid = fr.fakturaid GROUP BY f. Fakturaid, f.datum HAVING sum(fr.antal*fr.pris) >2200; Om du vill ha ett urval på de poster som hämtas från tabellerna kan du använda WHERE och då läggs den innan GROUP BY Fakturaid Datum Nettopris 1 2008-02-15 2740 3 2008-04-12 3970 Du kan inte använda ett alias i HAVING. Se nettopris ovan. 16