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

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

Databasutveckling Introduktion till SQL och TSQL

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

Grunderna i SQL del 1

Övningar i SQL. SQLAccess.doc Ove Lundgren

Starta MySQL Query Browser

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

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

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

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

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

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

Structured Query Language (SQL)

Vad är SQL? Introduktion till SQL

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

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

Structured query language (SQL)

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

VAD GÖR DU / VEM ÄR DU?

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

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

Databaser och. SQL, utsökningar mot en tabell

VAD GÖR DU / VEM ÄR DU?

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

Grunderna i SQL del 1

WCMS-15, Webbutvecklare CMS

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

Sample exam questions. Database exam TIG058

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

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

1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Innehåll Programability Del 2

Databasspråket SQL - online.

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

Databaser och Datamodellering Foreläsning IV

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

Databasspråket SQL - online.

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

TENTAMEN DATABASKUNSKAP ITEK12

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

Lösningar till tentamen i EDAF75

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.

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

Design och underhåll av databaser

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

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

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

Databasspråket SQL - online.

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

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

DVA234 Databaser. Dag Nyström, Introduktion till databaser och MS SQL Server

Prova på-laboration i SQL

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

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.

Föreläsning 6 Databaser och säkerhet

3. Dynamiska webbplatser, 20 Yhp (4 v)

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

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

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

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

Databaser och SQL - en kort introduktion

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

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

Klientprogrammering mot databaser

Databasspråket SQL - online.

Laboration SQL. Kom igång.

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

Modul DB1-3 Datamodellering

För att XCOPY i SQL Server Express ska fungera måste data och logg ligga i samma mapp, vilket naturligtvis inte är så bra.

Tentamen för DD1370 Databasteknik och informationssystem

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Databasspråket SQL - online.

Databaser. Vad du ska lära dig: Ordlista

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

Inga hjälpmedel är tillåtna

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

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

Introduktion MySQL och MariaDB

9. :new och :old -värden 10. Triggerns olika delar 11. Olika typer av triggrar 12. Kodexempel. Pär Douhan,

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

Webbprogrammering, grundkurs 725G54

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

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

Vyer, Prepared Statements, Triggers

1. PLSQL 2 2. Select into

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

Databaser - Design och programmering

732G16: Databaser - Design och programmering

Filbeskrivningar Eller på särskild CD skiva

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Modul DB1-1 Databasmodellering

1. Kvalitetsbegreppet 2. Kommunikation 4. Olika typer av datalagring. 5. Databas 6. DBMS 7. Molntjänster 8. Tabeller. 10. SQL 11.

FileMaker 14. SQL-referens

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

Föreläsning 5: Relationsmodellen

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Viktigt! Glöm inte att skriva Tentamenskod på alla blad du lämnar in.

Introduktion till MySQL

Transkript:

INNEHÅLL Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE Chapter 8, 9, 11 delar av. Beginning SQL Server 2008 for Developers 1

VAD ÄR SQL? SQL kan i mångt och mycket liknas vid ett vanligt språk. I love SQL because it is like speeking English. Hämta alla studenter från tabellen Studenter som tillhör kursen webbtjänster och sortera studenterna i namn ordning SELECT namn, adress, telefon FROM Studenter WHERE Course = webbtjänster ORDER BY namn ; Webbgränssnitt Kommunikationen mellan en webbsida och databasen sker oftast med SQL Databas 2

VAD ÄR SQL? WIKIPEDIA SQL är ett språk som används för att ges åtkomst till och modifiera data i en databas. SQL står för Structured Query Language (ös. Strukturerat Frågespråk) SQL är en ANSI-standard för att modifiera och läsa från databaser. ANSI = American National Standards Institute Gavs ut år Benämning Anna ben. Omfattning 1986 SQL-86 SQL-87 Första publikationen 1989 SQL-89 Mindre revision 1992 SQL-92 SQL2 Major Update, vanligast använda 1999 SQL-99 SQL3 Uppgradering av SQL-92 2003 SQL-2003 Utökad med XML funktioner 2006 SQL-2006 Utveckling av XML funktionalitet 2008 SQL-2008 CURSOR, INSTEAD, TRUNCATE 2011 SQL-2011 3

