Databasspråket SQL - online.

Relevanta dokument
Databasspråket SQL - online.

Databasspråket SQL - online.

Databasspråket SQL - online.

Databasspråket SQL - online.

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

Structured query language (SQL)

Structured Query Language (SQL)

Grunderna i SQL del 1

Övningar i SQL. SQLAccess.doc Ove Lundgren

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

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

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

EMPS(NAME, SALARY, DEPT)

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

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

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

Laboration SQL. Kom igång.

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

Databasutveckling Introduktion till SQL och TSQL

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

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.

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

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

Karlstads Universitet, Datavetenskap 1

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

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

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]

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

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

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

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

Design och underhåll av databaser

Vyer, Prepared Statements, Triggers

Databaser och. SQL, utsökningar mot en tabell

Grunderna i SQL del 1

Databaser. Vad du ska lära dig: Ordlista

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

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

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

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

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

3. Dynamiska webbplatser, 20 Yhp (4 v)

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

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

Tentamen för DD1370 Databasteknik och informationssystem

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

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.

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

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

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

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

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

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

Tentamen för DD1370 Databasteknik och informationssystem

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

Lösningar till tentamen i EDAF75

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

Föreläsning 5: Relationsmodellen

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

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

WCMS-15, Webbutvecklare CMS

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

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

Databaser och SQL - en kort introduktion

Starta MySQL Query Browser

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

Vad är SQL? Introduktion till SQL

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

Databaser - Design och programmering

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

732G16: Databaser - Design och programmering

Exempel-Tentamen III

Introduktion MySQL och MariaDB

Tentamen i Databasteknik

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

TENTAMEN DATABASKUNSKAP ITEK12

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

Informa5onsmodellering

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

Sid 1 (9) Tillämpad fysik och elektronik Karin Fahlquist. Laboration: Databasdesign & SQL

Prova på-laboration i SQL

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

Databaser och Datamodellering Foreläsning IV

Tentamen i Databasteknik

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

Lösningsförslag, tentamen i Databaser

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

INNEHÅLL SQL DEL 2. Funktioner inbyggda Aggregatfunktioner Skalärfunktioner. Chapter 11. Beginning SQL Server 2008 for Developers

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

FileMaker 14. SQL-referens

Tentamen för DD1370 Databasteknik och informationssystem

Tentamen för DD1370 Databasteknik och informationssystem

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

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?

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

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) Söka ut information Vilka anställda har vi egentligen? Kommandot SELECT: select name from employee; Om vi vill veta mer om dem? Rada upp attributnamnen: Vad heter de och vilket id-nummer har de? select pk_employee, name from employee; Resultatet är en tabell - mängd?

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 from employee order by salary; Kommandot SELECT: SELECT <lista av attribut> FROM <källa> Om vi inte vill ha med alla rader i en tabell? SELECT <lista av attribut> FROM <källa>where <villkor>; Ex: alla anställda som har lön över 10000: select * from employee where salary>10000; Resultatet är en tabell, vi kan använda resultatet som indata till ett nytt kommando (resultatet kan vara en källa - men kräver ett namn): ex lista alla som tjänar över 10000 och ändå började efter 1960: select * from (select * from employee where salary>10000) as wellpaid where startyear>1960; (måste ge den inre tabellen ett namn, wellpaid) Går också kombinera villkor i "where"-delen: select * from employee where salary>10000 and startyear >1960;

Man kan naturligtvis både begränsa vika kolumner man vill se samtidigt som man bara ser vissa rader: Visa bara när de börjat arbeta, de som har lön över 10000: select startyear from employee where salary>10000; Not: dubletter! Rensa i SQL: kommandot distinct! select distinct birthyear from employee where salary>10000; OBS: rensa dubletter är kostsam operation! Formellt (enklaste formen): select <attributlista> from <tabell> where <villkor>; Mer avancerade villkor: Alla anställda som har födelseår mellan 1935 och 1945: select * from employee where birthyear>=1935 and birthyear<=1945; Eller alla som har någon av bröderna Ross som chef: select * from employee where manager=10 or manager=11; Andra operationer i Where: Jämförelser med siffror, strängar, =,!=, <, >, >=, <=, and, or, is null och is not null.

