SQL, del 1 - select Hva er SQL? side 2 Eksempelbase side 3

Slides:



Advertisements
Liknende presentasjoner
Mer om SQL-spørringer og funksjoner
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Klikk Aktiver redigering i meldingsfeltet.
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Mange til mange sammenhengen
Høgskolen i Oslo Webprogrammering Grunnleggende PHP.
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Gjenfinningssystemer og verktøy II
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
LC238D Datamodellering og databaser Introduksjon til fagfeltet Else Lervik, august 2012Forelesning 1, uke 34 Datafilerside.
Kontrollstrukturer (Kapittel 3)
Avansert SQL og problemløsning
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Inge Os Sales Consulting Manager Oracle 10 g Server.
Formler og funksjoner.
IS-102 Klassedefinisjoner
Databasehåndtering med MySQL
Eksempel AOA (Activity On Arc)
Kompleksitetsanalyse
Mer grunnleggende matte: Forberedelse til logistisk regresjon
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
Relasjonsmodellen og relasjonsalgebra
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.
Relasjonsmodellen, del II
Normalisering Framstillingen avviker noe fra læreboka,
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
Klargjøring fra forrige gang
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Siste forelesning ER/EER-modellering
Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
In 135 Datamodellering og databaser Introduksjon, Enkeltentiteten, Informasjon Ola Bø.
INF150 Programmering mandag 11.9
LC238D Datamodellering og databaser Else Lervik, september 2011 Forelesning 6, Uke 38 Objektorientering i ER-modeller.
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
DAG HOFTUN KNUTSEN Bruk og misbruk av SQL DAG HOFTUN KNUTSEN
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
Grunnleggende PHP - Ronny Mandal1 Grunnleggende PHP.
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.
DATABASE: Oppgave 2 et medlemsregister for en idrettsklubb med flere idrettsgrener (fotball, håndball, osv). klubben ønsker å lagre informasjon om medlemmenes.
Dynamiske nettsider PHP Del 4 – Eksterne datakilder.
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon
Hvordan kan foreldre bruke de vangligste funksjonene i Itslearning.com
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 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag.
Kontinuerlig kvalitetskontroll. Hvordan komme helt i mål.
Se ellers læreboka, kap , side
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
Variabler, datatyper og uttrykk
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

SQL, del 1 - select Hva er SQL? side 2 Eksempelbase side 3 SELECT-setningen, syntaks side 4-5 Operatorer side 6 Å hente ut et radintervall fra resultatsettet side 7 Tekster side 8 Sortering - Aggregeringsfunksjoner side 9 Å gruppere data side 10 Forening (join) side 11-14 Delspørringer side 15 ANY og ALL side 16 EXISTS side 17-18 Læreboka: Fra og med kap 4.3.2 side 120 fram til kap. 4.4 side 142 unntatt 4.3.4 side 122 Se også http://www.sqlzoo.net/ Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 Hva er SQL? Opprinnelig SEQUEL (Structured English Query Language, IBM) Standard SQL 1986 (ANSI + ISO) - SQL1 Standard SQL 1992 - 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. http://troels.arvin.dk/db/rdbms/ Læreboka følger SQL-92-standarden, forelesninger og øvinger viser JavaDB-syntaks (og i noen tilfeller Oracle-syntaks) Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 Eksempelbase leveranse leverandor lev_nr prod_nr antall 1 300 2 200 3 400 4 5 100 lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 4 Christiansen 5 Andersen Arendal produkt prod_nr prod_navn fargekode vekt prod_by 1 synåler rød 12 Lillehammer 2 binders grønn 17 Porsgrunn 3 skruer blå Risør 4 14 5 knapper 6 spiker 19 Sqlscript vedlagt Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 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. Datamodellering og databaser Else Lervik, oktober 2011

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; Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 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: Finn produkter med fargekode ’rød’ og som veier mindre enn 15 gram select * from produkt where kode = 'rød' and vekt < 15; Skriv ut produktvekt i kilo select prod_nr, prod_navn, vekt*0.001 "Vekt i kilo" from produkt; Finn produkter som veier mellom 14 og 17 gram select * from produkt where vekt between 14 and 17; Finn leveranser på enten 100, 200 eller 400 enheter select * from leveranse where antall in (100, 200, 400); Finn leveranser som verken er 100 eller 200 enheter select * from leveranse where antall not in(100, 200); Datamodellering og databaser Else Lervik, oktober 2011

Å 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

Datamodellering og databaser Else Lervik, oktober 2011 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) Datamodellering og databaser Else Lervik, oktober 2011

Sortering - Aggregeringsfunksjoner 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? Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 Å 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 Hvor mye leveres av hvert enkelt produkt? Som 1, men ta bare med de produktene der summen er over 500 Hvilke produkter leveres av eksakt én leverandør? Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 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 Datamodellering og databaser Else Lervik, oktober 2011

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. Datamodellering og databaser Else Lervik, oktober 2011

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

Å forene en tabell med seg selv (”selfjoin”) Sett opp en oversikt over to og to leverandører som er stasjonert i samme by leverandor lev1 leverandor lev2 lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 4 Christiansen 5 Andersen Arendal lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 4 Christiansen 5 Andersen Arendal Datamodellering og databaser Else Lervik, oktober 2011

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å Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2011 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

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 Datamodellering og databaser Else Lervik, oktober 2011

Datamodellering og databaser Else Lervik, oktober 2008 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 Datamodellering og databaser Else Lervik, oktober 2008