SQL BEGREPP DML Data Manipulating Language SELECT, DELETE, UPDATE, INSERT DDL Data Definition Language CREATE, ALTER, DROP DCL Data Control Language GRANT, REVOKE TCL Transactional Control Language BEGIN, COMMIT, ROLLBACK 4

SQL DML SQL Data Manipulation Language (DML) DML är den syntaxdel av SQL-språket som innehåller de kommandon som gör att vi kan läsa ut och skriva data till tabellerna i databasen. Här hittar vi följande kommandon: Kommando SELECT UPDATE DELETE INSERT Används till Läser ut data från tabellen, urvalsfråga Uppdaterar data i tabellen, uppdateringsfråga Tar bort data från tabellen, borttagningsfråga Lägger in ny data i tabellen, tilläggsfråga 5

SQL DDL SQL Data Definition Language (DDL) DDL är den syntaxdel av SQL-språket som innehåller de kommandon som gör att vi kan skapa och radera tabeller samt sätta index på speciella kolumner i tabellerna. Här hittar vi följande kommandon: Kommando CREATE ALTER DROP Används till Skapar ny, databas, tabell, index mfl Modifierar en existerande Raderar en databas, tabell, index 6

SQL DCL SQL Data Control Language (DCL) DCL är den syntaxdel av SQL-språket som innehåller de kommandon som gör att vi kan arbeta med flera förändringar rättigheter för inloggning, användare etc. Här hittar vi följande kommandon: Kommando GRANT REVOKE DENY Används till Tilldelning av rättigheter Avsluta/återta rättighet Neka rättighet 7

TCL SQL Transaction Control Language (TCL) TCL är den syntaxdel av SQL-språket som innehåller de kommandon som gör att vi kan arbeta med flera förändringar och att de blir genomförda och kontrollerar förloppet vid eventuella avbrott. Här hittar vi följande kommandon: Kommando Används till BEGIN TRANSACTION Startar transaktionshantering COMMIT TRANSACTION Avslutar transaktionshantering ROLLBACK TRANSACTION Backar så transaktionen återställs 8

Syntax: SELECT - SYNTAX Syntaxen i en enklare form kan se ut på följande sätt där SELECT, FROM, WHERE och ORDER BY har sin givna inbördes ordning. : SELECT kolumn(er) FROM tabell(er) WHERE villkor operator villkor operator villkor ORDER BY fält DESC, fält ASC; SELECT anger vilka fält, kolumner, som ska visas FROM anger vilken eller vilka tabeller som fälten ska visas ur WHERE anger villkoren för vilka poster som ska visas ORDER BY anger sorteringsordning på raderna Du måste börja med SELECT vilket också är det enda du behöver använda: SELECT Hello World! ; 9

SELECT - SYNTAX Ordningen mellan nyckelorden är fast och kan inte ändras. Försöker du på annat sätt får du felmeddelande. Exempel tillåtet SELECT Namn, Kundid FROM Kund WHERE Ort= KALMAR ORDER BY Namn DESC; Vilket lämnar ett Resultatset Exempel inte tillåtet SELECT Namn, Kundid WHERE Ort= KALMAR FROM Kund ORDER BY Namn DESC Vilket lämnar ett felmeddelande 10

SELECT Vi använder normalt SELECT för att läsa ut data ur en eller flera tabeller. Syntax: SELECT kolumn(er) FROM tabell; Person: PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson SELECT PersonID, Efternamn FROM Person; Resultatet kallas för ett Resultset PersonID Efternamn 1 Karlsson 2 Nilsson 3 Jansson 4 Karlsson 11

