Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

LC238D Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 8, uke 40 SQL, del 1 - select Hva er SQL?side.

Liknende presentasjoner


Presentasjon om: "LC238D Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 8, uke 40 SQL, del 1 - select Hva er SQL?side."— Utskrift av presentasjonen:

1 LC238D Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 8, uke 40 SQL, del 1 - select Hva er SQL?side 2 Eksempelbaseside 3 SELECT-setningen, syntaksside 4-5 Operatorerside 6 Å hente ut et radintervall fra resultatsettet side 7 Teksterside 8 Sortering - Aggregeringsfunksjonerside 9 Å gruppere dataside 10 Forening (join)side Delspørringerside 15 ANY og ALLside 16 EXISTSside Læreboka: Fra og med kap side 120 fram til kap. 4.4 side 142 unntatt side 122 Se også

2 Datamodellering og databaser Else Lervik, oktober 2011 side 2 Hva er SQL? •Opprinnelig SEQUEL (Structured English Query Language, IBM) •Standard SQL 1986 (ANSI + ISO) - SQL1 •Standard SQL SQL2 (SQL1 + diverse join’s, mm.) •SQL3 (SQL2 + objektorientering, mm., se kap. 7 i læreboka) •Et ikke-prosedyralt språk (hva og ikke hvordan) •De fleste moderne DBMS har støtte for store deler av SQL2 •Programmering av tjeneren, funksjoner, triggere –siste del av kurset (JavaDB med Java) •Mange dialekter (= et superset av et subset av standard) av SQL. –Typiske forskjeller •CREATE TABLE-syntaks •Lovlige datatyper •Datatyper for dato og klokkeslett •Funksjoner for strengbehandling –Se f.eks. •Læreboka følger SQL-92-standarden, forelesninger og øvinger viser JavaDB-syntaks (og i noen tilfeller Oracle-syntaks)

3 Datamodellering og databaser Else Lervik, oktober 2011 side 3 Eksempelbase prod_nrprod_navnfargekodevektprod_by 1synålerrød12Lillehammer 2bindersgrønn17Porsgrunn 3skruerblå17Risør 4skruerrød14Lillehammer 5knapperblå12Porsgrunn 6spikerrød19Lillehammer lev_nrlev_navnstatuslev_by 1Svendsen20Lillehammer 2Jensen10Porsgrunn 3Bø30Porsgrunn 4Christiansen20Lillehammer 5Andersen30Arendal lev_nrprod_nrantall leveranse leverandor produkt Sqlscript vedlagt

4 Datamodellering og databaser Else Lervik, oktober 2011 side 4 SELECT-setningen •SELECT [DISTINCT | ALL] { * | { {table | view}.* | expr } [ [AS] c_alias ] [, { {table | view | snapshot}.* | expr } [ [AS] c_alias ] ]... } FROM {table | view} [t_alias] [, {table | view} [t_alias] ]... [WHERE condition ] [GROUP BY expr [, expr]... [HAVING condition] ] [{UNION | UNION ALL | INTERSECT | EXCEPT} SELECT command ] [ORDER BY {expr|position} [ASC | DESC][, {expr|position} [ASC | DESC]]...] [OFFSET { integer-literal | ? } {ROW | ROWS} -- nytt i SQL-2008 FETCH { FIRST | NEXT } [integer-literal | ? ] {ROW | ROWS} ONLY] (ROW is synonymous with ROWS and FIRST is synonymous with NEXT) •Eksempel: SELECT lev_navn FROM leverandor WHERE status < 25; •Logisk skjer følgende: 1. Først “beregnes” alt fra og med FROM til og med HAVING. Resultatet er alltid en tabell T1, som er “input” til trinn 2: 2. En velger / beregner de kolonnene som er spesifisert etter SELECT. Resultatet er tabellen T2. 3. Dersom DISTINCT er spesifisert elimineres duplikater fra T2. Resultat T3. 4. Eventuell sortering. 5. Hent ut et intervall med rader fra resultatet •Mengdeoperasjoner, UNION/INTERSECT/EXCEPT, gjennomgås ikke i dag, men se forelesning 3.