Om man vill ha information som finns i flera tabeller? Ta reda på vilka items som säljs på Leksaksavdelningen (Toys) (hitta id-numren för Toys, lista items som säljs på den): select pk_dept from dept where name="toys"; (svar: 49) select * from item where dept =49; Kan göras som en sammansatt (nästlad, kapslad) fråga, dvs använd resultatet från en fråga som komponent i en annan fråga: select * from item where dept=(select pk_dept from dept where name="toys"); Jämför urvalet av anställda med hög lön och kort anställningstid, då satt den inkapslade selectsatsen i FROM-delen, nu i Where. Operationen Join Ett alternativt sätt att kombinera information ur olika tabeller. Sammansättningen av två tabeller sådan att varje resulterande rad uppfyller ett villkor: item join dept on item.dept=dept.pk_dept Resultatet är en tabell och används i FROM: select item.pk_item, item.name, dept.pk_dept, dept.name from item join dept on item.dept=dept.pk_dept

where dept.name="toys"; Punktnotation: tabellnamn.attributnamn Avancerad sammansättning (outer join): Lista employees och deras debit-poster, dvs om de har handlat: select employee.name, debit.pk_debit from employee join debit on employee.pk_employee=debit.employee; Om vi vill lista alla employees och, ifall de har en debit-post, numret på den... Employees utan debit-post uppfyller ju inte joinvillkoret. select employee.name, debit.pk_debit from employee left outer join debit on employee.pk_employee=debit.employee; Yttre join: Left (outer) join, right (outer) join samt full (outer join). Kan faktiskt kombinera tabeller genom att lista flera i FROM: select * from store, city; Men "äkta tupler är ju de där city i store är samma stad som i city-tabellen (namnen ska vara lika): select * from store, city where store.city=city.name; Samma sak som join! select * from store join city on store.city=city.name;

Kombinera information ur flera tabeller kan alltså göras på tre olika sätt: kapslad selectsats, med join och med flera tabeller i FROM (kallas kartesisk produkt). Ex Lista alla items som säljs på den avdelning som styrs av Lemont Raveen? (i tabellen employee, hitta nyckeln pk_employee, vilken eller vilka avdelningar har honom som manager -dept - vilka saker säljs på dessa avdelningar - item-) Kräver tre tabeller! Kapslat: select item.name from item where item.dept in (select pk_dept from dept where dept.manager in Med join: (select pk_employee from employee where employee.name ='Raveen, Lemont')); 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'; Med flera tabeller i FROM: select item.name from item, dept, employee where item.dept=dept.pk_dept and dept.manager = employee.pk_employee and employee.name = 'Raveen, Lemont';

Join och kartesisk produkt (listan i FROM) är ekvivalenta, alla frågor som går att skriva på den ena formen går alltid att skriva som den andra. Vissa frågor som skrivs på kapslad form kan också skrivas på joinform och som kartesisk produkt, och omvänt. MEN inte alla! Nästlade satser med IN eller =? Om resultatet av den inkapslade selectsatsen inte säkert är ett enda värde måste jämförelsen göras med mängdoperator (se exemplet ovan). Andra mängdoperatorer att använda i where: not in, exists, not exists. Dessutom jämförelser med delar av strängar: select pk_employee from employee where name like '%Ross%'; _ matchar ett tecken % matchar noll, ett eller flera tecken 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 kapslad: select name, salary from employee where salary > (select salary from employee where name='smythe, Carol');

Men alla kapslade satser går ju platta ut (nästan)? select other.name, other.salary, carol.name from employee as carol, employee as other where other.salary > carol.salary and carol.name='smythe, Carol'; Dessa nya namn kallas tabellalias eller tupelvariabler. Beräkningar i SQL Enkla beräkningar och alias. Beräkningar kan göras 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; 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 OBS: att dessa funktioner bara kan användas i attributlistan (dvs efter ordet SELECT och före FROM). 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; Group by grupperar alltså raderna i tabellen (den i FROM) och gör så att den aggregeringsfunktion som finns i SELECT-delen utförs på varje delgrupp. (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; 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.) Andra användningar av aggregering: Carol Smythe vill veta vilka som har högre lön än medel: select avg(salary) from employee; (svar 11868) 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); Denna typ av kapslad sats (då aggregeringsfunktion ska användas för ett urval) kan inte "plattas ut", dvs skrivas med hjälp av join eller kartesisk produkt. Detta kan ställa till problem då vi vill använda kombinerad information: Lista avdelning och item (namn och nummer på båda) som säljer den dyraste varan. select dept.name, item.name from dept join item on item.dept=dept.pk_dept where item.price=(select max(price) from item);

Vi måste alltså göra join med item fastän vi också har item i den nästlade satsen. Att göra detta med kartesisk produkt blir mycket lätt krångligt: select dept.name, item.name from dept, item where item.dept=dept.pk_dept and item.price=(select max(price) from item); 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 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).

Datamanipulering: ändring, insättning, borttagning 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; Det är rea på hela varuhuset: 10% på allt! update item set price=price*0.9;

SQL som Databeskrivningsspråk; 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; Ä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;

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.