SELECT Efter SELECT anger du vilka fält som ska finnas med i ditt resultat. Ordningen som du skriver fältnamn anger ordningen på kolumnerna i resultatet: PID Fnamn Enamn Ort 1 Kalle Karlsson Kalmar 2 Nisse Nilsson Nybro 3 Janne Jansson Nybro 4 Petter Karlsson Växjö SELECT Ort, Enamn FROM Person; Ort Kalmar Nybro Nybro Växjö Enamn Karlsson Nilsson Jansson Karlsson SELECT Fnamn, Ort, Enamn FROM Person; Fnamn Ort Enamn Kalle Kalmar Karlsson Nisse Nybro Nilsson Janne Nybro Jansson Petter Växjö Karlsson 12

SELECT Istället för att ange vilka kolumner som ska visa så använder vi * (asterisk) för att välja alla kolumner. SELECT * FROM Person; Person: PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson Med * blir ordningen mellan kolumnerna som de är uppsatta i tabellen. 13

SYNTAX SQL språket är inte case sensitive. Du kan blanda gemener och versaler som du önskar. Rekommendationen är att du alltid skriver nyckelorden med versal och har ny rad vid varje nyckelord. SELECT PersonID, Efternamn FROM Person WHERE Personid=1; Istället för: SELECT PersonID, Efternamn FROM Person WHERE Personid=1; Ska man avsluta med ; (semikolon) eller inte? Enligt ANSI avslutas en SQL sats med ; Microsofts produkter kräver inte detta. Vill du vara portabel med din kod använder du semikolon ; I MySQL måste du använda ; Radbrytningar, whitespaces, kan du använda dig av. SELECT PersonID, Efternamn FROM Person WHERE Personid=1; 14

SYNTAX / BEGREPP SELECT PersonID, Efternamn FROM Person WHERE Personid=1; Begrepp Översättning Svenskt Clause sats /bisats/ klausul nyckelord Expression uttryck uttryck Predicate satsdel/förkunna villkor Statement uttalande sats (SQL sats) 15

OPERATORER LOGISKA SQL Operator Utför Exempel NOT eller! INTE Lon > 7000 AND NOT Ort='Kalmar' AND eller && OCH Ort='Kalmar' AND Namn Like '%son' OR eller ELLER Lon <10000 OR Lon>14000 XOR Exclusive OR Select a XOR b a XOR b är matematiskt lika med a AND NOT b SELECT Namn FROM Produkt WHERE Postnr=39351 OR Postnr=39364; 16

OPERATORER JÄMFÖRELSE SQL Operator Utför Exempel = Lika med A = B <>!= Inte lika med A <> B, A!=B < Mindre än 10 < 20 <= Mindre än eller lika med 10<=10 > Större än 25>12 >= Större än eller lika med 25>=24 BETWEEN Mellan i området BETWEEN 10 AND 20 IN Finns i specifikation 7 IN (1,3,4,5,8,9) IS NULL Är Null tel IS NULL IS NOT NULL Är inte Null namn IS NOT NULL LIKE lika som postnr like '393%' LIKE lika som postnr like '39? 51' SELECT Namn FROM Produkt WHERE Postnr BETWEEN 39351 AND 39364; 17

OPERATORER ARITMETISKA Det finns ett antal operatorer som vi kan ta till hjälp för att göra beräkningar direkt i SQL-koden Operator Utför + addition - subtraction * multiplikation / division % division, modulus Beräkna Resultat 25+7 32 25-7 18 12*2 24 25/4 6,25 25%4 1 ProduktID Antal Pris 1 100 35 2 10 100 3 15 120 SELECT ProduktID, Antal*Pris FROM Produkt; ProduktID (NO NAME) 1 3500 2 1000 3 1800 18

SELECT För att läsa ut samtliga kolumner från tabellen kan du använda *: SELECT * FROM Person; (* anger att alla fält i den aktuella tabellen ska hämtas) PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson DISTINCT används för att se till så att dubbletter inte utläses: SELECT DISTINCT Efternamn FROM Person; (I tabellen ovan finns två Karlsson. När DISTINCT används visas bara en.) TOP används för att läsa ut de första i sorteringsordning: SELECT TOP 3 PersonID FROM Person; Efternamn Karlsson Nilsson Jansson PersonID 1 2 3 19

