Databaser. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

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

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

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

VAD GÖR DU / VEM ÄR DU?

Mer grafik. Jan Erik Moström

Övningar i SQL. SQLAccess.doc Ove Lundgren

Sample exam questions. Database exam TIG058

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.

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

Classpath. Class loading + resurser. Class loader. jar-filer

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

Webbprogrammering, grundkurs 725G54

Starta MySQL Query Browser

Databaser och Datamodellering Foreläsning IV

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

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

WCMS-15, Webbutvecklare CMS

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

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

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

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

732G16: Databaser - Design och programmering

Databasutveckling Introduktion till SQL och TSQL

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

VAD GÖR DU / VEM ÄR DU?

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

Databaser - Design och programmering

Support Manual HoistLocatel Electronic Locks

Structured query language (SQL)

Filbeskrivningar Eller på särskild CD skiva

TENTAMEN DATABASKUNSKAP ITEK12

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

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

Prova på-laboration i SQL

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

729G28 Webprogrammering och databaser. Föreläsning 1: Diverse praktiskt om kursen Webprogrammering Databaser, terminologi

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

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

Databaser. Vad du ska lära dig: Ordlista

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 4,5 hp Delkurs: Databaser och databasdesign 7,5hp Tentander: VIP2, MMD2, INF 31-60, ASP

MySQL - testmiljöer på minuter. Thomas Johansson IT-avdelningen

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

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

Vyer, Prepared Statements, Triggers

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

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

Databaser. TDDD80 Mobila och sociala applikationer

TDDD52 Databas. Databas. Databas 1/3/13

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

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

Introduktion MySQL och MariaDB

Databaser och SQL - en kort introduktion

Webprogrammering och 729G28 databaser Webprogrammering och databaser Kursöversikt Webprogrammering Designprocessen Lösningsförslag

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

Structured Query Language (SQL)

Inga hjälpmedel är tillåtna

Innehåll. MySQL Grundkurs

L0009B. Moment. Introduktion till geografiska databaser: G:\L0009B\Allmänt\IntroGeoDB.pdf (F)

Skapa etiketter från adresslistor

3. Dynamiska webbplatser, 20 Yhp (4 v)

Vad är SQL? Introduktion till SQL

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

Databasteknik för D1, SDU1 m fl

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

Lösningar till tentamen i EDAF75

Webprogrammering och databaser. 729G28 Webprogrammering och databaser. Kursöversikt. Praktisk info. Webprogrammering. Ändringar mot förra året

Tentamen för DD1370 Databasteknik och informationssystem

Databaser. TDDD80 Mobila och sociala applikationer

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

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

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

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Extra övningar i SQL. Följande SQL-satser bygger på exemplen (och databasen) i föreläsningsbilderna från föreläsningen om relationsalgebra.

Vad är en databas? Databasutveckling Med MySQL/MariaDB

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]

