Lösningsförslag till Övning i SQL Data Definition Language (DDL) D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ; D2. Create Domain CHARNRKEY char(7 D3. Create Table Skiva( T1. Create Table Skiva( Skivnr CHARNRKEY Titel TEXT30 Speltid integer Utgivningsår char(4) Musikkategori TEXT30 Primary key(skivnr) Skivnr char(7) Titel char(30) Speltid integer Utgivningsår char(4) Musikkategori char(30) Primary key(skivnr) T2. Create Table ( Postnr char(6) char(30) Primary Key (Postnr) T3 Create Table Artist ( Artistnr char(7) Efternamn char(30) Förnamn char(20) Gatuadress char(30) Postnr char(6) not null default 1, Kontraktsperiod integer Royalty integer Primary Key (Artistnr), Foreign Key (Postnr) References (Postnr) On delete set default) 1
T4. Create Table Telefonnummer ( T5. Create Table Artist_Skiva ( V1. Create View PersonInfo as Artistnr char(7) Telefonnummer char(20) not null, Primary Key (Artistnr, Telefonnummer), References Artist(Artistnr) On delete cascade) Artistnr char(7) Skivnr char(7) Primary Key (Artistnr, Skivnr), References Artist (Artistnr) On delete cascade, Foreign Key (Skivnr) References Skiva (Skivnr) On delete cascade A.Artistnr, A.Efternamn, A.Förnamn, A.Gatuadress, A.Postnr, P., T.Telefonnr, A.Kontraktsperiod, A.Royalty Artist as A, as P, Telefonnummer as T And A.Artistnr = T.Artistnr A.Postnr = P.Postnr; Data Manipulation Language (DML) I1. Insert Into (Postnr, ) Values ( 117 65, GÖTEBORG 2
I2. Insert Into Artist (Artistnr, Efternamn, Förnamn, Gatuadress, Postnr, Kontraktsperiod, Royalty) Values ( A2, Karlsson, Sven, Ljusstöparbacken 5A, 117 65, 1, 15 I3. Insert Into Telefonnummer (Artistnr, Telefonnummer) Values ( A2, 08-710 34 34 I4. Insert Into Skiva (Skivnr, Titel, Speltid, Utgivningsår, Musikkategori) Values ( S3, Dåligt väder!, 66, 2000, Blandat I5. Insert Into Artist_Skiva (Artistnr, Skivnr) Values ( A2, S3 U1. Update Artist Set Royalty = 15 Artistnr = A1 ; U2. Update Skiva Set Speltid = 37 Skivnr = S1 ; U3. Update Set = STOCKHOLM Postnr = 117 65 ; D1. Delete Skiva Skivnr = S3 ; Kopplingen A2, S3 försvinner (Cascade i tabell definitionen). S1. * Artist; S2. S3. Artistnr, Efternamn, Förnamn, Gatuadress, Postnr, Kontraktsperiod, Royalty Artist; Titel, Speltid, Utgivningsår Skiva; Distinct Postnr Artist; 3
S4. Count(*) Artist_Skiva Artistnr = A1 ; S5. A.Artistnr, A.Efternamn, A.Förnamn Artist as A, as P A.Postnr = P.Postnr And P. = STOCKHOLM ; S6. S7. Sum(Speltid) as ANTALMIN Skiva; Like K% ; S8. * Skiva Speltid > ( Min(Speltid) Skiva) Order By Speltid Desc; Skivnr, Titel, Speltid, Utgivningsår, Musikkategori Skiva Speltid > ( Min(Speltid) Skiva) Order By Speltid Desc; 4
ACCESS (DDL) Create Table Skiva( Skivnr char(7) Titel char(30) Speltid integer Utgivningsår char(4) Musikkategori char(30) Constraint SKIVA_KEY Primary key(skivnr) Create Table ( Postnr char(6) char(30) Constraint POSTADRESS_KEY Primary Key (Postnr) Create Table Artist ( Artistnr char(7) Efternamn char(30) Förnamn char(20) Gatuadress char(30) Postnr char(6) Kontraktsperiod integer Royalty integer Constraint ARTIST_KEY Primary Key (Artistnr), Constraint ARTIST_FKEY Foreign Key (Postnr) References (Postnr) Create Table Telefonnummer ( Artistnr char(7) Telefonnummer char(20) Constraint TELEFONNUMMER_KEY Primary Key (Artistnr, Telefonnummer), Constraint TELEFONNUMMER_FKEY References Artist(Artistnr) 5
Create Table Artist_Skiva (Artistnr char(7) Skivnr char(7) Constraint ARTIST_SKIVA_KEY Primary Key (Artistnr, Skivnr), Constraint ARTIST_SKIVA_FKEY1 References Artist (Artistnr), Constraint ARTIST_SKIVA_FKEY2 Foreign Key (Skivnr) References Skiva (Skivnr) ACCESS (DML) Domäner och vyer finns inte i Access så som ni har lärt er. Det går dock att skapa en fråga och sedan referera till den i en annan fråga. Till exempel: Fråga Create_View_Artist SELECT A.Artistnr, A.Efternamn, A.Förnamn, A.Gatuadress, A.Postnr, P., T.Telefonnummer, A.Kontraktsperiod, A.Royalty FROM Artist AS A, AS P, Telefonnummer AS T WHERE AND A.Artistnr = T.Artistnr A.Postnr = P.Postnr; Fråga View Artistnr, Efternamn, Förnamn Create_View_Artist; 6
När det gäller strängar skall man använda dubbelfnuttarna ( ) och vid strängjämförelser gäller asterixtecknet (*) och frågetecknet (?). Till exempel: SELECT FROM WHERE Like "K*"; 7