SELECT WHERE För att kombinera utläsningen med villkor använder vi WHERE: Syntax: SELECT kolumn(er) FROM tabell WHERE kolumn operator värde; SELECT * FROM Person WHERE Efternamn = Karlsson ; SELECT * FROM Person WHERE Efternamn = Karlsson AND Fornamn= Petter ; SELECT * FROM Person WHERE Efternamn = Karlsson OR Efternamn= Nilsson ; PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson PersonID Fornamn Efternamn 1 Kalle Karlsson 4 Petter Karlsson PersonID Fornamn Efternamn 4 Petter Karlsson PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 4 Petter Karlsson 20

SELECT WHERE SELECT * FROM Person WHERE (Efternamn = Karlsson OR Efternamn= Nilsson ) AND personid<4; PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson SELECT * FROM Person WHERE Efternamn Like %son ; SELECT * FROM Person WHERE Efternamn Like %a% ; PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson PersonID Fnamn Efternamn 1 Kalle Karlsson 3 Janne Jansson 4 Petter Karlsson 21 21

SELECT ORDER BY För att sortera slutresultatet använder vi ORDER BY: Syntax: SELECT kolumn(er) FROM tabell WHERE kolumn operator värde ORDER BY kolumn ordning; Där ordning är: ASC DESC Stigande ordning (A-Ö, 1-9 etc.) DEFAULT Fallande ordning (Ö-A, 9-1 etc.) SELECT * FROM Person ORDER BY Efternamn ASC; PersonID Fornamn Efternamn 3 Janne Jansson 1 Kalle Karlsson 4 Petter Karlsson 2 Nisse Nilsson OBS! Ibland sätts ordningen automatiskt vilket beror på andra funktioner. Ex index, Group by etc. 22

ALIAS Med Alias kan vi döpa om existerande kolumner samt döpa nyskapade. Syntax 1: SELECT kolumn AS nytt_namn FROM ProduktID Antal Pris 1 100 35 2 10 100 3 15 120 SELECT ProduktID, Antal*Pris AS Totalt FROM Produkt; Syntax 2: SELECT kolumn FROM tabell AS nytt_tabellnamn SELECT ProduktID, Antal*Pris AS Totalt FROM Produkt AS Totaltabell; ProduktID Totalt 1 3500 2 1000 3 1800 Totaltabell: ProduktID Totalt 1 3500 2 1000 3 1800 23

JOIN (SLÅ IHOP TABELLER) Tabell A A B C D Adderas på bredden Resultset: JOIN A B C D E F Tabell B E F A(fk) Nu kan vi äntligen börja dra slutsatser av våra databasmodeller! Faktura Fakturarad Artikel 24

INNER JOIN Syntax: SELECT kolumn(er) FROM tabell_1 INNER JOIN tabell_2 ON primärnyckel = sekundärnyckel WHERE kolumn operator värde INNER JOIN Alla i tabellerna matchande poster SELECT * FROM Produkt AS P INNER JOIN Produkttyp AS PT ON P.typID = PT.typID WHERE P.Produktnamn LIKE '%Gun% ; AS P och AS PT innebär att vi slipper skriva ut Produkt respektive Produkttyp senare i koden ProduktID Artnr Produktnamn typid Benamning 1 3443 Stolen Gunnar 12 Sittmöbel 3 6534 Pallen Gun 12 Sittmöbel 25

