Övningar i SQL. SQLAccess.doc Ove Lundgren 2000-11-14



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

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

Databasutveckling Introduktion till SQL och TSQL

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

WCMS-15, Webbutvecklare CMS

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

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

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

Laboration SQL. Kom igång.

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

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

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Structured Query Language (SQL)

Tentamen i Databasteknik

Idag. 1. Från modell till databasstruktur. 2. Prata med databaser (frågepsråket SQL)

Från verklighet via modell till databas. Idag. Testa reglerna på varuhusmodellen. Från verklighet via modell till databas

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Starta MySQL Query Browser

Sample exam questions. Database exam TIG058

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

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

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Grunderna i SQL del 1

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

Databaser och. SQL, utsökningar mot en tabell

Structured query language (SQL)

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

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

Databaser och SQL - en kort introduktion

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

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

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

Vad är SQL? Introduktion till SQL

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

INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA...

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

Databaser och Datamodellering Foreläsning IV

Lösningar till tentamen i EDAF75

Föreläsning 2: Översikt över ett databassystem

Tentamen för DD1370 Databasteknik och informationssystem

VAD GÖR DU / VEM ÄR DU?

NORMALISERING. Mahmud Al Hakim

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

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

Webbprogrammering, grundkurs 725G54

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

Databaser. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

Introduktion MySQL och MariaDB

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

16/12/14. Databasteknik och informationssystem DD1370. Dagens föreläsning (den sista!) Motivera med kokbok! Idag: Inga knappar L. Dagens föreläsning

Design och underhåll av databaser

Databasspråket SQL - online.

Föreläsning 5 Dagens föreläsning går igenom

Konceptuella datamodeller

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.

Databaser. Vad du ska lära dig: Ordlista

Innehåll. MySQL Grundkurs

Databasspråket SQL - online.

Filbeskrivningar Eller på särskild CD skiva

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

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.

Databasspråket SQL - online.

Databasspråket SQL - online.

Fiktiv tentamen för DD1370 Databasteknik och informationssystem

FileMaker 14. SQL-referens

Tentamen i Databasteknik

Databasspråket SQL - online.

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Grunderna i SQL del 1

Kapitel 4 Arkivmenyn Innehåll

6 PIVOTTABELLER SKAPA PIVOTTABELL. Skapa pivottabell

Frågespråk och SQL. nikos dimitrakas rum 2423

TENTAMEN DATABASKUNSKAP ITEK12

Prova på-laboration i SQL

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

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

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

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

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

VAD GÖR DU / VEM ÄR DU?

MySQL - testmiljöer på minuter. Thomas Johansson IT-avdelningen

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

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

Introduktion till Winbas. excel till Winbas

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Tentamen 4,5 hp Delkurs: Databaser och databasdesign 7,5hp Tentander: VIP2, MMD2, INF 31-60, ASP

Skapa exempeldatabasen

Laborationer - databaser, EDAA20 Programmering och databaser

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

Tentamen för DD1370 Databasteknik och informationssystem

Relationsdatabasdesign 2I-4067 HT99. Relationsalgebra. som resultat!

MySQL. Maths Göthe. 25 februari Inledning Några konventioner Licens... 2

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

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

Kopplingar via datalänk från Winbas till Excel samt Pivottabell 1 (13)

Analytisk relationsdatabasdesign

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

Projektplan. AD data

Transkript:

Övningar i SQL

Övningar i SQL Använd Access för att öva SQL (= Structured Query Language) Skapa tabeller med SQL 1. Ny databas: SQLÖVNING Klicka: Frågor > Ny > Design > OK >Stäng > SQL Radera ordet SELECT. Skriv in denna SQL-sats för att skapa tabellen AVD: CREATE TABLE AVD ( AvdNr NUMBER PRIMARY KEY, AvdNamn CHAR(20), Ort CHAR(20), Chef CHAR(3) ); Fält Kör frågan! Om något blev fel: Man kan ta bort tabellen ANST med denna SQL-sats: DROP TABLE AVD; Skriv i så fall in SQL-satsen i en fråga. Tryck! 2. Ny fråga, eller ändra i föregående Skapa tabellen ANST med SQL-satsen: CREATE TABLE ANST ( AnstNr NUMBER PRIMARY KEY, AnstNamn CHAR(20), Titel CHAR(20), Lön NUMBER, AnstDatum DATE, AvdNr NUMBER ); Tryck!

