Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Structured Query Language Kræsj-kurs

Liknende presentasjoner


Presentasjon om: "Structured Query Language Kræsj-kurs"— Utskrift av presentasjonen:

1 Structured Query Language Kræsj-kurs
SQL Structured Query Language Kræsj-kurs

2 SQL: Et deklarativt språk som i grovt trekk består av 3 deler: DDL DML
DQL, som vi skal fokusere på idag

3 SQL: Flere standarder, mest brukt sql:1999. Flere dialekter
mySQL har en egen, likner på standarden

4 DDL Brukes til å definere datastrukturen vår Sette skranker
Triggere, etc Litt om dette, men i oblig 2 får vi ferdiglagede DS, eller forhåndsdefinerte DDL

5 DML Manipulerer dataen i strukturen vår IINSERT, UPDATE, DELETE

6 DQL Spør etter dataen vi vil ha fra DM SELECT FROM WHERE

7 mySQL Et relasjons-DBMS I utgangspunktet en ”boks” med tabeller
Evolusjonen har gjort denne meget god

8 DQL:Relasjoner Vi samler dataene våre i relasjoner
Vi kaller hver rad et tuppel Navnene ”øverst” kalles attributter Ingen tupler kan være identiske En relasjon bør inneholde en primærnøkkel Id# Navn Adresse Alder 1 Kari Bremnes Bremneslia 54 2 Viggo Hansen Nrk.no 67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

9 DQL Hvordan skaffe til veie data;spørre etter den?
Antar relasjonen heter personer Vil bruke SQL for å hente alle personene som står oppført Id# Navn Adresse Alder 1 Kari Bremnes Bremneslia 54 2 Viggo Hansen Nrk.no 67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

10 SQL:SELECT Henter data ut fra relasjonen vår
Kan hente all data eller bare en kolonne Skal vi hente ut et utvalg, må vi fortelle hvilke kolonner som skal hentes ut. Husker at kolonnene har navn etter attributter

11 SQL SELECT * FROM personer; * Betyr alle kolonner
Id# navn Adresse Alder 2 Viggo Hansen Nrk.no 67 1 Kari Bremnes Bremneslia 54 4 Hanne Hansen Oslo 26 3 Trine Jensen Mo i Rana 22 * Betyr alle kolonner Id# Navn Adresse Alder 1 Kari Bremnes Bremneslia 54 2 Viggo Hansen Nrk.no 67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

12 SQL:SELECT SELECT navn, Alder FROM personer; FROM personer
Viggo Hansen 67 Kari Bremnes 54 Hanne Hansen 26 Trine Jensen 22 FROM personer WHERE Id = 3; Id# Navn Adresse Alder 1 Kari Bremnes Bremneslia 54 2 Viggo Hansen Nrk.no 67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

13 SQL:SELECT SELECT a,b,c: FROM a [,b,c,d] WHERE (betingelse)
Velger attributter fra relasjonen vår Kan også aggregere (mer om dette senere) FROM a [,b,c,d] Hvilken relasjon? (kan ha flere) WHERE (betingelse) ”Filtrerer” tuplene a < b, f = i g LIKE ’string’ (a< b) AND (f = i) (også or, not)

14 QUIZ: Hvordan velge alle som er under 30 år?
SELECT * FROM personer WHERE Alder < 30 Hvordan gjøre om på denne relasjonen slik at vi kan velge f. eks alle kvinner? Id# Navn Adresse Alder 1 Kari Bremnes Bremneslia 54 2 Viggo Hansen Nrk.no 67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26 Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

15 SQL Velge bare kvinner SELECT * FROM personer_m WHERE Kjønn = ’k’;
WHERE Kjønn <> ’m’; Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

16 Aggregering Brukes i SELECT-clause sum, avg, min, max, cunt
sum: summen av alle verdier i en kolonne avg: gjennomsnittet min: den minste verdien max: count: teller antall forekomster

17 SELECT sum() Vil finne sammenlagt alder Summen av kvinnenes alder?
SELECT sum( Alder ) FROM personer_m; Summen av kvinnenes alder? SELECT sum( Alder ) FROM personer_m WHERE Kjønn = ’k’; Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

18 SELECT avg() Gjennomsnittet av alderen til samtlige
SELECT avg( Alder ) FROM personer_m; Snittet til alderen av alle under 50 SELECT avg( Alder ) FROM personer_m WHERE Alder < 50; Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

19 SELECT min(), SELECT max()
Alderen til yngste kvinnen SELECT min( Alder ) FROM personer_m WHERE kjønn = ’k’; Alderen til eldste mann SELECT max( Alder ) FROM personer_m WHERE kjønn = ’m’; Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

20 Hvor mange tupler? Hvor mange kvinner? Hvor mange under 30?
SELECT count( * ) FROM personer_m; Hvor mange kvinner? SELECT count( * ) FROM personer_m WHERE Kjønn = ’k’; Hvor mange under 30? SELECT count( * ) FROM personer_m WHERE Alder < 30; Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26

21 Join Hva om Trine Jensen kjøper en leilighet til?
Anakronistiske Trine gifter seg ..får enda et sted å bo Må da oppdatere alle oppføringer dersom relasjonen skal forbli konsistent Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26 Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo 26 5 Bergen Id# Navn Adresse Alder Kjønn 1 Kari Bremnes Bremneslia 54 k 2 Viggo Hansen Nrk.no 67 m 3 Trine Hansen Mo i Rana 22 4 Hanne Hansen Oslo 26 5 Bergen 6

22 Join Deler opp tabellen (normaliserer)
Id# Navn Alder Kjønn 1 Kari Bremnes 54 k 2 Viggo Hansen 67 m 3 Trine Jensen 22 4 Hanne Hansen 26 Deler opp tabellen (normaliserer) Et attributt fra adresser er relatert til personer_m Skal noen bytte navn, trenger vi kun å forandre tabell personer_m Skal noen ha nytt bosted, legger vi til et tuppel i Adresser Id# Adresse F_key 1 Bremneslia 2 Mo i Rana 3 Nrk.no 4 Oslo 5 Bergen 6

23 Hvordan ”joine” Vi trenger å vite om alias:
SELECT p.id, p.Navn, a.Adresse FROM personer p, Adresse a Vi ser at id forekommer i begge tabeller, vi trenger å spesifisere hvilken id vi mener Vi vil ”joine” sammen kolonnen med id fra personer og f_key fra Adresse. Skriver vi p.id der p er alias for personer og a.id der a er alias for Adresse er det ingen tvil om hvilke felter vi mener. p.id = a.f_key: Der hvor disse er identiske

24 Join Resultatet blir som om begge tabellene var en, dvs. den som ble normalisert Men vi får ingen oppdateringsanomalier, eller: vi slipper dem.


Laste ned ppt "Structured Query Language Kræsj-kurs"

Liknende presentasjoner


Annonser fra Google