SQL PROFESOR ISAAC GARCÍA RÍOS. Introducción a SQL ¿Qué significa SQL? ¿Qué es el SQL?
Sql utbldning
-
Upload
malin-johansson -
Category
Small Business & Entrepreneurship
-
view
254 -
download
2
Transcript of Sql utbldning
![Page 2: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/2.jpg)
www.artofit.se 2010-10-27 2
Kursens mål • Relationsdatabaser:
– datamodell – tabeller – relationer
• SQL-frågor:– sökningar– manipulering av data– databasobjekt– behörighet
![Page 3: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/3.jpg)
www.artofit.se 2010-10-27 3
Begrepp i en relationsdatabas
• Databas = samling av tabeller• DBMS – databashanterare
- Oracle, SQL server, My SQL
• Tabeller• Kolumner (fält)• Rader (poster)• Primär nyckel (PK)• Främmande nyckel (FK)• Relationer
![Page 4: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/4.jpg)
www.artofit.se 2010-10-27 4
Relationer• Varje tabell har ett unikt namn• Ordningen på kolumner i en tabell
saknar betydelse• Ordningen på rader i en tabell
saknar betydelseTabeller relaterar till varandra• Kolumner i två tabeller har samma
värde• Constraints som bestämmer regler för
relationen– Primary Key, PK: identifierar alla
poster unikt i en tabell. Består av en eller flera kolumner
– Foreign Key. FK: Kontrollerar att det inlagda värdet finns i den relaterade primärnyckeln
KundKundnrNamnAdressTelefonnr
OrderOrdernrDatumSäljareOrderdetaljerkundnr
![Page 5: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/5.jpg)
www.artofit.se 2010-10-27 5
Relationer forts.
Typer av förhållanden:• Ett-till-ett (1:1)• Ett-till-många (1:M)• Många-till många (M:M)
KundKundnrNamnAdressTelefonnr
OrderOrdernrDatumSäljareOrderdetaljerkundnr
![Page 6: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/6.jpg)
www.artofit.se 2010-10-27 6
Datatyper• Number numeriska värden (tal)• Varchar2 tecken• Boolean booleskt värde (0=falskt, 1=sant)• Date datum• Timestamp tidsstämpel
CAST(uttryck AS datatyp): omvandlar ett uttryck från en datatyp till en annan
![Page 7: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/7.jpg)
www.artofit.se 2010-10-27 7
Databasutveckling
1.Kravanalys2.Konceptuell modell3.Logisk modell4.Normalisering5.Fysisk datamodell
OBS! Dålig fysisk design är kostsamt och mycket svårt att korrigera
![Page 8: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/8.jpg)
www.artofit.se 2010-10-27 8
NormaliseringTar bort redundans (dubbellagring) i databasen
Första NF (normalformen)1. Varje kolumn i tabellen är unik2. Data i ett kolumnfält innehåller bara ett
värde3. Alla värden i en kolumn skall vara av
samma datatypAndra NF
4. Varje rad i en tabell är unik och beronde av PK
Tredje NF5. Fält som inte är nycklar skall kunnas
härledas till varandra.
![Page 9: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/9.jpg)
www.artofit.se 2010-10-27 9
Introduktion till SQL
• Standard SQL ANSI• Standard 1987 ISO (1992,1999)• SQL är det första och hittills enda relationsdatabas
språket som är internationellt accepterat• SQL kan användas– Interaktivt, t ex med SQL Developer eller SQL*Plus– Inbäddat i ”valfritt” programmeringsspråk
OBS! Oracle används som DBMS i denna kurs
![Page 10: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/10.jpg)
www.artofit.se 2010-10-27 10
SQL• SQL kan användas för att– Söka efter data– Lägga in, uppdatera och ta bort en rad i en tabell– Skapa, ersätta, uppdatera och ta bort objekt– Ge och ta bort rättigheter till objekt
• SQL är ett frågespråk, inte ett proceduellt språk• Är inte känsligt för – gemener/versaler• Notera att själva datat i tabellerna är det.
– Radbrytningar, mellanslag eller tabbar
![Page 11: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/11.jpg)
www.artofit.se 2010-10-27 11
Gruppering av SQL kommandon
• Data Manipulation Language commands (DML)– Select, Insert, Update, Delete
• Select brukar definieras som Query Language• Data Definition Language commands (DDL)
– create table, alter view, drop column• Data Control Language commands (DCL)
– Grant, revoke
![Page 12: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/12.jpg)
www.artofit.se 2010-10-27 12
SQL frågor
• SQL är mycket flexibelt och har en speciell syntax• Du kan ställa frågor till en databas på ett oändligt antal sätt• Du kan ställa frågor på olika sätt och få samma resultat• Du kan ställa en fråga på fel sätt och inte få något svar alls• Du kan ställa en fråga på fel sätt och få svar på en fråga du inte
insåg att du frågade
![Page 13: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/13.jpg)
www.artofit.se 2010-10-27 13
SELECT – Hämta data• Hämtar data från databasen• Består av minst 2 delar:
- SELECT kolumner FROM tabeller
• Att skriva en fråga, se datamodell:1. Vilka tabeller?2. Vilka kolumner?
![Page 14: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/14.jpg)
www.artofit.se 2010-10-27 14
Välj alla kolumner
SELECT * FROM employees;
• Asterixen (*) visar samtliga rader och samtliga kolumner i den ordning som de lagras i tabellen
![Page 15: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/15.jpg)
www.artofit.se 2010-10-27 15
Välj en speciell kolumn
SELECT first_name FROM employees;
• Visar samtliga rader i tabellen för den namngivna kolumnen
![Page 16: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/16.jpg)
www.artofit.se 2010-10-27 16
Välj flera kolumner
SELECT first_name, last_name, email FROM employees;
• Samtliga rader visas för varje vald kolumn• Kallas även PROJEKTION• Separera kolumnnamn med kommatecken(,)• Ordningsföljden på kolumnerna i frågan bestämmer i vilken ordning
kolumnerna visas i resultatet
![Page 17: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/17.jpg)
www.artofit.se 2010-10-27 17
WHERE – Filtrera data• Begränsar antalet rader som hämtas• Består av minst 3 delar:
- SELECT kolumner FROM tabeller WHERE villkor
• Att skriva en fråga, se datamodell:1. Vilka tabeller?2. Vilka kolumner?3. Vilket villkor?
![Page 18: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/18.jpg)
www.artofit.se 2010-10-27 18
Lika med =
SELECT first_name, last_name FROM employees WHERE first_name = 'David';
• Tecken omges av enkelfnuttar ’tecken’ • SQL är känslig för gemener och versaler när man
jämför text.
SELECT first_name, last_name FROM employees WHERE salary = 3200;
• Kolumnen som man testar på behöver inte vara med i SELECT-satsen
![Page 19: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/19.jpg)
www.artofit.se 2010-10-27 19
Ej lika med != eller <>
SELECT first_name, last_name FROM employees WHERE first_name <> 'David';
• Tecken omges av enkelfnuttar ’tecken’ • SQL är känslig för gemener och versaler när man
jämför text.
SELECT first_name, last_name FROM employees WHERE salary != 3200;
• Kolumnen som man testar på behöver inte vara med i SELECT-satsen
![Page 20: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/20.jpg)
www.artofit.se 2010-10-27 20
Större än och Mindre än• Större än >• Större än eller lika med >=• Mindre än <• Mindre än eller lika med <=
SELECT first_name, last_name, salary FROM employees WHERE salary <= 3200;
![Page 21: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/21.jpg)
www.artofit.se 2010-10-27 21
Intervall: BETWEEN och NOT BETWEEN• Större än eller lika med ett värde
och mindre än eller lika med ett annat värde- BETWEEN lägsta värde AND högsta värde
SELECT first_name, last_name, salary FROM employees WHERE salary BETWEEN 2100 AND 2700;
• Inkluderar värdena som anger intervallet i resultatet• Mest användbart för tal och datum
![Page 22: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/22.jpg)
www.artofit.se 2010-10-27 22
Mönstermatchning: LIKE och NOT LIKE• Matchar följande mönster LIKE
- noll eller flera tecken %- ett tecken _
SELECT first_name, last_name FROM employees WHERE first_name LIKE 'S%';
SELECT first_name, last_name FROM employees WHERE first_name LIKE '_d%';
![Page 23: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/23.jpg)
www.artofit.se 2010-10-27 23
Lista: IN och NOT IN
• Lika med något av flera värden i en listaIN(värde1, värde2, värde3…)Värdena separeras med komma , och omsluts av parantes (värden)
SELECT job_title, max_salary FROM jobs WHERE job_title IN ('President', 'Accountant',
'Stock Clerk');
SELECT job_title, max_salary FROM jobs WHERE max_salary NOT IN (40000, 9000, 5000);
![Page 24: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/24.jpg)
www.artofit.se 2010-10-27 24
Lista forts. ANY, SOME, ALL
Jämförelse av listvärden med <, <=, >, >=, = eller <> • ANY och SOME har samma funktion och är sant om något av värdena i
listan är sanna, = (samma som IN)SELECT job_title, salary FROM jobs WHERE salary > ANY (40000, 9000, 5000);
• ALL är sant om alla värden i listan överenstämmer med villkoret, <> (samma som NOT IN)
SELECT job_title, salary FROM jobs WHERE salary > ALL (3000, 5000, 9000);
![Page 25: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/25.jpg)
www.artofit.se 2010-10-27 25
Värde saknas:IS NULL och IS NOT NULL • NULL betyder att värdet är okänt, saknas eller är ej användbart• Ej samma som talet 0 som är ett värde• Kan inte jämföras med andra värden, använd ej =
NULL-värden måste kontrolleras var för sig • Kontrolleras med IS NULL och IS NOT NULL
SELECT first_name, last_name, manager_id FROM employees WHERE manager_id IS NULL;
![Page 26: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/26.jpg)
www.artofit.se 2010-10-27 26
Sammansatta villkor:AND och OR• Man grupperar villkor med AND och OR
- AND begränsar urvalet ytterligare- OR utökar urvalet ytterligare
• Man kan kombinera ihop hur många villkor man vill i WHERE-satsen• AND utvärderas alltid före OR
- använd alltid paranteser ( ) för att styra utvärderingsordningen
SELECT first_name, last_name, manager_id FROM employees WHERE first_name LIKE 'D%' AND (last_name LIKE 'G%'
OR last_name LIKE 'B%');
![Page 27: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/27.jpg)
www.artofit.se 2010-10-27 27
ORDER BY – Sortera data• Sorterar rader som hämtas• Består av minst 3 delar:
- SELECT kolumner FROM tabeller WHERE villkor ORDER BY kolumner
• Att skriva en fråga, se datamodell:1. Vilka tabeller?2. Vilka kolumner?3. Vilket villkor?4. Sorteringskolumner?
![Page 28: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/28.jpg)
www.artofit.se 2010-10-27 28
Sortera
SELECT last_name, first_name, manager_id FROM employees WHERE manager_id = 145ORDER BY last_name DESC, first_name;
• ORDER BY anges efter eventuell WHERE-sats• Sorteringsordningen bestäms av ordningen på
kolumnerna- 1:a kolumn=1:a sortering, 2:a kolumn=2:a sortering osv
• Stigande sortering (ASC) är standard och anges ej: A-Z, 1-100
• Fallande sortering fås genom att skriva DESC efter kolumnnamnet
![Page 29: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/29.jpg)
www.artofit.se 2010-10-27 29
forts. Sortera
SELECT last_name, first_name, manager_id FROM employees WHERE manager_id = 145ORDER BY 1 DESC, 2;
• Istället för kolumnnamn kan man ange sekvensnumret i SELECT-satsen:- 2 anger 2:a kolumnen i SELECT-satsen, i detta fall first_name
![Page 30: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/30.jpg)
www.artofit.se 2010-10-27 30
Alias för kolumner
• Används för att ge en kolumn ett annat namn än kolumn-namnet i tabellen
• Kan göra resultatet mer lättläst• Det finns olika sätt att ange alias, se exempel
SELECT first_name första, first_name "Första namn",
first_name AS "Förnamn" FROM employees;
• Om kolumnalias innehåller specialtecken måste alias anges inom dubbelfnuttar ”alias”
![Page 31: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/31.jpg)
www.artofit.se 2010-10-27 31
UNION och UNION ALL
• UNION och UNION ALL visar all data som finns i de båda dataseten.• UNION tar bort dubletter• UNION ALL tar med dubletter• Varje SELECT måste ha samma antal kolumner• Matchande kolumner måste ha samma datatyp• Använd kolumnposition vid sortering
SELECT first_name, last_name, manager_id FROM employees UNIONSELECT first_name, last_name, teacher_id FROM studentsORDER BY 3;
DS1 DS2
![Page 32: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/32.jpg)
www.artofit.se 2010-10-27 32
MINUS och INTERSECT• MINUS tar bort data från dataset1 som finns i dataset2• Ange den kolumn du vill subtrahera på först i
SELECT-satsen
SELECT manager_id FROM employees MINUSSELECT teacher_id FROM students
• INTERSECT visar data som är gemensamt för dataset1 som finns i dataset2
SELECT manager_id FROM employees INTERSECTSELECT teacher_id FROM students
DS1 DS2
DS1 DS2
![Page 33: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/33.jpg)
www.artofit.se 2010-10-27 33
Funktionerhttp://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions001.htm
• Används för att omvandla data till något annat än det som lagras i databasen, t ex:– ändra värden– kombinera värden för att skapa nya– ändra värdens format
• Kan användas i alla typer av frågor• Kan användas i både SELECT-, WHERE- och ORDER BY-satsen• Funktionstyper:
– Individuella: varje rad utvärderas var för sig– Gruppfunktioner: ett antal rader utvärderas samtidigt
• Format:– funktionsnamn(argument) ex. LENGTH(last_name)– funktionsnamn(arg1,arg2,arg3…argN) ex. SUBSTR(email, 1, 4)
![Page 34: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/34.jpg)
www.artofit.se 2010-10-27 34
Text-funktioner• LOWER(email) – ändrar alla tecken i strängen till gemener • UPPER(first_name) – ändrar alla tecken i strängen till versaler• INITCAP(last_name) – omvandlar första bokstaven i ordet till en versal• LPAD(last_name, 20, ‘*‘) lägger till *:or till vänster så att strängen blir
20 tkn lång• RPAD(last_name, 20, ‘*‘) lägger till *:or till höger så att strängen blir 20
tkn lång • LTRIM(salary, ‘0’) – tar bort 0:or i slutet av strängen• RTRIM(salary, ‘0’) – tar bort 0:or i början av strängen• SUBSTR(email, 1, 4) – visar 4 tecken i strängen räknat från 1:a tecknet • LENGTH(last_name) – räknar ut antal tecken i strängen• REPLACE(first_name, ‘Steven’, ‘Steve’) – ersätter Steven med Steve• CONCAT(first_name, last_name) eller || - slår ihop två strängar till en• TO_NUMBER(‘23123’) – omvandlar tecknen 23123 till numeriska värdet • TO_DATE( ‘20101213’, ‘YYYY-MM-DD’) – omvandlar till datum 2010-12-13
![Page 35: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/35.jpg)
www.artofit.se 2010-10-27 35
Numeriska-funktioner
• ABS(-2) ger absoluta vädret av talet(alltid ett positivt värde)
• SIGN(salary) returnerar 1 för positiva värden -1 för negativa och 0 för noll
• MOD(salary, 7) returnerar resten av divisionen salary/7. Dividera med 2 för att kontrollera om värdet är udda eller jämnt.
• ROUND(salary, 0) avrundar salary till närmaste heltal(utan decimal)
• TRUNC(salary, 0) hugger av salary till närmaste heltal(avrundar alltid nedåt)
• Operatorer +, - * och / kan användas i SQL
![Page 36: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/36.jpg)
www.artofit.se 2010-10-27 36
Datum-funktioner
• ADD_MONTHS(hire_date, 5) - adderar 5 månader till hire_date
• MONTHS_BETWEEN(sysdate, hire_date) - beräknar antal månader mellan hire_date och sysdate
• LAST_DAY(sysdate)- anger sista dagen i månaden• SYSDATE - anger aktuell tid i databasen • TRUNC- returnerar datum utan tidsangivelse• ROUND(sysdate, ‘format’) - avrundar datum till angivet format• TO_CHAR(sysdate, ‘format’) - omvandlar datum till tecken eller numeriskt värde
![Page 37: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/37.jpg)
www.artofit.se 2010-10-27 37
Formatmask DatumTO_CHAR(datum, ’datumformat’)
• YYYY Fyrasiffrigt år 2010• YEAR År TWENTY TEN• RR Två siffror sekel 10• MM Tvåsiffrig månad 11• MON Trebokstavs-förkortning månad NOV• MONTH Månad i versaler NOVEMBER• Month Månad November• DD Numerisk dag 03• DAY Veckodag Onsdag• DY Tvåbokstavs-förkortning veckodag On• D Dag i veckan, söndag=1 3• HH el. HH12 Timmar (00-12) 01• HH24 Timmar (00-23) 13• MI Minuter 03• SS Sekunder 45• AM el PM Förmiddag/eftermiddag PM• WW Vecka på året 44• Q Kvartal på året 4
![Page 38: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/38.jpg)
www.artofit.se 2010-10-27 38
NVL-funktionerGer en riktig behandling av NULL-värdet, utan NVL blir addition med NULL
alltid NULL.• NVL(arg1, arg2)
- arg1 är kolumnnamnet, om arg1 inte är NULL ger NVL dess värde- om arg1 är NULL ges värdet på arg 2
SELECT last_name, salary * NVL(commission_pct, 0) +
salary FROM employees;
• COLAECHE(exp1, exp2, exp3) – visar första värdet från vänsters som ej är null
• NVL2(exp, if null, if not null) – testar om exp är null och anger värdet• NULLIF(exp1, exp2) anger null om exp1=exp2
![Page 39: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/39.jpg)
www.artofit.se 2010-10-27 39
Övriga funktioner• DECODE(jobid, ’IT_PROG’, ’PROGRAMMERARE’, ’ADM’)
- Om jobid= ’IT_PROG’ så ’IT’ annars ’ADM’)• CASE
WHEN salary > 0 THEN salary*0.04ELSE 0
END - Om salary >0 så salary*0.04 annars 0
• CASE salaryWHEN 2900 THEN salary*0.04WHEN 0 = 0 THEN 0ELSE null
END - Om salary=2900 så salary*0.04, om salary=0 så 0 annars null
![Page 40: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/40.jpg)
www.artofit.se 2010-10-27 40
Gruppfunktioner
• Ger ett resultat för ett antal rader• Kan användas för alla numeriska värden• Vissa fungerar även på text och datum• MIN, MAX och COUNT fungerar med alla datatyper• COUNT DISTINCT visar antal unika värden i en kolumn• AVG kan endast användas på numeriska värden
SELECT AVG (salary) FROM employees;
![Page 41: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/41.jpg)
www.artofit.se 2010-10-27 41
Gruppfunktioner
• SUM(salary) summerar salary
• COUNT(employee_id) räknar antalet employee_id:n
• MAX(salary) visar högsta salary
• MIN(salary) visar lägsta salary
![Page 42: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/42.jpg)
www.artofit.se 2010-10-27 42
Gruppfunktioner begränsningar• Du kan INTE välja att få enstaka och gruppresultat tillsammans:
SELECT first_name, last_name, MIN (salary) FROM employees;
– Denna sats ger ett felmeddelande– Du måste gruppera de enstaka resultaten (first_name och
last_name) för att sqlsatsen ska fungera. Detta ger dock inte önskat resultat.
![Page 43: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/43.jpg)
www.artofit.se 2010-10-27 43
GruppfunktionerGROUP BY• Används för att gruppera resultatet
SELECT department_id, COUNT (employee_id) FROM employees GROUP BY department_id;
![Page 44: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/44.jpg)
www.artofit.se 2010-10-27 44
GruppfunktionerHAVING• Används för att filtrera GROUP BY resultat• Alias kan ej användas på kolumnnamnen vid HAVING
SELECT department_id, COUNT (employee_id) FROM employees GROUP BY department_idHAVING COUNT(employee_id) > 5;
![Page 45: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/45.jpg)
www.artofit.se 2010-10-27 45
Frågor mot flera tabeller
EmployeesEmployee_idFirst_nameLast_nameDepartment_idManager_id
DepartmentsDepartment_idDepartment_nameManager_id
• JOINS används för att kombinera kolumner från en eller flera tabeller
![Page 46: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/46.jpg)
www.artofit.se 2010-10-27 46
Att skriva JOINS
• Att skriva en join, se datamodell:1. Vilka kolumner vill du se?2. Vilka tabeller finns kolumnerna i?3. Vilka gemensamma kolumner har dessa tabeller?4. Vilken relation har dessa tabeller(1:1, 1:n eller n:n)?
• Använd alias för tabellnamn
SELECT first_name, last_name, department_name, e.department_id
FROM employees e, departments d WHERE e.department_id = d.department_id AND department_name LIKE 'IT';
![Page 47: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/47.jpg)
www.artofit.se 2010-10-27 47
Jointyper
• EQUIJOIN (INNER JOIN)– WHERE e.department_id = d.department_idOm du glömmer att ange villkoret mellan tabellerna får
du en ”Cartesian product”, dvs du får alla raderna från båda tabellerna
• OUTER JOIN– WHERE e.department_id(+) = d.department_idDet är tabellen som kan sakna värden som skall ha + -
tecknet
• SELF-JOIN– SELECT e.last_name employee, m.last_name manager
FROM employees e, employees m WHERE e.manager_id = m.employee_id;
![Page 48: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/48.jpg)
www.artofit.se 2010-10-27 48
EQUIJOIN (INNER JOIN)
• Hämtar värden från två eller flera tabeller där kolumnvärdena matchar.
• Specificera i SELECT från vilken tabell kolumnvärdet skall hämtas. SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id;
• Om du glömmer WHERE-villkoret får du en ”Cartesian product”, alla rader i ena tabellen matchas mot alla rader i den andra tabellen.
![Page 49: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/49.jpg)
www.artofit.se 2010-10-27 49
OUTER JOIN
• När du vill se alla värden från en tabell och de värden från en annan tabell som matchar.
SELECT d.department_name, e.last_name FROM departments d, employees e WHERE d.department_id = e.department_id(+);
• (+) –tecknet sätts på den tabell som kan sakna matchande värden
• När värde saknas returneras NULL
![Page 50: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/50.jpg)
www.artofit.se 2010-10-27 50
SELF JOIN
• Används när en tabell refererar sig själv• Måste använda alias för tabellen i FROM-satsen
SELECT e.employee_id AS employeeid, e.last_name AS employee, m.employee_id AS managerid, m.last_name AS manager FROM employees e, employees mWHERE e.manager_id = m.employee_id;
![Page 51: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/51.jpg)
www.artofit.se 2010-10-27 51
Subfrågor
• En fråga som ställs i WHERE satsen• Resultatet av subfrågan används för att lösa huvudfrågan
SELECT department_id, last_name FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE
employee_id = 121);
• Går att nästla obegränsat antal frågor• Subfrågan kan innehålla tabeller som inte finns i huvudfrågan• Subfrågan kan inte innehålla ORDER BY
![Page 52: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/52.jpg)
www.artofit.se 2010-10-27 52
Databehandling
• Data Manipulation Language(DML)– INSERT: lägga till data– UPDATE: ändra data– DELETE: ta bort data
![Page 53: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/53.jpg)
www.artofit.se 2010-10-27 53
INSERT- Lägg till data
INSERT INTO employees (employee_id, last_name, first_name, email,
hire_date, job_id, salary)VALUES (10000, 'Hult', 'Nisse', '[email protected]',
'2002-10-19', 'IT_PROG', 5000);
• Använd DESCRIBE för att visa kolumntyp och ordningsföljd• Värden skiljs åt med komma• Värdet måste vara av rätt datatyp• Tecken- och Datumsträngar skall vara inom apostrofer• Kolumn som inte anges i INSERT får värdet NULL• Använd SYSDATE för registrering av dagens datum
![Page 54: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/54.jpg)
www.artofit.se 2010-10-27 54
UPDATE – Ändra data
UPDATE employees SET last_name = 'Hulten', first_name = 'Nils' WHERE employee_id = 10000;
• GLÖM INTE WHERE-satsen!!! Annars uppdateras samtliga poster
• Testa WHERE-villkoret i en SELECT-sats först!!!
![Page 55: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/55.jpg)
www.artofit.se 2010-10-27 55
DELETE – Ta bort data
DELETE FROM employeesWHERE employee_id = 10000;
• GLÖM INTE WHERE-satsen!!! Annars uppdateras samtliga poster
• Testa WHERE-villkoret i en SELECT-sats först!!!• Om du vill ta bort ett värde från en kolumn, sätt värdet
till NULL med UPDATE-kommando
![Page 56: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/56.jpg)
www.artofit.se 2010-10-27 56
TRANSAKTIONER
• Är ändringar som utförs mellan två COMMIT• Antingen sparas hela transaktionen genom COMMIT
eller inget av transaktionen genom ROLLBACK.
• Vid systemfel i en transaktion görs en ROLLBACK automatiskt
![Page 57: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/57.jpg)
www.artofit.se 2010-10-27 57
COMMIT
• Används för att göra INSERT, UPDATE och DELETE permanenta i databasen.
COMMIT;
![Page 58: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/58.jpg)
www.artofit.se 2010-10-27 58
ROLLBACK
• Tar bort alla förändring till senast COMMIT genom att rulla tillbaka arbetet
ROLLBACK;
![Page 59: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/59.jpg)
www.artofit.se 2010-10-27 59
Objekt
• Tabell• Constraints – kolumnregler NOT NULL, PRIMARY KEY, FOREIGN KEY osv
• Index – används för att snabba upp sökningar i databasen• Vy – virtuell tabell som inte innehåller data• Sekvenser – räknare som automatiskt ger unika värdem
![Page 60: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/60.jpg)
www.artofit.se 2010-10-27 60
Index
• Sorterar datat i en eller flera kolumner– Snabbare sökning än i tabellen där datat ligger i en slumpmässig
ordning• Obegränsat antal index på en tabell
– Många index gör att Insert, Update och Delete kommandon tar längre tid
– Uppdateras automatiskt när tabellen uppdateras• Påverkar inte SQL syntaxen• En Primary Key skapar ett unikt index
![Page 61: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/61.jpg)
www.artofit.se 2010-10-27 61
Vyer
• En virtuell tabell• Har inget eget data• En SELECT-sats där reultatet blir en tabell• Kan inte använda ORDER BY i SELECT-satsen vid skapande av vyn• Under vissa förhållanden går det att uppdatera en underliggande tabell
![Page 62: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/62.jpg)
www.artofit.se 2010-10-27 62
Behörighet
• Skapa användare:– CREATE USER nisse IDENTIFIED BY hult;
• Ändra lösenord:– ALTER USER nisse IDENTIFIED BY sten;
• Tilldela användare rättigheter– GRANT CONNECT TO nisse;
• Ta bort rättigheter:– REVOKE CONNECT FROM nisse;
• Ta bort användare:– DELETE USER nisse;
![Page 63: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/63.jpg)
www.artofit.se 2010-10-27 63
FRÅGOR ?
![Page 64: Sql utbldning](https://reader031.fdocument.pub/reader031/viewer/2022030316/58734b0c1a28ab56378b5021/html5/thumbnails/64.jpg)
www.artofit.se 2010-10-27 64