Databasspråket SQL - online.

Relevanta dokument
Databasspråket SQL - online.

Databasspråket SQL - online.

Databasspråket SQL - online.

Databasspråket SQL - online.

EMPS(NAME, SALARY, DEPT)

Databaser - Design och programmering. Operationer i relationsalgebra. Att söka ut data. Exempel DBschema. Att plocka ut data, forts

Informationssystem och Databasteknik, 2I-1100 HT2001. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.

Structured Query Language (SQL)

Grunderna i SQL del 1

Introduktion till frågespråket SQL (v0.91)

Övningar i SQL. SQLAccess.doc Ove Lundgren

Idag. 1. Från modell till databasstruktur. 2. Prata med databaser (frågepsråket SQL)

Från verklighet via modell till databas. Idag. Testa reglerna på varuhusmodellen. Från verklighet via modell till databas

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Structured query language (SQL)

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

SQL del 2. Christer Stuxberg Institutionen för Informatik och Media

Databasutveckling Introduktion till SQL och TSQL

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

Labb 1. prompt> mysql -h db-und.ida.liu.se -u [liuid] -p Enter password. mysql --host=db-und.ida.liu.se --user=[liuid] --password=[lösen]

Laboration SQL. Kom igång.

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Vyer, Prepared Statements, Triggers

Relationsdatabasdesign 2I-4067 HT99. Relationsalgebra. som resultat!

Programdesign, databasdesign. Databaser - Design och programmering. Funktioner. Relationsmodellen. Relation = generaliserad funktion.

Labb 1. prompt> mysql --host=db-und.ida.liu.se --user=[liuid] -- password=[lösenord] [liuid]

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Karlstads Universitet, Datavetenskap 1

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

1. SQL 2. Utsökningar mot flera tabeller. 4. IN-operatorn 5. Join 6. Kartesisk produkt 7. Tabellalias

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Design och underhåll av databaser

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Frågespråk och SQL. nikos dimitrakas rum 2423

WCMS-15, Webbutvecklare CMS

Starta MySQL Query Browser

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Databaser. Vad du ska lära dig: Ordlista

9. Between 10. Group by 11. Aggregatfunktionerna max, min, sum och avg 12. Nästlade sökningar

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

3. Dynamiska webbplatser, 20 Yhp (4 v)

Databaser - Design och programmering. Relationsmodellen. Relationer - som tabeller. Relationer som tabeller. Alternativa notationer: Relationsschema

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

1.Lär känna MS SQL Observera. Tips. Förberedelse

Grunderna i SQL del 1

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

För att XCOPY i SQL Server Express ska fungera måste data och logg ligga i samma mapp, vilket naturligtvis inte är så bra.

Sample exam questions. Database exam TIG058

Lösningar till tentamen i EDAF75

Databaser och. SQL, utsökningar mot en tabell

Föreläsning 5 Dagens föreläsning går igenom

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Tentamen för DD1370 Databasteknik och informationssystem

Föreläsning 5: Relationsmodellen

Exempel-Tentamen III

Tentamen i Databasteknik

Se kurshemsidan för användbara länkar för att genomföra denna laboration.

08/11/13. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Deadline på tisdag

Databaser - Design och programmering

Tentamen för DD1370 Databasteknik och informationssystem

732G16: Databaser - Design och programmering

Lösningsförslag, tentamen i Databaser

Frågespråk mot relationsmodellen

Relationsalgebra. Varför behöver jag lära mig relationsalgebra?!

IT i Organisationer och Databasteknik. Frågespråk mot relationsmodellen

Vad är SQL? Introduktion till SQL

Lösningsförslag till Exempel tentamen

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Informa5onsmodellering

DVA234 Databaser. Dag Nyström, Introduktion till databaser och MS SQL Server

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

Föreläsning 2: Översikt över ett databassystem

Introduktion MySQL och MariaDB

Prova på-laboration i SQL

Databaser och SQL - en kort introduktion

Databaser och Datamodellering Foreläsning IV

Informationssystem och Databasteknik. Frågespråk mot relationsmodellen

13/11/14. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Vad är en Databas?