! Webprogrammering. ! Databasteori och praktik. ! Fö, le, la + projekt. ! Examination (tenta, dugga + labb, ! Studera användarna och deras problem

Innehåll MySQL Intro. Ex på ett index Index typer ISAM Balanserat träd Pk och Fk i MySQL Eget index För o nackdelar med index

Tentamen för DD1370 Databasteknik och informationssystem

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

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.

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

Exempel-Tentamen III

Design och underhåll av databaser

Lösningsförslag, tentamen i Databaser

Funktionsbeskrivning

Example database. Municipalities of Sweden

public DataSet GenerateDataSet(SqlCommand dbcommand, String tablename, out String errormsg) { errormsg = "";

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

Lösningsförslag till fiktiv tentamen för DD1370 Databasteknik och informationssystem

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

Laboration SQL. Kom igång.

Tentamen för DD1370 Databasteknik och informationssystem

FNTSK SKNNK Fonetisk sökning

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

Transkript:

Databaser, Department of Computing Science, Umeå University - jem@cs.umu.se

Databaser Finns några olika typer Relationsdatabaser är vanligast Vi kommer bara att prata om relationsdatabaser

Strukturerad information Bygger på att man lagrar strukturerad information Begrepp: Databas Databashanterare Modell Schema

Princip Kalle Anka Fågelvägen 12 123 45 Ankeborg Kajsa Anka Dungränd 3 123 82 Ankeborg 0191 123 238 0191 234 832 Joakim von Anka Sedelvägen 99 123 32 Ankeborg 0191 992 991

Efternamn Förnamn Gatuadress Postnummer Telefon Ort Förnamn Efternamn Gatuadress Postnummer Ort Telefon

Kalle Anka Fågelvägen 12 123 45 Ankeborg 0191 123 238 Kajsa Anka Dungränd 123 82 Ankeborg 0191 234 832 Joakim von Anka Sedelvägen 99 123 32 Ankeborg 0191 992 991 Indexering Man indexerar inte allt

Organisera Anta att vi har ett antal studenter som läser kurser på universitetet, då vill vi snabbt kunna se vem som har läst vad etc (tänk LADOK). Hur ska man då göra för att lägga upp en databas för sådan info?

ID Persontabell Förnamn Efternamn Förnamn Efternamn Personnr Gatuadr Ort Postnr telefon email kurs 1 ant kurs 1 klar kurs 1 betyg lab 1 lab 2 lab 3 lab 4 lab 5 lab 6 lab 7 tenta 1 tenta 2 tenta 3 tenta 4 tenta 5 tenta 6 tenta 7 ansv lärare kurs 2 ant kurs 2 klar kurs 2 betyg... ID Adresstabell Gatuadr Postnr Ort Emailtabell ID Email Bläääää Telefontabell ID Telefon Personnrtabell ID Personnr Kurstabell ID Kod Namn Datum etc

Telefontabell Kurstabell Emailtabell Adresstabell Persontabell Personnrtabell

Emailtabell Persontabell PKC PID KID Kurstabell EPC EID PID

SQL Structured Query Language Standard Man skriver SQL och bäddar in det i andra språk

Exempel import sqlite3 as dbman mydb = dbman.connect('test.db') cursor = mydb.cursor() cursor.execute('create table Person(first TEXT, last TEXT)') cursor.execute('insert into Person values ("Kalle","Anka")') cursor.execute('insert into Person values ("Joakim","von Anka")') cursor.execute('insert into Person values ("Tjatte","Anka")') cursor.execute('insert into Person values ("Fnatte","Anka")') cursor.execute('insert into Person values ("Knatte","Anka")') cursor.execute('insert into Person values ("Alexander","Lucas")') mydb.commit()

cursor.execute('select * from Person') for item in cursor.fetchall(): print item # (u'kalle', u'anka') # (u'joakim', u'von Anka') # (u'tjatte', u'anka') # (u'fnatte', u'anka') # (u'knatte', u'anka') # (u'alexander', u'lucas') cursor.execute('select first from Person') for item in cursor.fetchall(): print item # (u'kalle',) # (u'joakim',) # (u'tjatte',) # (u'fnatte',) # (u'knatte',) # (u'alexander',)

cursor.execute('select * from Person') for item in cursor.fetchall(): print "%s har efternamnet %s" % (item[0],item[1]) # Kalle har efternamnet Anka # Joakim har efternamnet von Anka # Tjatte har efternamnet Anka # Fnatte har efternamnet Anka # Knatte har efternamnet Anka # Alexander har efternamnet Lucas cursor.execute('select * from Person where last = "Anka"') print "\n\nfamiljen Anka\n" for item in cursor.fetchall(): print item[0] # Familjen Anka # # Kalle # Tjatte # Fnatte # Knatte

cursor.execute('select * from Person order by last') for item in cursor.fetchall(): print "%s %s" % (item[0],item[1]) # Kalle Anka # Tjatte Anka # Fnatte Anka # Knatte Anka # Alexander Lucas # Joakim von Anka mydb.close()

En person med flera emailadresser Persontabell 1 Joakim von Anka 2 Kalle Anka 3 Kajsa Anka 4 Tjatte Anka Emailtabell joakim@pluring.se 1 jva@disney.com 1 joakim@ankeborg.se 1 kalle@ankeborg.se 2

import sqlite3 db = sqlite3.connect('addresses.db') cursor = db.cursor() # Create person table cursor.execute('create table Person(first text, last text)') # Create email table cursor.execute('create table Email(adr text)') # Insert some info into person table cursor.execute('insert into Person(first,last) values ("Joakim","von Anka")') #Insert some info into email table cursor.execute('insert into Email(adr) values ("joakim@ankeborg.se")') # Ehhhhhhh # Let's start over by deleting everything cursor.execute('drop table Person') cursor.execute('drop table Email')

# Create person table cursor.execute('create table Person(pid integer primary key, first text, last text)') # Create email table cursor.execute('create table Email(adr text, belongsto integer)') # Insert some info into person table cursor.execute('insert into Person(first,last) values ("Joakim","von Anka")') jva = cursor.lastrowid #Insert some info into email table cursor.execute('insert into Email(adr,belongsto) values ("joakim@ankeborg.se",' + str(jva) + ')') cursor.execute('select * from Person inner join Email where Person.pid = Email.belongsto') print cursor.fetchall() [(1, u'joakim', u'von Anka', u'joakim@ankeborg.se', 1)]

cursor.execute(''' select Person.first, Person.last, Email.adr from Person inner join Email where Person.pid = Email.belongsto''' ) for item in cursor.fetchall(): print "%s %s\temail: %s" % (item[0],item[1],item[2]) Joakim von Anka Email: joakim@ankeborg.se

#Insert a second email address cursor.execute('insert into Email(adr,belongsto) values ("joakim@pluring.se",' + str(jva) + ')') cursor.execute(''' select Person.first, Person.last, Email.adr from Person inner join Email where Person.pid = Email.belongsto''' ) for item in cursor.fetchall(): print "%s %s\temail: %s" % (item[0],item[1],item[2]) Joakim von Anka Email: joakim@ankeborg.se Joakim von Anka Email: joakim@pluring.se

Ny version med finesser db = sqlite3.connect('addresses.db') cursor = db.cursor() # Set up tables cursor.execute('create table Person(pid integer primary key, first text, last text)') cursor.execute('create table Email(adr text, belongsto integer)') def addinfo(first,last,adrlist): cursor.execute("insert into Person(first,last) values (?,?)", (first,last)) id = cursor.lastrowid for adr in adrlist: cursor.execute("insert into Email values (?,?)",(adr,id))

# Populate with data addinfo('kalle','anka',['donald@disney.com','kalle@ankeborg.se']) addinfo('kajsa','anka',['kajsa@ankeborg.se']) addinfo('alexander','lucas',['alex@ankeborg.se','lucky@disney.com']) addinfo('joakim','von Anka',['joakim@pluring.se','joakim@jva.com','jva@disney.com']) addinfo('knatte','anka',['knatte@ankeborg.se','knatte@grongolingarna.org']) addinfo('fnatte','anka',['fnatte@ankeborg.se','fnatte@grongolingarna.org']) addinfo('tjatte','anka',['tjatte@ankeborg.se','tjatte@grongolingarna.org']) db.commit()

# List all email addresses cursor.execute('select adr from Email') for adr in cursor.fetchall(): print 'Email: %s' % adr Email: donald@disney.com Email: kalle@ankeborg.se Email: kajsa@ankeborg.se Email: alex@ankeborg.se Email: lucky@disney.com Email: joakim@pluring.se Email: joakim@jva.com Email: jva@disney.com Email: knatte@ankeborg.se Email: knatte@grongolingarna.org Email: fnatte@ankeborg.se Email: fnatte@grongolingarna.org Email: tjatte@ankeborg.se Email: tjatte@grongolingarna.org

# List all email address for all people cursor.execute('''select Person.pid, Person.first, Person.last, Email.adr from Person inner join Email where Person.pid = Email.belongsto order by Person.pid ''') previd = -1 for adr in cursor.fetchall(): if previd!= adr[0]: previd = adr[0] print "%s %s has the following email address(es)" % (adr[1],adr[2]) print '\t%s' % adr[3] Kalle Anka has the following email address(es) donald@disney.com kalle@ankeborg.se Kajsa Anka has the following email address(es) kajsa@ankeborg.se Alexander Lucas has the following email address(es) alex@ankeborg.se lucky@disney.com

# So let's find out who has an email address that ends in # '@grongolingarna.org' cursor.execute('''select Person.first, Person.last from Person inner join Email where Person.pid = Email.belongsto and Email.adr like '%@grongolingarna.org ''') for adr in cursor.fetchall(): print "%s %s" % (adr[0],adr[1]) Knatte Anka Fnatte Anka Tjatte Anka

# So let's find out who has an email address that ends in # '@grongolingarna.org' cursor.execute('''select Person.first, Person.last from Person inner join Email where Person.pid = Email.belongsto and Email.adr like '%@grongolingarna.org' order by Person.first ''') for adr in cursor.fetchall(): print "%s %s" % (adr[0],adr[1]) Fnatte Anka Knatte Anka Tjatte Anka