SAMMANSLAGNING JOIN Produkt: ProduktID Artnr Produktnamn typid 1 3443 Stolen Gunnar 12 2 5423 Bordet Jan 21 3 6534 Pallen Gun 12 4 6545 Kassen Jarl 2 Produkttyp: ptid Benamning 2 Förvaring 12 Sittmöbel 21 Bord SELECT * FROM Produkt INNER JOIN Produkttyp; Produkttyp*Produkt antal poster (4*3 = 12st): Det är dessa vi är intresserade av. ProduktID Artnr Produktnamn typid ptid Benamning 1 3443 Stolen Gunnar 12 2 Förvaring 2 5423 Bordet Jan 21 2 Förvaring 3 6534 Pallen Gun 12 2 Förvaring 4 6545 Kassen Jarl 2 2 Förvaring 1 3443 Stolen Gunnar 12 12 Sittmöbel 2 5423 Bordet Jan 21 12 Sittmöbel 3 6534 Pallen Gun 12 12 Sittmöbel.................. 4 6545 Kassen Jarl 2 21 Bord 26

Exempel 1: Produkt: SAMMANSLAGNING FORTS JOIN. ProduktID Artnr Produktnamn typid 1 3443 Stolen Gunnar 12 2 5423 Bordet Jan 21 3 6534 Pallen Gun 12 4 6545 Kassen Jarl 2 SELECT * FROM Produkt INNER JOIN Produkttyp ON Produkt.typID = Produkttyp.ptID; Produkttyp: ptid Benamning 2 Förvaring 12 Sittmöbel 21 Bord Exempel 2: ProduktID Artnr Produktnamn typid ptid Benamning 1 3443 Stolen Gunnar 12 12 Sittmöbel 2 5423 Bordet Jan 21 21 Bord 3 6534 Pallen Gun 12 12 Sittmöbel 4 6545 Kassen Jarl 2 2 Förvaring SELECT Produkt.Produktnamn, Produkttyp.Benamning FROM Produkt INNER JOIN Produkttyp ON Produkt.typID = Produkttyp.ptID; Produktnamn Stolen Gunnar Bordet Jan Pallen Gun Kassen Jarl Benamning Sittmöbel Bord Sittmöbel Förvaring 27

SAMMANSLAGNING FORTS JOIN. Produkt: ProduktID Artnr Produktnamn typid 1 3443 Stolen Gunnar 12 2 5423 Bordet Jan 21 3 6534 Pallen Gun 12 4 6545 Kassen Jarl 2 Produkttyp: ptid Benamning 2 Förvaring 12 Sittmöbel 21 Bord Vi ställer oss frågan. Vilka produkter tillhör produkttypen Sittmöbel? Lösning: SELECT Produkt.Produktnamn FROM Produkt INNER JOIN Produkttyp ON Produkt.typID = Produkttyp.ptID WHERE Produkttyp.Benamning = Sittmöbel ; Produktnamn Stolen Gunnar Pallen Gun 28

OUTER JOIN LEFT OUTER JOIN Tar med snittet (matchande poster) samt poster i vänster tabell som inte har någon länk till höger tabell RIGHT OUTER JOIN Tar med snittet samt poster i höger tabell som inte har någon länk till vänster tabell FULL OUTER JOIN Tar med snittet samt poster i höger och vänster tabell som inte har någon länk till motstående tabell. En kombination av både LEFT och RIGHT OUTER JOIN 29

LEFT OUTER JOIN Produkt: ProduktID Artnr Produktnamn typid 1 3443 Stolen Gunnar 12 2 5423 Bordet Jan 21 3 6534 Pallen Gun 12 4 6545 Kassen Jarl 2 Produkttyp: ptid Benamning 2 Förvaring 12 Sittmöbel 21 Bord 5 9875 Kvitto SELECT * FROM Produkt LEFT OUTER JOIN Produkttyp ON Produkt.typID = Produkttyp.ptID; LEFT syftar på denna tabell. (Syns tydligare om hela frågan skrivs på en rad) ProduktID Artnr Produktnamn typid ptid Benamning 1 3443 Stolen Gunnar 12 12 Sittmöbel 2 5423 Bordet Jan 21 21 Bord 3 6534 Pallen Gun 12 12 Sittmöbel 4 6545 Kassen Jarl 2 2 Förvaring 5 9875 Kvitto 30