5 Datamodellering og databaser Else Lervik, oktober 2011 side 5 Hva kan vi ha i SELECT-listen? –* betyr alle kolonnene –tabellnavn.* betyr alle kolonnene i en bestemt tabell –kolonnenavn eller tabellnavn.kolonnenavn dersom kolonnenavnet ikke er entydig i de tabellene som er nevnt etter FROM –uttrykk der verdien er et tall eller en tekststreng, vanligvis basert på kolonner. Kolonnenavn kan være argument til funksjoner (max, min, …) eller operand til operatorer (+ - osv.), –Kolonner kan ha alias: –select p.prod_navn, lo.lev_navn, lev.antall from produkt p, leveranse lev, leverandor lo where p.prod_nr = lev.prod_nr and lo.lev_nr = lev.lev_nr;

6 Datamodellering og databaser Else Lervik, oktober 2011 side 6 Operatorer •Sammenlikningsoperatorer: = > = BETWEEN IN –BETWEEN inkluderer grensene •Aritmetiske operatorer: + - * / –/ utfører heltallsdivisjon hvis operandene er heltall •Sammensatte logiske uttrykk lages vhja AND, OR og NOT. AND har høyere prioritet enn OR – slik det også er i Java. •Parenteser kan brukes til å overstyre prioritetene. •Eksempler: 1.Finn produkter med fargekode ’rød’ og som veier mindre enn 15 gram select * from produkt where kode = 'rød' and vekt < 15; 2.Skriv ut produktvekt i kilo select prod_nr, prod_navn, vekt*0.001 "Vekt i kilo" from produkt; 3.Finn produkter som veier mellom 14 og 17 gram select * from produkt where vekt between 14 and 17; 4.Finn leveranser på enten 100, 200 eller 400 enheter select * from leveranse where antall in (100, 200, 400); 5.Finn leveranser som verken er 100 eller 200 enheter select * from leveranse where antall not in(100, 200);

7 Å hente ut et radintervall fra resultatsettet •Kan hente ut kun et radintervall fra resultatsettet: –OFFSET { integer-literal | ? } {ROW | ROWS} FETCH { FIRST | NEXT } [integer-literal | ? ] {ROW | ROWS} ONLY –Eksempler: •Finn de fem største leveransene. Hvis flere leveranser kommer på 5.plass er det nok med én. •Som foran, men start på den nest størst leveransen. •Hent ut kun en leverandør. Datamodellering og databaser Else Lervik, oktober 2011 side 7

8 Datamodellering og databaser Else Lervik, oktober 2011 side 8 Tekster •Æ, ø og å bør alltid prøves ut med den installasjonen du bruker –Sjekk omforming mellom store og små bokstaver –Sjekk sortering (order by, sammenlikningsoperatorene) –Oracle ok –JavaDB: Bruk databaseURL (eksempel): •jdbc:derby://localhost:1527/persondata;territory=no_NO; collation=TERRITORY_BASED;user=vprg;password=vprg •Fungerer fint fra Java (JDBC), problematisk i NetBeans •Tekster kan skjøtes med operatoren || select lev_navn || ' er fra ' || lev_by || ' og har status ' || cast(status as char(10)) from leverandor; (casting er nødv. i JavaDB, trengs vanligvis ikke) •Søker i tekst med = > = BETWEEN IN •Kan søke på deler av ord med operatoren LIKE og jokertegnene _ og % –Navn som slutter på 'sen’: select lev_navn from leverandor where lev_navn like '%sen'; Navn på to tegn: select lev_navn from leverandor where lev_navn like '__’; –Navn med S/s i: select lev_navn from leverandor where upper(lev_navn) like '%S%’; •Funksjonene LOWER() og UPPER() omformer til små/store bokstaver. •INITCAP() omformer bare første bokstav (Oracle ok, JavaDB ikke ok)

9 Datamodellering og databaser Else Lervik, oktober 2011 side 9 Sortering - Aggregeringsfunksjoner •Sortering: –Skriv ut leverandørdata primært sortert etter by, sekundært etter navn –Skriv ut produktinformasjon for produkter med fargekode ’rød’, ordnet etter avtagende vekt. •Aggregeringsfunksjoner: –COUNT(), AVG(), MAX(), MIN(), SUM() –Hvor mange leverandører har vi? –Hvor mye leveres totalt av produkt 2?