Databasutveckling Tabeller. tinyint 1 byte (0-255) Upp till 8 bytes

Tentamen Databasmetodik DB:DSK/FK/DVK/ATD/SP/EIT mfl. äldre kurstillfällen 8 augusti 2013 kl. 9-13

Tentamen. Databasmetodik Lördag 27 september 2014 kl

07/11/14. Databasteknik och informationssystem DD1370 F2. Allmänna frågor. Är Lab0 svårbegriplig? Nu: Clickers. Är Kurswebben svårbegriplig?

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

TENTAMEN DATABASKUNSKAP ITEK12

Tentamen i Databasteknik

Laboration 2, MS SQL. Observera. Tips. Förberedelse. Genomförande

Transkript:

Databaser, design och programmering Databasspråket SQL - online. Innehåll: Viktiga kommandon och konstruktioner i SQL, både DDL och DML. Utgångspunkt: en databas om ett varuhus (The Jonson Brothers Company (se ER-diagram på kurshemsidan). Hur undersöka en okänd databas?! "! show tables;! "! describe <tabellnamn>;! "! show create table <tabellnamn>; Först datamanipulering med SQL (SQL som DML) Utsökning som relationsalgebrans urval (!)? Lista alla anställda som tjänar över 30000! SALARY>30000 (Employee) Kommandot SELECT: select * from employee where salary>10000; Resultatet är en tabell. Kan faktiskt göra som i relationsalgebran, stapla på varandra (lista alla som tjänar över 30000 och ändå varit anställda mindre än 10 år:! Startyear>2002 (! SALARY>30000 (Employee) )... blir med nästlade select-kommandon: select * from (select * from employee! where salary>10000) as wellpaid where birthyear>1945; (måste ge den inre tabellen ett namn, wellpaid) Vanligare med den andra formen:! SALARY>30000! Startyear > 2002 (Employee) select * from employee where salary>10000 and startyear >1970; Utsökning som relationsalgebrans Projektion, " (Vad heter våra anställda?) " NAME (Employee) Kommandot SELECT igen! select name from employee; Vad heter de och vilket id-nummer har de? select pk_employee, name from employee; Ordningen odefinierad. Råkar vara ordnad på nyckeln. Om vi vill ha en definierad ordning, då? Sortera på lönen, till exempel? select pk_employee, name, salary from employee order by salary; Kombination av utsökning och projektion i relationsalgebra (Vad heter de som tjänar mer än 30000) " NAME (! SALARY>30000 (Employee)) 1 2

select name from employee where salary>10000; Alltså: Formellt (enklaste formen): select <attributlista> from <tabell> where <villkor>; Olika sätt att kombinera information från flera relationer: Relationsalgebrans union, (snitt, differens) och kartesisk produkt. Alla personers namn Employee " Manager Not: Manager finns ej i era databaser på labben. MEN det är så sällan det finns unionskompatibla relationer i en databas att unions-kommandot i sql är konstruerat för att ta resultatet från två select-satser och göra union på dem, dvs kan ej ta två tabeller direkt. select * from employee union select * from manager; Not: Gör sann union. Behöver inga parenteser. Snitt och differens finns inte i SQL. Går att konstruera med SELECT men behövs sällan. Antag att relationerna R och S har likadan nyckel, som heter R.key resp S.key, antag att övriga innehållet är lika: R#S= select * from R where R.key in (select S.key from S); R-S= select * from R where R.key not in (select S.key from S); 3 Mer kombinationer av tabeller: Operationen Kartesisk produkt: Vilka produkter ingick i de olika inköpsposterna som de anställda hade handlat? Sale # Debit Kartesisk produkt utförs automatiskt om vi listar flera tabeller efter "from": select * from debit, sale; Sedan gjorde vi ju urval för att hitta de "riktiga" tuplerna (de där referensattributet är lika med nyckeln)! Sale.Debit=Debit.pk_d (Sale#Debit) select debit.pk_debit, debit.employee, sale.item, sale.quantity from debit, sale where debit.pk_debit=sale.debit; Relationsalgebraoperationen Join (sammansättning)? Sale sale.debit=debit.pk_ddebit Skrivs i from-delen istället för kommatering: select debit.pk_debit, debit.employee, sale.item, sale.quantity from debit join sale on debit.pk_debit=sale.debit; Kombinera tabeller: Vi kan alltså sätta ihop tabeller antingen genom kryssprodukt eller join. Båda formerna kan kombinera fler än två tabeller. Men vi kan också göra det enklare för oss: 4

Ex: Vilka saker (item) säljs på de avdelningar (dept) som styrs av Raveen Lemont? I tabellen item finns referensattributet "dept", som är nyckel i dept-tabellen, som i sin tur har ett referensattribut, manager, som är nyckel i employee-tabellen, där vi hittar namnet. select pk_employee from employee where name = 'Raveen, Lemont'; select pk_dept from dept where manager=37; select item.name from item where dept=1 or dept=65; Men varje select skapar ju en ny tabell, kan vi inte utnyttja det? Jo: select item.name from item where item.dept in (select pk_dept from dept where dept.manager in (select pk_employee from employee where employee.name ='Raveen, Lemont')); Kallas att nästla, eller kapsla, select-satserna (i labbinstruktionerna används det engelska begreppet "subquery"). Samma sak skrivs med användande av kartesisk produkt: select item.name from item, dept, employee where item.dept=dept.pk_dept and dept.manager = employee.pk_employee and employee.name = 'Raveen, Lemont'; Men samma utsökning kan också skrivas med Join: select item.name from (item join dept on item.dept=dept.pk_dept) join employee on dept.manager = employee.pk_employee where employee.name = 'Raveen, Lemont'; En sats som sätter ihop tabeller med join (sammansättning) går alltid att skriva som en kryssprodukt med join-villkoren i where-delen (jfr relationsalgebradefinitionen att en join är ekvivalent med ett urval ur en kryssprodukt). En kapslad sats går ofta att skriva om till kryssprodukt eller join (platt form), men inte alltid. En kryssprodukt eller join går ofta att skriva om på kapslad form, men inte alltid. Not: Sett "and" och "or" i where. Andra operationer i Where: Jämförelser med siffror, strängar, =,!=, <, >, >=, <=, and, or, och i nästlade satser med in, not in, exists mm. Dessutom jämförelser med delar av strängar: select pk_employee from employee where name like '%Lemont%'; _ matchar ett tecken % matchar noll, ett eller flera tecken Mer Join: Vi hade varianter på join; höger och vänster yttre join och full yttre join. Om vi t.ex. vill lista alla employees och, ifall de har en debitpost, numret på den... select employee.name, debit.pk_debit from employee left outer join debit on employee.pk_employee=debit.employee; 5 6

Ytterligare användbara konstruktioner och kommandon i SQL (finns ej i relationsalgebra) : Jämförelser med sig själv. Carol Smythe vill veta vilka som tjänar mer än hon gör. Lista alla anställda med lön över hennes. Två steg går bra: select salary from employee where name='smythe, Carol'; select name, salary from employee where salary >9050; Går att göra den nästlad: select name, salary from employee where salary > (select salary from employee where name='smythe, Carol'); Men alla nästlade satser går ju platta ut (nästan)? select other.name, other.salary from employee as carol, employee as other where other.salary > carol.salary and carol.name='smythe, Carol'; Dessa nya namn kallas tabellalias eller tupelvariabler. Enkla beräkningar görs i select-satsen. Dels enkla matematiska beräkningar på kolumnvärden: Räkna ut kostnaderna för sakerna i sale (behöver item också): select sale.debit, sale.item, sale.quantity, item.price, sale.quantity*item.price from sale join item on sale.item=item.pk_item; 7 Lite otydlig resultat-tabell, skulle ju gärna vilja ha en priskolumn istället för uträkningen. Byta namn på kolumnerna: select sale.debit as Ordernr, sale.item as Artikel, sale.quantity as Antal, item.price as Styckpris, sale.quantity*item.price as Pris from sale join item on sale.item=item.pk_item; Aggregeringsfunktioner: funktioner som gör beräkningar över ett antal rader i tabellen. Ex: Vad kostar den dyraste respektive billigaste prylen (i item), medel? select max(price), min(price), avg(price) from item; Finns också bl.a. sum, count, stdev, variance mm Om man vill veta vad varje order i debit summerar till? Vi hade ju summan för varje post... select sale.debit as Ordernr, sum(sale.quantity*item.price) as Pris from sale join item on sale.item=item.pk_item group by sale.debit; (OBS att group by bara kan användas tillsammans med aggregeringsfunktioner!) Man kan också göra urval av vilka rader som tas med: Om vi vill beräkna varje chefs lönekostnad för sina underlydande... select manager, sum(salary) from employee group by manager; 8

Om vi bara vill titta på dem som har mer än 2 underlydande... select manager, sum(salary) from employee group by manager having count(pk_employee)>2; (OBS att having bara kan användas tillsammans med group by.) Carol Smythe vill veta vilka som har högre lön än medel: select avg(salary) from employee; select name, salary from employee where salary>11868; Men om vi vill sätta ihop den till ett uttryck? select salary, name from employee where salary> (select avg(salary) from employee); Alla nästlade satser går väl platta ut? Eller? select salary, name from employee where salary>avg(salary);??? Definition av SELECT SELECT attr-lista FROM tabell-lista [WHERE villkor] [GROUP BY attr-lista! [HAVING villkor]] [ORDER BY attr-lista] Attr-lista behöver unika attributnamn (ange vid behov 9 tabellnamnet) och kan innehålla beräkningar och aggregeringsoperationer och kan ges nya kolumnnamn (as). Tabell-lista består av en lista av tabeller, både vanliga och temporära tabeller genererade av nästlade operationer (select) (då med as nyttnamn), eller sammansättningar av sådana tabeller och kan också innehålla mängdoperationer på sådana tabeller. villkor i WHERE byggs upp av attributnamn och operatorer och kan också innehålla temporära tabeller (eller enkla värden) genererade av nästlade operationer (select). Man kan också lägga in och ta bort värden i tabellerna. En ny produkt: insert into item values (305, 'Jacket', 60, 750, 35, 33); (måste anges i rätt ordning!) Om man inte orkar ange alla, och har defaultvärden (dept och supplier har inte default): insert into item (dept, pk_item, supplier) values (10, 306,33); Ta bort data (hela rader): Bort med den där oifyllda: delete from item where pk_item=306; where fungerar som where i select. Ändra enskilda värden (celler): nytt pris på den där jackan, och inte så många i lager: update item set price=500, qoh=20 where pk_item=305; 10

Det är rea på hela varuhuset: 10% på allt! update item set price=price*0.9; SQL som DDL Skapa tabeller, t.ex. en för att lagra vilken avdelning anställda jobbar på: create table works_in (employee int not null, dept int); Typen kan vara t.ex. char(antal tecken), varchar(maxantal tecken), int mm. Man kan också indikera vad som är primärnyckel eller om något värde måste vara unikt, inte får var null osv. Man kan också skapa en tabell som matchar (och innehåller) resultatet av en select-sats: create table managers as select distinct mgr.pk_employee, mgr.name from employee as emp, employee as mgr where emp.manager=mgr.pk_employee; Vyer En Vy är en abstrakt tabell. En relation som inte finns egentligen. Vyer används för att enkelt ge olika användargrupper olika urval av databasen. Man kan säga att de får ett eget databasschema för sina specifika uppgifter. För att skapa en vy som visar vad ordrarna i debit innehåller och kostar (som tidigare) skriver man create view debcont (OrderNo, ArtNo, qty, price, tot_price) as select sale.debit, sale.item, sale.quantity, item.price, sale.quantity*item.price from sale join item on sale.item=item.pk_item; Vyn debcont skapas inte fysiskt utan den konstrueras vid användning. Ändra befintlig tabell, t.ex. vi vill lagra avdelningen i employee istället för i separat tabell: alter table employee add dept int; Kan ocså göra t.ex drop, modify samt add constraints (för referensattributen) Ta bort tabeller: drop table works_in; 11 12