RIGHT OUTER JOIN Produkt: ProduktID Artnr Produktnamn typid 1 3443 Stolen Gunnar 12 2 5423 Bordet Jan 21 3 6534 Pallen Gun 12 4 6545 Kassen Jarl 2 5 9875 Kvitto SELECT * FROM Produkt RIGHT OUTER JOIN Produkttyp ON Produkt.typID = Produkttyp.ptID Produkttyp: ptid Benamning 2 Förvaring 12 Sittmöbel 21 Bord 55 Mattor RIGHT syftar på denna tabell. ProduktID Artnr Produktnamn typid ptid Benamning 1 3443 Stolen Gunnar 12 12 Sittmöbel 2 5423 Bordet Jan 21 21 Bord 3 6534 Pallen Gun 12 12 Sittmöbel 4 6545 Kassen Jarl 2 2 Förvaring 55 Mattor 31

SLÅ IHOP FLERA TABELLER Faktura Faktura rad Artikel SELECT * FROM Faktura AS F INNER JOIN [Faktura rad] AS Fa ON F.FakturaID = Fa.FakturaradID INNER JOIN Artikel AS A ON Fa.ArtikelID = A.ArtikelID [tabellnamn] används i SQL Server för att undvika tvetydigheter i namn. `tabellnamn` används i MySQL Används bland annat vid: Namn som innehåller mellanslag, blanksteg Tecken så som Å Ä Ö Då reserverade tabellnamn används (T.ex. From) 32

EGENRELATIONER En egenrelation är en relation inom tabellen I Northwind-databasen finns det en egenrelation En chef har en eller flera anställda Alias krävs vid egenrelationer Employees Vi ställer oss frågan. Vilka Antällda har en chef och vem är i såfall det? SELECT E.LastName AS Anställd, B.LastName AS Chef FROM Employees AS E INNER JOIN Employees AS B ON E.ReportsTo = B.EmployeeID Anställd Chef Hur blir det om vi istället frågar oss: Vilka anställda finns och vem har de eventuellt som chef? Davolio Fuller Leverling Fuller Peacock Fuller...... Dodsworth Buchanan 33

UNION OCH JOIN Samma antal kolumner Adderas på längden UNION Gemensam kolumn A B C D Adderas på bredden (och längden) A B C D E F JOIN E F A 34

UNION Tabell 1 Ny tabell UNION Tabell 2 Här måste datatyperna stämma överens. Ett tal kan t.ex. inte matchas mot en text. Syntax 1: SELECT kolumn(er) FROM tabell_1 WHERE UNION SELECT kolumn(er) FROM tabell_2 WHERE 35

UNION Emloyee: EmpID Firstname Sirname 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson Member: MemeberID Age FName LName 1 34 Peter Johansson 2 54 Nisse Nilsson 3 12 Karl Svensson 4 32 John Johnsson SELECT Firstname, Sirname FROM Employee UNION SELECT Fname, LName FROM Member; Observera att kolumnrubrikerna blir samma som i första tabellen samt att Nisse Nilsson inte kommer att visas två gånger. För att byta Kolumnrubrik använd AS i första selectsatsen: Firstname Kalle Nisse Janne Petter Peter Karl John Sirname Karlsson Nilsson Jansson Karlsson Johansson Svensson Johnsson SELECT Firstname AS First, Sirname AS Last FROM 36

UNION ALL Emloyee: EmpID Firstname Sirname 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson Member: MemeberID Age FName LName 1 34 Peter Johansson 2 54 Nisse Nilsson 3 12 Karl Svensson 4 32 John Johnsson SELECT Firstname, Sirname FROM Employee UNION ALL SELECT Fname, LName FROM Member För att sortera resultatet läggs satsen ORDER BY till sist:... UNION SELECT FName, LName FROM Member ORDER BY Sirname, Firstname Firstname Kalle Nisse Janne Petter Peter Nisse Karl John Sirname Karlsson Nilsson Jansson Karlsson Johansson Nilsson Svensson Johnsson 37

