File notes/code/sql/HW_DB_COFFEE.sql changed (mode: 100644) (index a9a270f..d0b3691) |
1 |
1 |
/* code/sql/HW_DB_COFEE.sql */ |
/* code/sql/HW_DB_COFEE.sql */ |
2 |
2 |
|
|
3 |
|
DROP SCHEMA HW_DB_COFFEE; |
|
|
3 |
|
/* |
|
4 |
|
* Setting up the data |
|
5 |
|
*/ |
|
6 |
|
|
|
7 |
|
--DROP SCHEMA HW_DB_COFFEE; |
4 |
8 |
|
|
5 |
9 |
CREATE SCHEMA HW_DB_COFFEE; |
CREATE SCHEMA HW_DB_COFFEE; |
6 |
10 |
USE HW_DB_COFFEE; |
USE HW_DB_COFFEE; |
|
... |
... |
INSERT INTO SUPPLY VALUES |
48 |
52 |
('Coffee Unl.', 121), |
('Coffee Unl.', 121), |
49 |
53 |
('Coffee Exp.', 311), |
('Coffee Exp.', 311), |
50 |
54 |
('Johns & Co.', 221); |
('Johns & Co.', 221); |
51 |
|
|
|
|
55 |
|
|
|
56 |
|
-- Question 2: |
52 |
57 |
START TRANSACTION; |
START TRANSACTION; |
|
58 |
|
|
53 |
59 |
INSERT INTO CUSTOMER VALUES(005, Bob Hill, NULL, 001); |
INSERT INTO CUSTOMER VALUES(005, Bob Hill, NULL, 001); |
|
60 |
|
|
54 |
61 |
INSERT INTO COFFEE VALUES(002, "Peru", "Decaf", 3.00); |
INSERT INTO COFFEE VALUES(002, "Peru", "Decaf", 3.00); |
|
62 |
|
|
55 |
63 |
INSERT INTO PROVIDER VALUES(NULL, "contact@localcof.com"); -- ERROR 1048 (23000): Column 'Name' cannot be null |
INSERT INTO PROVIDER VALUES(NULL, "contact@localcof.com"); -- ERROR 1048 (23000): Column 'Name' cannot be null |
|
64 |
|
|
56 |
65 |
INSERT INTO SUPPLY VALUES("Johns & Co.", 121); |
INSERT INTO SUPPLY VALUES("Johns & Co.", 121); |
|
66 |
|
|
57 |
67 |
INSERT INTO SUPPLY VALUES("Coffee Unl.", 311, 221); -- ERROR 1136 (21S01): Column count doesn't match value count at row 1 |
INSERT INTO SUPPLY VALUES("Coffee Unl.", 311, 221); -- ERROR 1136 (21S01): Column count doesn't match value count at row 1 |
58 |
68 |
|
|
59 |
69 |
--COMMIT; |
--COMMIT; |
60 |
70 |
-- Rest the changes: |
-- Rest the changes: |
61 |
71 |
ROLLBACK; |
ROLLBACK; |
62 |
72 |
|
|
|
73 |
|
-- Question 3: |
63 |
74 |
|
|
64 |
75 |
START TRANSACTION; |
START TRANSACTION; |
65 |
76 |
UPDATE CUSTOMER SET FavCoffee = 001 WHERE CardNo = 001; -- Rows matched: 1 Changed: 1 Warnings: 0 |
UPDATE CUSTOMER SET FavCoffee = 001 WHERE CardNo = 001; -- Rows matched: 1 Changed: 1 Warnings: 0 |
|
... |
... |
UPDATE COFFEE SET PricePerPound = 10.00 WHERE PricePerPound > 10.00; -- Rows mat |
82 |
93 |
SELECT * FROM COFFEE; |
SELECT * FROM COFFEE; |
83 |
94 |
ROLLBACK; |
ROLLBACK; |
84 |
95 |
|
|
|
96 |
|
-- Question 4: |
|
97 |
|
|
85 |
98 |
START TRANSACTION; |
START TRANSACTION; |
86 |
99 |
DELETE FROM CUSTOMER WHERE Name LIKE '%S%'; -- Query OK, 2 rows affected (0.01 sec) |
DELETE FROM CUSTOMER WHERE Name LIKE '%S%'; -- Query OK, 2 rows affected (0.01 sec) |
87 |
100 |
SELECT * FROM CUSTOMER; |
SELECT * FROM CUSTOMER; |
|
... |
... |
SELECT * FROM PROVIDER; |
104 |
117 |
SELECT * FROM SUPPLY; |
SELECT * FROM SUPPLY; |
105 |
118 |
ROLLBACK; |
ROLLBACK; |
106 |
119 |
|
|
|
120 |
|
-- Question 5: |
|
121 |
|
|
|
122 |
|
-- 1. |
107 |
123 |
SELECT Origin FROM COFFEE WHERE TypeOfRoast = 'Dark'; |
SELECT Origin FROM COFFEE WHERE TypeOfRoast = 'Dark'; |
|
124 |
|
|
|
125 |
|
-- 2. |
108 |
126 |
SELECT FavCoffee FROM CUSTOMER WHERE Name LIKE 'Bob%'; |
SELECT FavCoffee FROM CUSTOMER WHERE Name LIKE 'Bob%'; |
|
127 |
|
|
|
128 |
|
-- 3. |
109 |
129 |
SELECT Name FROM PROVIDER WHERE Email IS NULL; |
SELECT Name FROM PROVIDER WHERE Email IS NULL; |
|
130 |
|
|
|
131 |
|
-- 4. |
110 |
132 |
SELECT COUNT(*) FROM SUPPLY WHERE Provider = 'Johns & Co.'; |
SELECT COUNT(*) FROM SUPPLY WHERE Provider = 'Johns & Co.'; |
|
133 |
|
|
|
134 |
|
-- 5. |
111 |
135 |
SELECT Provider FROM COFFEE, SUPPLY WHERE TypeOfRoast = 'Dark' AND Coffee = Ref; |
SELECT Provider FROM COFFEE, SUPPLY WHERE TypeOfRoast = 'Dark' AND Coffee = Ref; |
File notes/code/sql/TRAIN.sql changed (mode: 100644) (index de04ee4..ab5ea8c) |
1 |
1 |
/* code/sql/TRAIN.sql */ |
/* code/sql/TRAIN.sql */ |
2 |
2 |
|
|
|
3 |
|
-- Question 1: |
|
4 |
|
|
3 |
5 |
CREATE TABLE TRAIN( |
CREATE TABLE TRAIN( |
4 |
|
Id VARCHAR(30) PRIMARY KEY, |
|
|
6 |
|
Id VARCHAR(30) PRIMARY KEY, -- This line was changed. |
5 |
7 |
Model VARCHAR(30), |
Model VARCHAR(30), |
6 |
8 |
ConstructionYear YEAR(4) |
ConstructionYear YEAR(4) |
7 |
9 |
); |
); |
8 |
10 |
|
|
|
11 |
|
-- Question 2 : |
|
12 |
|
|
9 |
13 |
CREATE TABLE CONDUCTOR( |
CREATE TABLE CONDUCTOR( |
10 |
14 |
Id VARCHAR(20), |
Id VARCHAR(20), |
11 |
15 |
Name VARCHAR(20), |
Name VARCHAR(20), |
12 |
16 |
ExperienceLevel VARCHAR(20) |
ExperienceLevel VARCHAR(20) |
13 |
17 |
); |
); |
14 |
18 |
|
|
15 |
|
ALTER TABLE CONDUCTOR ADD PRIMARY KEY (Id); |
|
|
19 |
|
ALTER TABLE CONDUCTOR |
|
20 |
|
ADD PRIMARY KEY (Id); |
|
21 |
|
|
|
22 |
|
-- Question 3 |
16 |
23 |
|
|
17 |
24 |
CREATE TABLE ASSIGNED_TO( |
CREATE TABLE ASSIGNED_TO( |
18 |
25 |
TrainId VARCHAR(20), |
TrainId VARCHAR(20), |
19 |
26 |
ConductorId VARCHAR(20), |
ConductorId VARCHAR(20), |
20 |
27 |
Day DATE, |
Day DATE, |
21 |
28 |
PRIMARY KEY(TrainId, ConductorId), |
PRIMARY KEY(TrainId, ConductorId), |
22 |
|
FOREIGN KEY (TrainId) REFERENCES TRAIN(Id), |
|
23 |
|
FOREIGN KEY (ConductorId) REFERENCES CONDUCTOR(Id) |
|
|
29 |
|
FOREIGN KEY (TrainId) REFERENCES TRAIN(Id), -- This line was changed |
|
30 |
|
FOREIGN KEY (ConductorId) REFERENCES CONDUCTOR(Id) -- This line was changed |
24 |
31 |
); |
); |
25 |
32 |
|
|
|
33 |
|
-- Question 4: |
|
34 |
|
|
|
35 |
|
/* |
|
36 |
|
* We insert more than one tuple, to make |
|
37 |
|
* the SELECT statements that follow easier |
|
38 |
|
* to test and debug. |
|
39 |
|
*/ |
|
40 |
|
|
26 |
41 |
INSERT INTO TRAIN VALUES ('K-13', 'SurfLiner', 2019), ('K-12', 'Regina', 2015); |
INSERT INTO TRAIN VALUES ('K-13', 'SurfLiner', 2019), ('K-12', 'Regina', 2015); |
27 |
42 |
INSERT INTO CONDUCTOR VALUES ('GP1029', 'Bill', 'Junior'), ('GP1030', 'Sandrine', 'Junior'); |
INSERT INTO CONDUCTOR VALUES ('GP1029', 'Bill', 'Junior'), ('GP1030', 'Sandrine', 'Junior'); |
28 |
43 |
INSERT INTO ASSIGNED_TO VALUES ('K-13', 'GP1029', DATE'2015/12/14'), ('K-12', 'GP1030', '20120909'); |
INSERT INTO ASSIGNED_TO VALUES ('K-13', 'GP1029', DATE'2015/12/14'), ('K-12', 'GP1030', '20120909'); |
29 |
44 |
|
|
|
45 |
|
-- Question 5: |
|
46 |
|
|
30 |
47 |
UPDATE CONDUCTOR SET ExperienceLevel = 'Senior' WHERE Id = 'GP1029'; |
UPDATE CONDUCTOR SET ExperienceLevel = 'Senior' WHERE Id = 'GP1029'; |
31 |
48 |
|
|
|
49 |
|
-- Question 6: |
|
50 |
|
-- 1. |
32 |
51 |
SELECT Id FROM TRAIN; |
SELECT Id FROM TRAIN; |
33 |
52 |
|
|
|
53 |
|
-- 2. |
34 |
54 |
SELECT Name FROM CONDUCTOR WHERE ExperienceLevel = 'Senior'; |
SELECT Name FROM CONDUCTOR WHERE ExperienceLevel = 'Senior'; |
35 |
55 |
|
|
|
56 |
|
-- 3. |
36 |
57 |
SELECT ConstructionYear FROM TRAIN WHERE Model='SurfLiner' OR Model='Regina'; |
SELECT ConstructionYear FROM TRAIN WHERE Model='SurfLiner' OR Model='Regina'; |
37 |
58 |
|
|
|
59 |
|
--4. |
38 |
60 |
SELECT ConductorId FROM ASSIGNED_TO WHERE TrainId = 'K-13' AND Day='2015/12/14'; |
SELECT ConductorId FROM ASSIGNED_TO WHERE TrainId = 'K-13' AND Day='2015/12/14'; |
39 |
61 |
|
|
|
62 |
|
--5. |
40 |
63 |
SELECT Model FROM TRAIN, ASSIGNED_TO WHERE ConductorID = 'GP1029' AND TrainId = TRAIN.ID; |
SELECT Model FROM TRAIN, ASSIGNED_TO WHERE ConductorID = 'GP1029' AND TrainId = TRAIN.ID; |
41 |
|
|
|
42 |
|
/* |
|
43 |
|
SELECT CONDUCTOR.Id |
|
44 |
|
FROM ASSIGNED_TO, CONDUCTOR, TRAIN |
|
45 |
|
WHERE date=20190101 AND Model = 'sdw' AND ASSIGNED_TO.ConductorID = CONDUCTOR.ConductorID; |
|
46 |
|
*/ |
|
File notes/fig/rel_mod/COFFEE.tex added (mode: 100644) (index 0000000..5ba9129) |
|
1 |
|
\documentclass[border=20pt]{standalone} |
|
2 |
|
\input{template.def} |
|
3 |
|
|
|
4 |
|
% COFFEE (Ref (PK), Origin, TypeOfRoast, PricePerPound) |
|
5 |
|
% CUSTOMER (CardNo (PK), Name, Email, FavCoffee (FK to COFFEE.Ref)) |
|
6 |
|
% SUPPLY (Provider (PK, FK to PROVIDEV.Id), Coffee (PK, FK to COFEE.Ref)) |
|
7 |
|
% PROVIDER (Name (PK), Email) |
|
8 |
|
|
|
9 |
|
\Frame(0,0){1}[COFFEE]{ |
|
10 |
|
Ref/PK, |
|
11 |
|
Origin/A, |
|
12 |
|
TypeOfRoast/A, |
|
13 |
|
PricePerPound/A}; |
|
14 |
|
|
|
15 |
|
\Frame(0,-2.5){2}[CUSTOMER]{ |
|
16 |
|
CardNo/PK, |
|
17 |
|
Name/A, |
|
18 |
|
Email/A, |
|
19 |
|
FavCoffee/A}; |
|
20 |
|
|
|
21 |
|
\Frame(8,0){3}[SUPPLY]{ |
|
22 |
|
Coffee/PK, |
|
23 |
|
Provider/PK}; |
|
24 |
|
|
|
25 |
|
\Frame(8,-2.5){4}[PROVIDER]{ |
|
26 |
|
Name/PK, |
|
27 |
|
Email/A}; |
|
28 |
|
|
|
29 |
|
\draw[FK] % From SUPPLY.Provider to COFFEE.Ref |
|
30 |
|
(Ref1)++(0.1,0) -- ++(0,-.55) coordinate (inter) |
|
31 |
|
-- (Coffee3 |- inter) --++(0, 0.5); |
|
32 |
|
|
|
33 |
|
\draw[FK] % From SUPPLY.Coffee to PROVIDER.Name |
|
34 |
|
(Name4) -- ++(0,-.55) -- ++(2, 0.0) -- ++(0, 2.5) -- |
|
35 |
|
coordinate (inter) (Provider3|- inter) --++(0, 0.5); |
|
36 |
|
|
|
37 |
|
\draw[FK] % From CUSTOMER.CardNo to COFFEE.Ref |
|
38 |
|
(Ref1)++(-0.1,0) -- ++(0, -0.55) -- ++(-1, 0) -- ++(0, -2.5) |
|
39 |
|
coordinate (inter) -- (FavCoffee2|- inter) --++(0, 0.5); |
|
40 |
|
|
|
41 |
|
|
|
42 |
|
\end{tikzpicture} |
|
43 |
|
\end{document} |
File notes/lectures_notes.md changed (mode: 100644) (index afe4e1d..30bfe9d) |
... |
... |
Solution to [%D %n (%T)](#problem:train) |
3462 |
3462 |
Solution to [%D %n (%T)](#problem:coffee) |
Solution to [%D %n (%T)](#problem:coffee) |
3463 |
3463 |
~ |
~ |
3464 |
3464 |
|
|
3465 |
|
Here is some code, commented. |
|
|
3465 |
|
For question 1, we have: |
|
3466 |
|
|
|
3467 |
|
![ |
|
3468 |
|
COFFEE (Ref (PK), Origin, TypeOfRoast, PricePerPound) |
|
3469 |
|
CUSTOMER (CardNo (PK), Name, Email, FavCoffee (FK to COFFEE.Ref)) |
|
3470 |
|
SUPPLY (Provider (PK, FK to PROVIDEV.Id), Coffee (PK, FK to COFEE.Ref)) |
|
3471 |
|
PROVIDER (Name (PK), Email) |
|
3472 |
|
](fig/rel_mod/COFFEE) |
|
3473 |
|
\ |
|
3474 |
|
|
|
3475 |
|
|
|
3476 |
|
The answer to the other questions can be read from the following code: |
3466 |
3477 |
|
|
3467 |
3478 |
```{.sqlmysql .numberLines include=code/sql/HW_DB_COFFEE.sql} |
```{.sqlmysql .numberLines include=code/sql/HW_DB_COFFEE.sql} |
3468 |
3479 |
``` |
``` |