Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afJonathan Villadsen Redigeret for ca. et år siden
1
SQL sortering og gruppering
2
RHS – IT A 2 SQL - sortering Hvis en forespørgsel returnerer mange rækker, kan det være bekvemt at sortere resultatet SQL gør det muligt at sortere resultatet efter værdien af felter i resultatet Til det formål benyttes ORDER BY
3
RHS – IT A 3 SQL - sortering SELECT FROM WHERE ORDER BY Hvilke felter vil jeg have data fra Hvilken tabel skal data komme fra Hvilke betingelser skal data opfylde Hvilken orden skal resultatet sorteres i
4
RHS – IT A 4 SQL - sortering Vi benytter en database med information om film som eksempel Film filmid titel land år genre oscars Skuespiller personid navn land født levende oscars Medvirker filmid personid
5
RHS – IT A 5 SQL - sortering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT * FROM Film ORDER BY titel
6
RHS – IT A 6 SQL - sortering filmidtitellandårgenreoscars 61984UK1984Sci-Fi2 1E.T.USA1982Sci-Fi4 5Hard BoiledKina1992Action0 4LeonFrankrig1994Thriller0 7SevenUSA1995Thriller1 3SultDanmark1966Drama1 2TaxiFrankrig1998Komedie0 SELECT * FROM Film ORDER BY titel
7
RHS – IT A 7 SQL - sortering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT titel, år FROM Film WHEREoscars > 0 ORDER BY titel
8
RHS – IT A 8 SQL - sortering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT titel, år FROM Film WHEREoscars > 0 ORDER BY titel
9
RHS – IT A 9 SQL - sortering titelår 1984 E.T.1982 Seven1995 Sult1966 SELECT titel, år FROM Film WHEREoscars > 0 ORDER BY titel
10
RHS – IT A 10 SQL - sortering Vi kan endda angive mere end et enkelt felt – efterfølgende felter benyttes hvis værdi i første felt er ens Vi kan angive faldende eller stigende orden, ved hjælp af DESC (faldende) og ASC (stigende) ORDER BY oscars DESC, år ASC
11
RHS – IT A 11 SQL - funktioner Vi kan udføre simpel aritmetik i SQL, ved brug af disse funktioner –COUNT (optælling) –SUM (sum) –AVG (gennemsnit) –MIN (minimum værdi) –MAX (maximum værdi) Disse funktioner betegnes aggregate functions (samlende funktioner…?)
12
RHS – IT A 12 SQL - funktioner En sådan funktion arbejder på værdierne i et givent felt Mængden af værdier styres af den angivne søgebetingelse SELECT COUNT(titel) FROM Film WHERE (oscars > 0) Hvor mange film har vundet en Oscar
13
RHS – IT A 13 SQL - funktioner Denne forespørgsel kan også skrives som SELECT COUNT(titel) AS oscarWinners FROM Film WHERE (oscars > 0) Ordet AS gør det muligt at omdøbe et felt i søgeresultatet Ændrer kun navnet, ikke selve resultatet NB!
14
RHS – IT A 14 SQL - funktioner SELECTCOUNT(titel) AS oscarWinners, AVG(oscars) AS averageOscars, MAX(oscars) AS maximalOscars FROMFilm WHERE(oscars > 0)
15
RHS – IT A 15 SQL - funktioner oscarWinnersaverageOscarsmaximalOscars 42.00004
16
RHS – IT A 16 Opgave 4 – SQL Brug Filminformation-databasen fra websiten Kør nedenstående SQL-forespørgsler på databasen –SELECT * FROM Film ORDER BY år ASC –SELECT titel, år FROM Film ORDER BY titel –SELECT MAX(år) AS maxUSA FROM Film WHERE land = ’USA’ –SELECT AVG(år) AS loserYear FROM Film WHERE (oscars = 0) Formulér selv SQL-forespørgsler til at finde nedenstående data: –Find alle oscar-vindende film sorteret efter år (ældste film først) –Find en sorteret liste af filmtitler for franske film –Find året for den ældste film der ikke har vundet en Oscar –Find det gennemsnitlige antal Oscars for Sci-Fi film –Find det totale antal Oscars vundet af film fra USA
17
RHS – IT A 17 SQL - gruppering De samlende funktioner er nyttige til at beregne værdier baseret på alle elementer i resultatet Nogle gange vil vi gerne kunne gøre dette for en bestemt del af resultatet Dette kan gøres ved at bruge WHERE… …men det kan være meget besværligt i praksis
18
RHS – IT A 18 SQL - gruppering Antag vi har en database med film fra mere end 100 lande ”Find det totale antal film lavet i hvert enkelt land” SELECT COUNT(titel) AS filmCount FROM Film WHERE land = ’…’ Mere end 100 forespørgsler…
19
RHS – IT A 19 SQL - gruppering Et bedre alternativ er GROUP BY Syntaks: SELECT FROM GROUP BY Producerer et resultat for hver gruppe, defineret ved den angivne feltliste
20
RHS – IT A 20 SQL - gruppering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT land, COUNT(titel) AS filmCount FROM Film GROUP BY land
21
RHS – IT A 21 SQL - gruppering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT land, COUNT(titel) AS filmCount FROM Film GROUP BY land
22
RHS – IT A 22 SQL - gruppering landfilmCount Danmark1 Frankrig2 Kina1 UK1 USA2
23
RHS – IT A 23 SQL - gruppering landoscarTotal Danmark1 Frankrig0 Kina0 UK2 USA5 SUM(oscars) AS …
24
RHS – IT A 24 SQL - gruppering I det sidste eksempel kunne det måske være nyttigt at udelade grupper, hvor resultatet er lig nul Mere generelt; medtag kun grupper, der opfylder en given betingelse Dette kan opnås ved at benytte HAVING
25
RHS – IT A 25 SQL - gruppering Syntaks: SELECT FROM GROUP BY HAVING
26
RHS – IT A 26 SQL - gruppering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT land, SUM(oscars) AS oscarTotal FROM Film GROUP BY land HAVING(SUM(oscars) > 0)
27
RHS – IT A 27 SQL - gruppering filmidtitellandårgenreoscars 1E.T.USA1982Sci-Fi4 2TaxiFrankrig1998Komedie0 3SultDanmark1966Drama1 4LeonFrankrig1994Thriller0 5Hard BoiledKina1992Action0 61984UK1984Sci-Fi2 7SevenUSA1995Thriller1 SELECT land, SUM(oscars) AS oscarTotal FROM Film GROUP BY land HAVING(SUM(oscars) > 0)
28
RHS – IT A 28 SQL - gruppering landoscarTotal USA5 Frankrig0 UK2 Kina0 Danmark1
29
RHS – IT A 29 SQL - gruppering landoscarTotal USA5 UK2 Danmark1
30
RHS – IT A 30 SQL - gruppering Men… …er HAVING det samme som WHERE..? Ikke helt –WHERE udvælger specifikke poster –HAVING udvælger specifikke grupper som skal med i det endelige resultat Vi kan ikke benytte samlende funktioner i en WHERE betingelse
31
RHS – IT A 31 Opgave 5 – SQL Brug Filminformation-databasen fra websiten Kør nedenstående SQL-forespørgsler på databasen –SELECT genre, AVG(oscars) FROM Film GROUP BY genre –SELECT oscars, MAX(år) FROM Film WHERE (oscars > 0) GROUP BY oscars –SELECT genre, AVG(oscars) FROM Film GROUP BY genre HAVING (COUNT(titel) > 1) Formulér selv SQL-forespørgsler til at finde nedenstående data –Find antallet af film lavet i hvert land. For hvert land skal filmene være grupperet efter genre –Find det gennemsnitlige antal Oscars vundet af film for hvert land –Find antallet af film lavet i hvert land. Kun film lavet efter 1985 skal være med i resultatet
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.