SQL, del 1 - select. Hva er SQL?

Like dokumenter
SQL, del 1 - select. Hva er SQL?

LC238D Datamodellering og databaser SQL, del 1 - SELECT

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

Repetisjon: Normalformer og SQL

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Metaspråket for å beskrive grammatikk

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ragnar Normann 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

En liten rekap. Spørrespråk. I dag SELECT

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

Alle attributter har NULL som mulig verdi. mulige verdier for integer: NULL, 0, 1, 2, 3...

Oppgave 1 (Opprett en database og en tabell)

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Normalisering. Hva er normalisering?

INF1300 Det meste av resten av

INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1

INF1300 Relasjonsalgebra. Et matematisk fundament for å forstå SQL-setninger

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) INF Ellen Munthe-Kaas 1. Institutt for Informatikk

Tabeller og enkle spørringer

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

Normalisering. Hva er normalisering?

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

Relasjonsalgebra Kopi av lysark om relasjonsalgebra. Vi går igjennom denne for å lage et matematisk fundament for forståelsen av hvordan

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

SQL SELECT-FROM-WHERE. Skjemadefinisjon og datainnsetting i SQL. Semantikk bak ein-relasjons-spørring

SQL Structured Query Language. Repetisjon av select spørringer Nestede select spørringer Mengdeoperasjoner Views Flere operatorer

Relasjoner terminologi. Kopi av lysark fra forelesningen 13. oktober. Legges ut inntil notatet som samler alt om SQL kommer...

1. SQL spørringer mot flere tabeller

Normalisering. Hva er normalisering?

Tilkobling og Triggere

HØGSKOLEN I SØR-TRØNDELAG

Databaser: Relasjonsmodellen, del I

SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program

Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg»

SQL Structured Query Language

DBS18 - Strategier for Query-prosessering

INF1300 Introduksjon til databaser: SQL Structured Query Language

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

INF1300 Introduksjon til databaser

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

INF1300 Introduksjon til databaser

Transaksjoner og flerbrukerproblematikk. Transaksjoner

SQL: SELECT-spørringer

Spørsmålskompilering del 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Relasjonsalgebraen. Algebra

Spørsmålskompilering del 1

UNIVERSITETET SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Avansert bruk av SQL. Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer

Relasjoner terminologi

SQL: SELECT-spørringer

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

Relasjonsmodellen, del II

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

Læringsmål og pensum. if (be): else (not_to_be):

SQL Structured Query Language

SQL. SQL-standarder. Flere standarder: ANSI SQL SQL2 (SQL-92) SQL3 (SQL-99) = SQL2 + objekt-relasjonelle egenskaper mm

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ragnar Normann

ORDBMS og OODBMS i praksis

Indre select-setninger Nestede select-setninger

En lett innføring i foreninger (JOINs) i SQL

Relasjonsalgebra. Hva?

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

EKSAMEN. Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene.

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Problemer med Indre joins. Inner joins og manglende verdier med aggregater. Left Outer Join. Outer Joins. Hvor mange har kjøpt hvert produkt?

IN2090 Databaser og datamodellering. 09 Aggregering og sortering

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Enklere syntaks for joins. IN2090 Databaser og datamodellering. 09 Aggregering og sortering. Eksempel: Variable i delspørringer (1)

Repetisjon. IN2090 Databaser og datamodellering. 06 Enkele joins og nestede SELECT. Eksempler: FilmDB. Enkle SELECT-spørringer i et nøtteskall

Spørringer mot flere tabeller

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Databaser. - Introduksjon til SQL med Microsoft SQL Server - Olav Dæhli Databaser - høsten

Øvingsforelesning 1 Python (TDT4110)

Join. Intuitivt: Skjøte sammen to relasjoner. Intuitivt: 1. Beregn R S 2. Velg ut de tuplene som tilfredsstiller joinbetingelsen C

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas

1. SQL datadefinisjon og manipulering

Dagens program. Kunnskapsorganisasjon og gjenfinning 1. Spørring mot databaser: SQL 2 - Spørring mot flere tabeller

Transaksjoner og flerbrukerproblematikk. Transaksjoner

I denne leksjonen skal se på hvordan vi bruker innebygde og brukerdefinerte funksjoner.

HØGSKOLEN I SØR-TRØNDELAG

Leksjon 2. Setninger og uttrykk

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

EKSAMEN. Emnekode: ITF Emne: Databaser. Dato: Eksamenstid: Hjelpemidler: Syntaksoversikt (vedlagt oppgaven)

Transkript:

LC238D http://www.aitel.hist.no/fag/_dmdb/ 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/ Forelesning 8, uke 40 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) side 2 1

Eksempelbase leverandor lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 Porsgrunn 4 Christiansen 20 Lillehammer 5 Andersen 30 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å 17 Risør 4 skruer rød 14 Lillehammer 5 knapper blå 12 Porsgrunn 6 spiker rød 19 Lillehammer leveranse lev_nr prod_nr antall 1 1 300 1 2 200 1 3 400 1 4 200 1 5 100 2 1 300 2 2 400 3 2 200 4 2 200 4 4 300 4 5 400 Sqlscript vedlagt side 3 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. side 4 2

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; side 5 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); side 6 3

Å 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. side 7 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) side 8 4

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? side 9 Å 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 500 3. Hvilke produkter leveres av eksakt én leverandør? side 10 5

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 side 11 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. side 12 6

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. side 13 Å 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 lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 Porsgrunn 4 Christiansen 20 Lillehammer 5 Andersen 30 Arendal leverandor lev2 lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 Porsgrunn 4 Christiansen 20 Lillehammer 5 Andersen 30 Arendal side 14 7

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å side 15 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 side 16 8

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 side 17 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 Else Lervik, oktober 2008 side 18 9