Lägg in poster i tabeller 3. Ny fråga, eller ändra i föregående Lägg in en post i AVD: INSERT INTO AVD VALUES (10, 'Administration', 'Göteborg', 'AA' ); Tryck! 4. Öppna tabellen AVD på vanligt sätt i Access. Mata in värden så att tabellen innehåller följande: AvdNr AvdNamn Ort Chef 10 Administration Göteborg AA 20 Försäljning Mölndal BB 30 Produktion Kungälv CC 5a. Lägg in en post i ANST: INSERT INTO ANST VALUES (101, 'Svensson', 'Försäljare', 17000, '2000-11-01', 20 ); Tryck! 5b. Lägg in ytterligare en post i ANST: INSERT INTO ANST VALUES (102, Larsson, 'Försäljare', 18000, '2000-11-01', 20 ); Tryck!

6. Öppna tabellen ANST på vanligt sätt i Access. Mata in värden så att tabellen innehåller följande: AnstNr AnstNamn Titel Lön AnstDatum AvdNr 101 Svensson Försäljare 17000 2000-11-01 20 102 Larsson Försäljare 18000 2000-11-01 20 103 Carlsson Prod.chef 19500 2000-11-01 30 104 Bengtsson Försäljn.chef 19800 2000-11-01 20 105 Johansson Maskinist 15000 2000-11-01 30 106 Swahn Kontorist 15000 2000-10-01 10 107 Andersson VD 32000 1999-10-01 10 108 Nilsson Maskinist 14000 2000-01-01 30 Viktig anmärkning: Ibland vill man skriva in värden endast i vissa fält. Antag att vi i ovanstående exempel vill ge värden till fälten AnstNamn, Titel, AnstDatum och AvdNr men lämna fälten AnstNr och Lön tomma. SQL-satsen skulle då bli så här: INSERT INTO ANST (AnstNamn, Titel, AnstDatum, AvdNr) VALUES ( Ek, 'Sekreterare', '2000-11-01', 20 ); Man räknar alltså upp de fält som påverkas inom parentes efter tabellnamnet, och efter ordet VALUES skriver man, inom parentes, i tur och ordning, värdet för respektive fält. Ett typiskt fall där man inte vill tilldela ett fält ett värde är när fältet är av typen räknare, det vill säga när fältet är ett heltal som automatiskt räknas upp (auto-increment) när en ny post läggs till.

Visa innehåll i tabeller (Tryck! efter varje sats.) 7. Ny fråga, eller ändra i föregående (klicka SQL) Visa hela innehållet i ANST: SELECT * ; 8. Gör en projektion (visa vissa kolumner): SELECT AnstNamn, Titel, Lön ; 9. Gör projektion och selektion (visa endast vissa rader, här anställda på avdelning 30): WHERE AvdNr=30; 10. Sammansatta villkor: Visa information om försäljare på avd 20: WHERE Titel='Försäljare' AND AvdNr=20; 11. Visa information om de på avd 10 som har högre lön än 30000: WHERE AvdNr=10 AND Lön>30000; 12. Visa info om personal som antingen jobbar på avd 10 eller har en lön som är större än 18000 (eller båda dessa villkor): WHERE AvdNr=10 OR Lön>18000; 13. Visa info om personal med lön mellan 18000 och 25000: WHERE Lön > 18000 AND Lön < 25000;

14. Visa info om personal med lön i intervallet 18000 till 25000: WHERE Lön >= 18000 AND Lön <= 25000; 15. Samma som ovan, alternativt skrivsätt: WHERE Lön BETWEEN 18000 AND 25000; 16. Visa all personal med efternamn som börjar på bokstaven S : WHERE AnstNamn LIKE "S*"; 17. Visa alla som har son-namn : WHERE AnstNamn LIKE "*son*"; 18. Visa alla som inte jobbar på avd 30: WHERE NOT(AvdNr=30); 19. Visa all info i ANST i bokstavsordning efter Titel: SELECT * ORDER BY Titel; 20. Visa all info i ANST i sorterat efter Lön: SELECT * ORDER BY Lön;

21. Visa all info i ANST i sorterat efter Lön (högsta lön först): SELECT * ORDER BY Lön DESC; Descending = fallande 22. Visa personal som inte jobbar på avd 10 i ordning efter lön, fallande. WHERE NOT(AvdNr=10) ORDER BY Lön DESC; 23. Visa årslönen för alla (beräknat fält): SELECT AnstNamn, Lön*12 ; 24. Som ovan men med att alias (snyggare kolumnhuvud): SELECT AnstNamn, Lön*12 AS Årslön ; 25. Visa kolumnen Titlar: SELECT Titel ; 26. Visa alla förekommande titlar: SELECT DISTINCT Titel ; 27. Visa de fem anställda som har lägst lön: SELECT TOP 5 * ORDER BY Lön ; 28. Visa de fem anställda som har högst lön: SELECT TOP 5 * ORDER BY Lön DESC;

