120 likes | 274 Views
Mer om SQL-spørringer og funksjoner. In 135 Datamodellering og Databaser. Logisk utføring av spørringer. Produktet av alle tabeller i FROM dannes WHERE blir utført for å eliminere rader som ikke fyller vilkåret Radene grupperes ved hjelp av kolonnene i GROUP BY
E N D
Mer om SQL-spørringer og funksjoner In 135 Datamodellering og Databaser
Logisk utføring av spørringer • Produktet av alle tabeller i FROM dannes • WHERE blir utført for å eliminere rader som ikke fyller vilkåret • Radene grupperes ved hjelp av kolonnene i GROUP BY • Grupper som ikke tilfredsstiller having blir eliminert • Uttrykkene i SELECT beregnes • Dersom vi har SELECT DISTINCT blir duplikatrader eliminert • UNION gjøres etter at hver sub-select er beregnet • Radene sorteres i følge ORDER by (I virkeligheten optimaliseres det ved at en annen rekkefølge (2 før 1) blir brukt, men virkningen skal være den samme)
Formatering av tall • to_char omdanner tall til streng. Du kontrollerer formatet med en formatstring to_char(1234) gir '1234' to_char(0.1415,'9.00') gir '.14' to_char(0.1415,'00.00) gir '00.14') to_char(3120)
Du kan enten bruke en dato-litteral UPDATE EXAMPLESET BDAY=DATE '1980-6-13' Eller du kan bruke to_date funksjonen to_date tolker datoen som angitt i en format-string, se til høyre UPDATE EXAMPLE SET BDAY= TO_DATE(12.1,'DD.MM'); SELECT BDAY FROM EXAMPLE;BDAY12.01.2005 Å legge inn dato i et date-felt Når bare dag og måned er oppgitt, brukes årets år
Å få ut dato med ønsket format • SELECT TO_CHAR(BDAY,'DD/MM/YY') FROM EXAMPLE; • 24/04/05 • SELECTTO_CHAR (BDAY,'MON DD. YYYY') FROM EXAMPLE; • APR 24. 2005 Hvordan får du vist datoensom år med fire siffer, ukenummer og ukedag? 17/SØNDAG Bruk fantasien! SELECT TO_CHAR(BDAY,'WW/DAY') FROM EXAMPLE;
Eksempler • Å finne første dato i en kollonne • SELECT MIN(<kollonne>) FROM <table>; • Å finne dager mellom to datoer • SELECT dato2-dato1 AS varighet FROM ... • Å finne en dato 15 dager etter en dato • SELECT fakturadato+15 AS betalingsfrist ... • Å finne antall dager siden en hendelse • SELECT TRUNC(sysdate)-FDATO AS dager
Tre typer underspørringer: Verdispørring gir én verdi som resultat SELECT MAX(PRIS) FROM.. brukes i stedet for en verdi i WHERE-delen Kolonnespørring Gir én kolonne av verdier som resultat SELECT AKSJEKODE FROM AKSJE WHERE... Kan brukes i stedet for en liste i WHERE-delen Tabellspørring Gir én tabell som resultat Kan brukes i stedet for en tabell i FROM-delen SELECT AKSJEKODE, AKSJENAVN FROM AKSJE WHERE PE>12 Bruk av underspørringer Spørringer som slår sammen resultater UNION: Tabellspørring UNION Tabellspørringkrever at tabellene har samme kolonner og viser radene fra de to spørringene i én tabell. Underspørring er et trinn på veien SELECT X,Y, Z FROM <Tabellspørring>WHERE ... SELECT X,Y,ZFROM <tabell>WHERE X in <Kolonnespørring> SELECT X,Y,ZFROM <tabell>WHERE X=<Verdispørring> Underspørringer (subquery)
Underspørringer (Subquery) • Underspørringer gjør det mulig å dele opp kompliserte spørringer i flere enkle spørringer (Splitt og behersk) • Arbeidet blir lettere med underspørringer • Med underspørringer, kan man arbeide trinnvis • Det er forskjell mellom databasemotorer når det gjelder mulighet for underspørring • Har du ikke underspørringer blir det vanskeligere å formulere kompliserte spørringer • View er et alternativ til underspørringer • Temporære tabeller er et annet alternativ til underspørring