Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

SQL Structured Query Language Kræsj-kurs. SQL: Et deklarativt språk som i grovt trekk består av 3 deler: Et deklarativt språk som i grovt trekk består.

Liknende presentasjoner


Presentasjon om: "SQL Structured Query Language Kræsj-kurs. SQL: Et deklarativt språk som i grovt trekk består av 3 deler: Et deklarativt språk som i grovt trekk består."— Utskrift av presentasjonen:

1 SQL Structured Query Language Kræsj-kurs

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

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

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

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

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

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

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

9 DQL Hvordan skaffe til veie data;spørre etter den? Hvordan skaffe til veie data;spørre etter den? Antar relasjonen heter personer Antar relasjonen heter personer Vil bruke SQL for å hente alle personene som står oppført Vil bruke SQL for å hente alle personene som står oppført Id#NavnAdresseAlder 1 Kari Bremnes Bremneslia54 2 Viggo Hansen Nrk.no67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo26

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

11 SQL SELECT * FROM personer; 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 * Betyr alle kolonner Id#NavnAdresseAlder 1 Kari Bremnes Bremneslia54 2 Viggo Hansen Nrk.no67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo26

12 SQL:SELECT SELECT navn, Alder FROM personer; navn Alder Viggo Hansen 67 Kari Bremnes 54 Hanne Hansen 26 Trine Jensen 22 SELECT navn, Alder FROM personer WHERE Id = 3; navn Alder Trine Jensen 22 Id#NavnAdresseAlder 1 Kari Bremnes Bremneslia54 2 Viggo Hansen Nrk.no67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo26

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

14 QUIZ: Hvordan velge alle som er under 30 år? Hvordan velge alle som er under 30 år? SELECT * FROM personer WHERE Alder < 30 SELECT * FROM personer WHERE Alder < 30 Hvordan gjøre om på denne relasjonen slik at vi kan velge f. eks alle kvinner? Hvordan gjøre om på denne relasjonen slik at vi kan velge f. eks alle kvinner? Id#NavnAdresseAlder 1 Kari Bremnes Bremneslia54 2 Viggo Hansen Nrk.no67 3 Trine Jensen Mo i Rana 22 4 Hanne Hansen Oslo26 Id#NavnAdresseAlderKjønn1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k

15 SQL Velge bare kvinner Velge bare kvinner SELECT * FROM personer_m WHERE Kjønn = ’k’; SELECT * FROM personer_m WHERE Kjønn <> ’m’; Id#NavnAdresseAlderKjønn 1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k

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

17 SELECT sum() Vil finne sammenlagt alder Vil finne sammenlagt alder SELECT sum( Alder ) FROM personer_m; SELECT sum( Alder ) FROM personer_m; Summen av kvinnenes alder? Summen av kvinnenes alder? SELECT sum( Alder ) FROM personer_m WHERE Kjønn = ’k’; SELECT sum( Alder ) FROM personer_m WHERE Kjønn = ’k’; Id#NavnAdresseAlderKjønn 1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k

18 SELECT avg() Gjennomsnittet av alderen til samtlige Gjennomsnittet av alderen til samtlige SELECT avg( Alder ) FROM personer_m; SELECT avg( Alder ) FROM personer_m; Snittet til alderen av alle under 50 Snittet til alderen av alle under 50 SELECT avg( Alder ) FROM personer_m WHERE Alder < 50; SELECT avg( Alder ) FROM personer_m WHERE Alder < 50; Id#NavnAdresseAlderKjønn 1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k

19 SELECT min(), SELECT max() Alderen til yngste kvinnen Alderen til yngste kvinnen SELECT min( Alder ) FROM personer_m WHERE kjønn = ’k’; SELECT min( Alder ) FROM personer_m WHERE kjønn = ’k’; Alderen til eldste mann Alderen til eldste mann SELECT max( Alder ) FROM personer_m WHERE kjønn = ’m’; SELECT max( Alder ) FROM personer_m WHERE kjønn = ’m’; Id#NavnAdresseAlderKjønn 1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k

20 Hvor mange tupler? SELECT count( * ) FROM personer_m; SELECT count( * ) FROM personer_m; Hvor mange kvinner? Hvor mange kvinner? SELECT count( * ) FROM personer_m WHERE Kjønn = ’k’; SELECT count( * ) FROM personer_m WHERE Kjønn = ’k’; Hvor mange under 30? Hvor mange under 30? SELECT count( * ) FROM personer_m WHERE Alder < 30; SELECT count( * ) FROM personer_m WHERE Alder < 30; Id#NavnAdresseAlderKjønn 1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k

21 Join Hva om Trine Jensen kjøper en leilighet til? Hva om Trine Jensen kjøper en leilighet til? Anakronistiske Trine gifter seg Anakronistiske Trine gifter seg..får enda et sted å bo..får enda et sted å bo Må da oppdatere alle oppføringer dersom relasjonen skal forbli konsistent Må da oppdatere alle oppføringer dersom relasjonen skal forbli konsistent Id#NavnAdresseAlderKjønn 1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k 5 Trine Jensen Bergen22k Id#NavnAdresseAlderKjønn1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Jensen Mo i Rana 22k 4 Hanne Hansen Oslo26k Id#NavnAdresseAlderKjønn1 Kari Bremnes Bremneslia54k 2 Viggo Hansen Nrk.no67m 3 Trine Hansen Mo i Rana 22k 4 Hanne Hansen Oslo26k 5 Trine Hansen Bergen22k 6 Oslo22k

22 Join Deler opp tabellen (normaliserer) Deler opp tabellen (normaliserer) Et attributt fra adresser er relatert til personer_m Et attributt fra adresser er relatert til personer_m Skal noen bytte navn, trenger vi kun å forandre tabell 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 Skal noen ha nytt bosted, legger vi til et tuppel i Adresser Id#NavnAlderKjønn 1 Kari Bremnes 54k 2 Viggo Hansen 67m 3 Trine Jensen 22k 4 Hanne Hansen 26k Id#AdresseF_key1Bremneslia1 2 Mo i Rana 3 3Nrk.no2 4Oslo4 5Bergen3 6Oslo3

23 Hvordan ”joine” Vi trenger å vite om alias: Vi trenger å vite om alias: SELECT p.id, p.Navn, a.Adresse FROM personer p, Adresse a 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 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. 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. 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 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 Resultatet blir som om begge tabellene var en, dvs. den som ble normalisert Men vi får ingen oppdateringsanomalier, eller: vi slipper dem. Men vi får ingen oppdateringsanomalier, eller: vi slipper dem.


Laste ned ppt "SQL Structured Query Language Kræsj-kurs. SQL: Et deklarativt språk som i grovt trekk består av 3 deler: Et deklarativt språk som i grovt trekk består."

Liknende presentasjoner


Annonser fra Google