10 Datamodellering og databaser Else Lervik, oktober 2011 side 10 Å gruppere data •SELECT “ting” FROM tabell(er) [WHERE betingelse] GROUP BY grupperingskolonne(r) HAVING betingelse; –“ting” må være en av grupperingskolonnene eller en av aggregeringsfunksjonene COUNT, SUM, AVG, MAX, MIN –HAVING brukes til å begrense gruppene 1.Hvor mye leveres av hvert enkelt produkt? 2.Som 1, men ta bare med de produktene der summen er over Hvilke produkter leveres av eksakt én leverandør?

11 Datamodellering og databaser Else Lervik, oktober 2011 side 11 Forening (join) •Forening betyr å hente data fra mer enn en tabell, det kartesiske produkt er basis. –SELECT lev_navn, leverandor.lev_nr, prod_nr, antall FROM leverandor, leveranse; •gir 5 x 11 rader •Begrenser til rader med samme verdi på et felt fra hver av tabellene (naturlig join), vanligvis primærnøkkel – fremmednøkkel •Ekvivalent med bruk av det reserverte ordet JOIN

12 Datamodellering og databaser Else Lervik, oktober 2011 side 12 Mer om likhetsforening (equijoin) •Finn leverandører og produkter som er lokalisert i samme by. •Ønsker å få ut leveransetabellen, men med opplysninger om navn på leverandør og produkt.

13 Ytter-forening (outer join) •Finn leverandører og produkter som er lokalisert i samme by. Ta også med leverandørbyer der det ikke er produkter. •Finn leverandører og produkter som er lokalisert i samme by. Ta også med produktbyer der det ikke er leverandører. •Kombiner de to foran. Datamodellering og databaser Else Lervik, oktober 2011 side 13

14 Datamodellering og databaser Else Lervik, oktober 2011 side 14 Å forene en tabell med seg selv (”selfjoin”) •Sett opp en oversikt over to og to leverandører som er stasjonert i samme by lev_nrlev_navnstatuslev_by 1Svendsen20Lillehammer 2Jensen10Porsgrunn 3Bø30Porsgrunn 4Christiansen20Lillehammer 5Andersen30Arendal leverandor lev1 lev_nrlev_navnstatuslev_by 1Svendsen20Lillehammer 2Jensen10Porsgrunn 3Bø30Porsgrunn 4Christiansen20Lillehammer 5Andersen30Arendal leverandor lev2

15 Datamodellering og databaser Else Lervik, oktober 2011 side 15 Delspørringer (SUB-select) •Kan av og til være et alternativ til forening. –Finn navnene til de som leverer produkt 2. •Forening: •Delspørring: •Finn leverandørnummer og -navn til leverandørene som har statusverdi mindre enn maksimalverdien akkurat nå

16 ANY (SOME) og ALL •Brukes sammen med = > = foran delspørringer som returnerer én kolonne med data som svar •Eksempler: –Finn hvilke produkter som har nummer større enn alle produktene som leveres av leverandør 2 –Finn hvilke produkter som har nummer større enn et hvilket som helst av produktene som leveres av leverandør 2 •Hvis resultatet av delspørringen er en tom mengde –ANY returnerer false –ALL returnerer true Datamodellering og databaser Else Lervik, oktober 2011 side 16

17 Datamodellering og databaser Else Lervik, oktober 2011 side 17 EXISTS i SELECT-setningen •Finn navnene til de som leverer produkt 2. –Forening (foran) –Delspørring (foran) med IN –En tredje mulighet, delspørring med EXISTS

18 Datamodellering og databaser Else Lervik, oktober 2008 side 18 EXISTS, forts •Finn navnene til dem som ikke leverer produkt nr 2 –NOT IN –NOT EXISTS •Finn navnene til dem som leverer alle produktene = divisjon i relasjonsalgebra: leveranse dividert med produkt.prod_nr


Laste ned ppt "LC238D Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 8, uke 40 SQL, del 1 - select Hva er SQL?side."

Liknende presentasjoner


Annonser fra Google