INSERT INSERT INTO använder vi när vi vill lägga in data i tabeller: Syntax när vi lägger in data i alla fält i och enligt fältordning i tabellen: INSERT INTO tabell VALUES (värde1, värde2, värde3,...); INSERT INTO Person VALUES ( Lisa, Persson ); PersonID Fornamn Efternamn 1 Kalle Karlsson......... 5 Lisa Persson Fältet PersonID är räknare och det fältet uppdaterar inte vi. Det gör databasen själv. OBS! Ordningen på fälten måste vara den som fälten har i tabellen. 38

INSERT FORTS Syntax när vi endast lägger in data i vissa fält: INSERT INTO tabell (kolumn1, kolumn2, kolumn3,...) VALUES (värde1, värde2, värde3,...); INSERT INTO Person (Efternamn) VALUES ( Bengtsson ); PersonID Fornamn Efternamn 1 Kalle Karlsson......... 6 Bengtsson Ordningen och vilka fält som data ska in i bestäms i parentesen på första raden. OBS! Om du inte har räknare på Pk måste Pk också uppdateras med ett giltligt värde. 39

INSERT MÅNGA POSTER Du kan med en INSERT INTO lägga till många poster. Syntax när vi endast lägger in data i vissa fält: INSERT INTO tabell (kolumn1, kolumn2, kolumn3,...) VALUES (värde1, värde2, värde3,...), (värde1, värde2, värde3,...), (värde1, värde2, värde3,...), (värde1, värde2, värde3,...); INSERT INTO Person (namn, adress, postnr, Ort) VALUES ( Bo Svensson, Storgatan 23, 393 64, Kalmar ), ( Stina Malm, Granvägen 3, 393 63, Kalmar ), ( Anna Svensson, Ekstigen 12, 393 51, Kalmar ), ( Ola Ek, Ringvägen 93, 393 62, Kalmar ); 40

UPDATE UPDATE används till att uppdatera/ändra innehållet i tabellerna: Syntax: UPDATE tabell SET kolumn1 = nytt_värde1, kolumn2 = nytt_värde2, WHERE kolumn = värde PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson Exempel 1 uppdatera ett fält: UPDATE Person SET Fornamn = Carl WHERE PersonID = 1; PersonID Fornamn Efternamn 1 Carl Karlsson 41

UPDATE UPDATE används till att uppdatera/ändra innehållet i tabellerna: Exempel 2 uppdatera flera fält: UPDATE Person SET Fornamn = Carl, Efternamn = Kolberg WHERE PersonID = 1; PersonID Fornamn Efternamn 1 Carl Kolberg VARNING! VARNING! Exempel 3 ödesdigra konsekvenser: UPDATE Person SET Fornamn = Carl ; Alla får namnet Carl!!!! Glöm inte WHERE PersonID Fornamn Efternamn 1 Carl Karlsson 2 Carl Nilsson 3 Carl Jansson 4 Carl Karlsson 42

DELETE DELETE används när vi vill avlägsna poster från en tabell: Syntax: DELETE FROM tabell WHERE kolumn = värde PersonID Fornamn Efternamn 1 Kalle Karlsson 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson DELETE FROM Person WHERE PersonID = 1; PersonID Fornamn Efternamn 2 Nisse Nilsson 3 Janne Jansson 4 Petter Karlsson DELETE används för att radera rader i tabeller och inte enstaka fältinnehåll. När du använder DELETE så bör du tänka flera gånger. Kontrollera gärna med SELECT och samma sökvillkor först. 43

DELETE Det är alltför lätt att göra fel! Nedanstående exempel tömmer hela tabellen VARNING! VARNING! DELETE FROM Person; PersonID Fornamn Efternamn Om du vill tömma en tabell och återställa räknaren TRUNCATE TABLE Person 44