DAG HOFTUN KNUTSEN daghk@online.no Bruk og misbruk av SQL DAG HOFTUN KNUTSEN daghk@online.no.

Slides:



Advertisements
Liknende presentasjoner
12.Studienreise nach Finnland,
Advertisements

Mer om SQL-spørringer og funksjoner
Trykk på mus eller tastatur for neste bilde…
Hans Olav Norheim
Effektiv prosjektplanlegging
om | navigator™ xlreport™
© 2006 IFS AB. All rights reserved.
Litt mer om PRIMTALL.
Hjemmeoppgave 1: Å høre etter NAVN: ……………………………….. DATO: ……………………….
Grafisk design Visuell kommunikasjon
Mange til mange sammenhengen
Høgskolen i Oslo Webprogrammering Grunnleggende PHP.
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
Kontrollstrukturer (Kapittel 3)
Møre og Romsdal. 2 Ligger det et bedehus eller et kristelig forsamlingshus (ikke kirke) i nærheten av der du bor? (n=502) i prosent.
Avansert SQL og problemløsning
Monopolistisk konkurranse og oligopol
Databaser Verktøybok om Access med innslag av Frontpage: Snarveien til Access.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
1 Kap 04 Datamodellering. 2 Datamodellering -Et språk for å analysere og beskrive virkeligheten. -En metode for å beskrive naturlige sammenhenger i data.
2. Planter. Del 1 (1–4). Nivå 2. Side 19–24
Grunnleggende matematikk
Presentasjon Fylkesbiblioteket i Akershus. Spørreundersøkelse blant bibliotekansatte i Akershus. 1.
Gjenfinningssystemer og verktøy II
Databasehåndtering med MySQL
Forelesningsnotater SIF8039/ Grafisk databehandling
ANDROID-PROGRAMMERING VÅREN ACTIVITY OG INTENTS Repetisjon fra forrige gang.
Kvalitetssikring av analyser til forskningsbruk
SQL The questing beast Sir Thomas Mallory. Codds krav 5.Krav om omfattende språk for datahåndtering Det må finnes et relasjonelt språk som støtter datadefinisjon,
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
INF150 Programmering mandag 11.9
Hvordan skrive en god utredning?
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
Kap 06 Diskrete stokastiske variable
Norsk Finansbarometer 2012 Norsk Finansbarometer 2012 Norsk Finansbarometer 2012 TNS Gallup Oslo, 2012 Det norske skadeforsikrings- markedet og dets bevegelser.
Om Norsk Finansbarometer 2014
Entity Framework Andreas Knudsen, Bekk Consulting AS 31/
SQLHiA Transaksjoner. SQLHiA TransaksjonDefinisjon En transaksjon er en serie av en eller flere SQL-statement som til sammen danner en logisk enhet. Med.
Skriv om slik at setningene betyr omtrent det samme
Kapittel 1, oppgave b) å kaste loss å seile uvær (n) kuling (m)
Livet etter Frontpage og Access Tom Heine Nätt. Agenda Frontpage Hvorfor bytte? Krav til et webutviklingsverktøy Alternative webutviklingsverktøy Dreamweaver.
SINTEF Teknologi og samfunn PUS-prosjektet Jan Alexander Langlo og Linda C. Hald 1 Foreløpig oppsummering – underlag for diskusjon på PUS-forum
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
Malverk intern produktopplæring
GRØNNALGER BRUNALGER RØDALGER
1 BM-dagen 29.okt BM1 Fysisk miljøplanlegging Studieprogram for Bygg- og miljøteknikk Meny Prosjektoppgaven Arealbruk og befolkning Transport og.
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Structured Query Language Kræsj-kurs
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Dynamiske nettsider PHP Del 4 – Eksterne datakilder.
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
1 Oppgave gjennomgang Kap. 1 og 2. 2 Oppgaver -Kap 1: 5, 6, 7, 10, 12, 16, 22 og 25 -Kap 2: 2, 6, 10, 12, 13, 14 og 20.
Skjemaendringer i systemer bestående av XML-data i relasjonsdatabaser Høgskolen i Gjøvik Master i Medieteknikk, Marianne Brattrud.
Sett inn preposisjoner eller adverb som passer
Inflation og produktion 11. Makroøkonomi Teori og beskrivelse 4.udg. © Limedesign
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Kapittel 1, oppgave i) Sett inn preposisjoner eller adverb som passer.
Dagligbankundersøkelsen Fakta Dagligbankundersøkelsen intervju Befolkning 15 år + TNS Gallup Forfatter Bente Pettersen Roar Thorvaldsen.
Gamle systemer In 140 Forelesning Nr 19 Sommerville kap 26.
Befolkning og arbejdsmarked 7. Mikroøkonomi Teori og beskrivelse © Limedesign
Upload av bildefiler Utdrag fra ImageIn Ved Kirsten Klæbo Tirsdag 25/11-03.
Utskrift av presentasjonen:

DAG HOFTUN KNUTSEN daghk@online.no Bruk og misbruk av SQL DAG HOFTUN KNUTSEN daghk@online.no

Agenda Generelt om SQL 5 vanlige feil 5 gode tips + Noen nyheter i 2005

Bakgrunn og historikk SQL = Structured Query Language Misvisende navn: Det er ikke bare query Stammer opprinnelig fra IBM SystemR i 1976, protoyp som siden ble DB2 Kritisert for ikke å følge den matematiske teorien godt nok Resultatorientert Spesifiser ønsket resultat, ikke hvordan resultatet skal produseres Standardisert, benyttes av alle relasjonsdatabaseprodukter Men alle avviker mer eller mindre fra standarden Transact-SQL Sybase versjon av SQL fra 1987 Utvider SQL med prosedyrespråk

Ikke bare “Query” Data Definisjon CREATE, ALTER, DROP Adgangskontroll GRANT, REVOKE, DENY Oppdatering INSERT, UPDATE, DELETE Enkel syntax: Noen få regler Vanskeligheten er å utnytte kraften i språket på best mulig måte Vanskelig å verifisere at en setning er logisk korrekt

Aksessmetode Server Klient SQL: Eneste måte å aksessere tabellene i databasen Server Klient Proc SQL SQL

Enkelt eller komplisert Enkle SQL setninger Leser en rad av gangen, tilsv. fil lesing Klient program gjør mesteparten av jobben Kompliserte SQL setninger Joins, subqueries, funksjoner, aggregering Server gjør mesteparten av jobben kompleksitetsgrad Lett å forstå Lett å konvertere gamle filbaserte system Mindre kode å skrive og vedlikeholde Bedre ytelse Vanligvis dårlig ytelse Kan bli for komplisert for både programmerer og optimizer

Agenda Generelt om SQL 5 vanlige feil 5 gode tips

Feil nr. 1: NULL-verdier Null-verdi i uttrykk Resultatet blir NULL Bruk ISNULL eller COALESCE for å gjøre om NULL til ordentlige verdier

Feil nr. 1: NULL-verdier NULL-verdi i betingelser NULL er aldri lik, ulik, større eller mindre enn noenting NULL-verdier er aldri like, ulike, større eller mindre enn hverandre

Feil nr. 1: NULL-verdier NULL-verdi ved IN og NOT IN IN “overser” NULL-verdier En eneste NULL-verdi gjør at NOT IN ikke er oppfylt

Feil nr. 2: Datamodellen Ikke kjenne betydningen av datamodellen Tabeller Kolonner Primary keys Foreign keys Statuskoder

Feil nr. 3: Datatyper Implisitt datatype konvertering OrderID har datatype varchar Implisitt konvertering forhindrer bruk av indeks Hvorfor blir resultatet feil?

Feil nr. 4: Subqueries Tilfeldigvis single-row subquery Hvem har lik eller lavere lønn enn King? Setningen er logisk feil, men virker fordi det tilfeldigvis er bare én King

Feil nr. 4: Subqueries Korrelert ved feiltagelse Kolonnen DivisionName finnes ikke I Employees tabellen og hentes derfor fra Divisions tabellen Problemet unngås hvis kolonnene i subqueries alltid kvalifiseres med tabell prefix

Feil nr. 5: OUTER JOIN OUTER JOIN med filterbetingelse “virker ikke” WHERE filter appliseres etter join INNER og OUTER gir samme resultat

Feil nr. 5: OUTER JOIN Legg filteret inn i JOIN betingelsen Da virker OUTER JOIN

Agenda Generelt om SQL 5 vanlige feil 5 gode tips

Tip nr. 1: Unngå “tidsinnstilte bomber” Setninger som slutter å virke pga. endringer andre steder i systemet Hva hvis noen gjør ALTER TABLE og legger til en ny kolonne Description i Products tabellen? Kvalifiser alle kolonner med tabell prefix, også de der det i øyeblikket ikke er strengt nødvendig

Tip nr. 2: Utnytt innebygde funksjoner Skalarfunksjoner, også kalt radfunksjoner Eksempel: Beregning av nettopris

Tip nr. 2: Utnytt innebygde funksjoner Beregnet kolonne Denne beregningen skal sannsynligvis gjentas i mange sammenhenger Kan defineres en gang for alle som en beregnet kolonne

Tip nr. 2: Utnytt innebygde funksjoner Aggregatfunksjoner, også kalt gruppefunksjoner Aggregerer flere rader i kildetabellen sammen til en rad i resultatet Mindre netttrafikk enn om aggregeringen gjøres på klientnivå

Tip nr. 2: Utnytt innebygde funksjoner Matrise rapport Kombinasjon av CASE og SUM CASE fordeler på kolonner SUM aggregerer rader