29. Visa hälften av personalen, den del som har högst lön: SELECT TOP 50 PERCENT * ORDER BY Lön DESC; Formler 30. Använd formeln COUNT för att visa antalet rader i tabellen ANST: SELECT COUNT(*) ; 31. Samma, men med alias: SELECT COUNT(*) AS Antal ; 32. Visa den totala lönesumman: SELECT SUM(Lön) ; 33. Visa medellönen: SELECT AVG(Lön) AS Medellön ; 34. Visa den största lönen: SELECT MAX(Lön) AS Maxlön ; Gruppering 35. Visa medellönen för de olika jobben (titlarna) : SELECT Titel, AVG(Lön) GROUP BY Titel;

36. Som ovan med alias: SELECT Titel, AVG(Lön) AS Medellön GROUP BY Titel; 37. Visa lönesumman på avdelningarna: SELECT AvdNr, SUM(Lön) AS Lönesumma GROUP BY AvdNr; 38. Selektion på gruppnivå: Visa lönesumman på avdelning 20: SELECT AvdNr, SUM(Lön) AS Lönesumma GROUP BY AvdNr HAVING AvdNr=20; Joins 39. Join ( samkörning ) på tabellerna AVD och ANST. Visa info om anställda samt om den avdelning som de jobbar på: Samma fältnamn i två tabeller! Då måste du ta med även tabellnamnet! SELECT AnstNr, AnstNamn, Titel, Lön, AnstDatum, ANST.AvdNr, AvdNamn, Ort, AVD WHERE ANST.AvdNr=AVD.AvdNr; 40. Som ovan, men bara för avdelning 30: SELECT AnstNr, AnstNamn, Titel, Lön, AnstDatum, ANST.AvdNr, AvdNamn, Ort,AVD WHERE ANST.AvdNr=AVD.AvdNr AND ANST.AvdNr=30; 41. Alternativ till 39 ovan: SELECT AnstNr, AnstNamn, Titel, Lön, AnstDatum, ANST.AvdNr, AvdNamn, Ort INNER JOIN AVD ON ANST.AvdNr=AVD.AvdNr;

Övningar 42. Visa hela innehållet i AVD 43. Visa all info om alla maskinister 44. Visa lönen för alla kontorister 45. Visa AnstNamn, AvdNamn och Ort för alla anställda 46. Visa AnstNamn, AvdNamn och Ort för alla anställda. Sortera efter AnstNamn i bokstavsordning. 47. Visa AnstNamn, AvdNamn och Ort för alla som heter Svensson. 48. Visa AnstNamn, AvdNamn och Ort för alla vars efternamn börjar på S. 49. Vilken är den minsta lönen? 50. Visa den minsta lönen på respektive avdelning. 51. Visa lönesumman på respektive ort. 52. Visa lönesumman för avdelningen i Mölndal Uppdatera data i tabellen 53. Alla ska få sin lön ökad med 1000 kronor: UPDATE ANST SET Lön = Lön + 1000; Öppna ANST och kolla att uppdatering skett! 54. Alla utom VD:n ska dessutom få ett lönepåslag på 15 % UPDATE ANST SET Lön = Lön*1.15 WHERE NOT(Titel="VD"); Öppna ANST och kolla att uppdatering skett! Ta bort data från en tabell 55. Den anställde som har anställningsnummer 102 blir uppsagd. Ta bort posten ur tabellen! DELETE WHERE AnstNr = 102; Öppna ANST och kolla!

Ändra tabellstruktur 56. Man vill ha med ett kommentarfält i AVD-tabellen: ALTER TABLE AVD ADD COLUMN Kommentar TEXT(30); Öppna AVD och kolla! Index 57. Index används för att snabbare kunna hitta och sortera poster Vi vill sätta ett index på fältet AnstNamn i ANST-tabellen: CREATE INDEX AnstNamn ON ANST(AnstNamn); Öppna ANST i Design-mod och kolla att AnstNamn har ett (icke unikt) index. Anm: Unika index används om man dessutom vill att samma värde inte ska förekomma flera gånger. En primär nyckel får automatiskt unikt index.