Tip nr. 2: Utnytt innebygde funksjoner 2005 Tip nr. 2: Utnytt innebygde funksjoner Ny operator for matrise rapporter: PIVOT Gjør implisitt GROUP BY på kolonner som ikke er med i PIVOT klausulen Inline view (derived table) benyttes for å bli kvitt uønskede kolonner

Tip nr. 2: Utnytt innebygde funksjoner 2005 Tip nr. 2: Utnytt innebygde funksjoner Window funksjoner, også kalt analytiske funksjoner Helt ny kategori av funksjoner Konseptuelt utføres disse funksjonene etter at resultatsettet er produsert, men før den endelige ORDER BY Kjennetegnes ved OVER () klausul Kan spesifisere sortering og/eller partisjonering To hovedkategorier RANK funksjoner Aggregatfunksjoner

Tip nr. 2: Utnytt innebygde funksjoner 2005 Tip nr. 2: Utnytt innebygde funksjoner RANK funksjon Finnes også DENSE_RANK som ikke hopper over etterfølgende etter like verdier, og ROW_NUMBER som teller uten hensyn til verdi

Tip nr. 2: Utnytt innebygde funksjoner 2005 Tip nr. 2: Utnytt innebygde funksjoner PARTITION BY deler inn resultatsettet i partisjoner (grupper) Funksjonen beregnes innenfor hver enkelt gruppe

Tip nr. 2: Utnytt innebygde funksjoner 2005 Tip nr. 2: Utnytt innebygde funksjoner Blande rad- og gruppeverdier Tillatt med window funksjon, ikke med “vanlig” aggregatfunksjon

Tip nr. 3: Utnytt joins og subqueries Eksempel: Tabell med romreservasjoner Problemstilling: Finn konflikterende (overlappende) reservasjoner

Tip nr. 3: Utnytt joins og subqueries Eksempel: Beregning av rangnummer hvis RANK ikke er tilgjengelig Advarsel: Blir tung hvis tabellen er stor Alternativ: Tildel rangnummer prosedyrelt

Tip nr. 4: Splitt og hersk Eksempel: Aggregering i flere nivåer Aggregatfunksjoner kan ikke nestes i hverandre Workaround: Subquery i FROM-klausulen Også kalt derived table eller inline-view

Tip nr. 4: Splitt og hersk Et problem kan deles opp i mindre deler Kan løse ellers uløselige problem Forenkler programmering Kan forbedre ytelse Følgende objekter har tabellstruktur og kan brukes til å mellomlagre delresultater Permanent tabell Temporær tabell Derived table (inline view) Common table expression (CTE) (Ny i 2005) Lagret view Indeksert view Tabell variabel Tabell funksjon Alle disse kan leses som tabeller og kan benyttes og kombineres i queries Enkle SELECT-setninger, JOIN, UNION, Subqueries etc. De har ulike egenskaper og er derfor egnet i ulike situasjoner

2005 Tip nr. 4: Splitt og hersk Common Table Expression, også kalt “factored subquery” Mellomting mellom view og derived table Defineres før SELECT i egen WITH klausul Nyttig hvis view-et skal gjenbrukes flere ganger i samme setning

Rekursiv Common Table Expression 2005 Rekursiv Common Table Expression En CTE kan referere til seg selv rekursivt Må bestå av to deler En ikke-rekursiv SELECT kalt anchor member En rekursiv SELECT De to er koblet sammen med UNION ALL Andre mengdeoperatorer er ikke tillatt

2005 Hierarkier Rekursiv CTE er spesielt nyttig for å håndtere hierarkier

2005 Hierarkier Vi vil ha hierarkiet presentert slik: Level 1 Level 2 ID: 2 Fuller ID: 4 Peacock ReportsTo:2 ID: 3 Leverling ID: 1 Davolio ID: 5 Buchanan ID: 8 Callahan ID: 6 Suyama ReportsTo:5 ID: 7 King ID: 9 Dodsworth Level 1 Level 2 Level 3 Vi vil ha hierarkiet presentert slik:

2005 Rekursiv CTE eksempel Anchor member Starting point Recursive member

Tip nr. 5: Eksekveringsplaner Sjekk eksekveringsplanene for ulike alternative løsninger SQL er et resultatorientert språk som beskriver ønsket resultat, ikke hvordan resultatet skal produseres Optimereren er den del av SQL-oversetteren som finner ut hvordan, og forsøker å gjøre det mest mulig effektivt Vanskelig å forutsi hva optimereren vil gjøre Eksekveringsplanen viser hvordan optimereren vil utføre setningen Indeksbruk, join strategi etc

Oppsummering DAG HOFTUN KNUTSEN daghk@online.no Det er god grunn til å sette seg grundig inn i mulighetene i SQL Utnytte kraften i språket, men uten å overdrive Unngå feller og problemer Oppnå god ytelse DAG HOFTUN KNUTSEN daghk@online.no