File notes/code/sql/HW_AdvancedFK.sql changed (mode: 100644) (index 733c028..62cc113) |
... |
... |
USE HW_AdvancedFK; |
7 |
7 |
-- start snippet advancedFK |
-- start snippet advancedFK |
8 |
8 |
/* code/sql/HW_AdvancedFK.sql */ |
/* code/sql/HW_AdvancedFK.sql */ |
9 |
9 |
CREATE TABLE T1 ( |
CREATE TABLE T1 ( |
10 |
|
A1 INT, A2 INT, B INT, PRIMARY KEY (A1, A2) |
|
|
10 |
|
A1 INT, |
|
11 |
|
A2 INT, |
|
12 |
|
B INT, |
|
13 |
|
PRIMARY KEY (A1, A2) |
11 |
14 |
); |
); |
12 |
15 |
|
|
13 |
16 |
CREATE TABLE T2 ( |
CREATE TABLE T2 ( |
14 |
|
A1 INT, A2 INT, B1 INT PRIMARY KEY, B2 INT, |
|
|
17 |
|
A1 INT, |
|
18 |
|
A2 INT, |
|
19 |
|
B1 INT PRIMARY KEY, |
|
20 |
|
B2 INT, |
15 |
21 |
-- We can create a "pair" of foreign key in one line, as |
-- We can create a "pair" of foreign key in one line, as |
16 |
|
-- follows: |
|
|
22 |
|
-- follows: |
17 |
23 |
FOREIGN KEY (A1, A2) REFERENCES T1 (A1, A2), |
FOREIGN KEY (A1, A2) REFERENCES T1 (A1, A2), |
18 |
24 |
-- We can create a foreign key that references the primary |
-- We can create a foreign key that references the primary |
19 |
|
-- key of the table we are currently creating, and name it, |
|
20 |
|
-- as follows: |
|
|
25 |
|
-- key of the table we are currently creating, and name |
|
26 |
|
-- it, |
|
27 |
|
-- as follows: |
21 |
28 |
CONSTRAINT My_pk_to_T1 FOREIGN KEY (B2) REFERENCES T2 (B1) |
CONSTRAINT My_pk_to_T1 FOREIGN KEY (B2) REFERENCES T2 (B1) |
22 |
29 |
); |
); |
23 |
30 |
|
|
24 |
31 |
-- The benefit of naming our fk constraint is that, if we |
-- The benefit of naming our fk constraint is that, if we |
|
32 |
|
-- violate it, for instance with |
|
33 |
|
-- INSERT INTO T2 VALUES (1, 1, 1, 3); |
|
34 |
|
-- then the name of the constraint (here "My_pk_to_T1") |
|
35 |
|
-- would be displayed in the error message: |
|
36 |
|
-- Cannot add or update a child row: a foreign key |
|
37 |
|
-- constraint fails (`db_9_9837c1`.`t2`, CONSTRAINT |
|
38 |
|
-- `My_pk_to_T1` FOREIGN KEY (`B2`) REFERENCES `t2` |
|
39 |
|
-- (`B1`)) |
|
40 |
|
-- end snippet advancedFK |
File notes/code/sql/HW_Captone.sql changed (mode: 100644) (index 717e745..c2afd87) |
... |
... |
CREATE SCHEMA HW_CAPSTONE; |
19 |
19 |
USE HW_CAPSTONE; |
USE HW_CAPSTONE; |
20 |
20 |
|
|
21 |
21 |
CREATE TABLE STUDENT ( |
CREATE TABLE STUDENT ( |
22 |
|
FName VARCHAR(50), Id CHAR(13) PRIMARY KEY, |
|
23 |
|
GraduationYear INT, GraduationSemester ENUM ("Fall", |
|
24 |
|
"Spring", "Summer") |
|
|
22 |
|
FName VARCHAR(50), |
|
23 |
|
Id CHAR(13) PRIMARY KEY, |
|
24 |
|
GraduationYear INT, |
|
25 |
|
GraduationSemester ENUM ("Fall", "Spring", "Summer") |
25 |
26 |
); |
); |
26 |
27 |
|
|
27 |
28 |
CREATE TABLE PROGRAMMING_LANGUAGE ( |
CREATE TABLE PROGRAMMING_LANGUAGE ( |
28 |
|
NAME VARCHAR(50) PRIMARY KEY, Licence VARCHAR(50) |
|
|
29 |
|
NAME VARCHAR(50) PRIMARY KEY, |
|
30 |
|
Licence VARCHAR(50) |
29 |
31 |
); |
); |
30 |
32 |
|
|
31 |
33 |
CREATE TABLE PROJECT ( |
CREATE TABLE PROJECT ( |
32 |
|
CodeName VARCHAR(50), Leader CHAR(13), PRIMARY KEY |
|
33 |
|
(CodeName, Leader), |
|
|
34 |
|
CodeName VARCHAR(50), |
|
35 |
|
Leader CHAR(13), |
|
36 |
|
PRIMARY KEY (CodeName, Leader), |
34 |
37 |
FOREIGN KEY (Leader) REFERENCES STUDENT (Id) |
FOREIGN KEY (Leader) REFERENCES STUDENT (Id) |
35 |
38 |
); |
); |
36 |
39 |
|
|
37 |
40 |
CREATE TABLE USED_LANGUAGE ( |
CREATE TABLE USED_LANGUAGE ( |
38 |
|
ProjectCodeName VARCHAR(50), ProjectLeader CHAR(13), |
|
39 |
|
UsedLanguage VARCHAR(50), PRIMARY KEY (ProjectCodeName, |
|
40 |
|
ProjectLeader, UsedLanguage), FOREIGN KEY |
|
41 |
|
(ProjectCodeName) REFERENCES PROJECT (CodeName), |
|
42 |
|
FOREIGN KEY (ProjectLeader) REFERENCES PROJECT |
|
43 |
|
(Leader), |
|
|
41 |
|
ProjectCodeName VARCHAR(50), |
|
42 |
|
ProjectLeader CHAR(13), |
|
43 |
|
UsedLanguage VARCHAR(50), |
|
44 |
|
PRIMARY KEY (ProjectCodeName, ProjectLeader, UsedLanguage), |
|
45 |
|
FOREIGN KEY (ProjectCodeName, ProjectLeader) REFERENCES |
|
46 |
|
PROJECT (CodeName, Leader), |
44 |
47 |
FOREIGN KEY (UsedLanguage) REFERENCES PROGRAMMING_LANGUAGE (NAME) |
FOREIGN KEY (UsedLanguage) REFERENCES PROGRAMMING_LANGUAGE (NAME) |
45 |
48 |
); |
); |
46 |
49 |
|
|
|
... |
... |
CREATE TABLE USED_LANGUAGE ( |
49 |
52 |
The meaning of the USED_LANGUAGE table is that a tuple < N, L, U> represents the fact that the project whose code name is N and whose leader is L uses the programming language U. |
The meaning of the USED_LANGUAGE table is that a tuple < N, L, U> represents the fact that the project whose code name is N and whose leader is L uses the programming language U. |
50 |
53 |
*/ |
*/ |
51 |
54 |
INSERT INTO STUDENT |
INSERT INTO STUDENT |
52 |
|
VALUES ("Mary", "0123456789100", 2025, "Summer"), |
|
53 |
|
("Steve", "0000000000000", 2025, "Fall"), ("Claude", |
|
54 |
|
"9999999999999", 2024, "Fall"), ("Meghan", |
|
55 |
|
"0987654321098", 2023, "Spring"); |
|
|
55 |
|
VALUES ( |
|
56 |
|
"Mary", |
|
57 |
|
"0123456789100", |
|
58 |
|
2025, |
|
59 |
|
"Summer"), |
|
60 |
|
( |
|
61 |
|
"Steve", |
|
62 |
|
"0000000000000", |
|
63 |
|
2025, |
|
64 |
|
"Fall"), |
|
65 |
|
( |
|
66 |
|
"Claude", |
|
67 |
|
"9999999999999", |
|
68 |
|
2024, |
|
69 |
|
"Fall"), |
|
70 |
|
( |
|
71 |
|
"Meghan", |
|
72 |
|
"0987654321098", |
|
73 |
|
2023, |
|
74 |
|
"Spring"); |
56 |
75 |
|
|
57 |
76 |
INSERT INTO PROGRAMMING_LANGUAGE |
INSERT INTO PROGRAMMING_LANGUAGE |
58 |
|
VALUES ("Rust", "MIT"), (".NET Core", "MIT"), ("Racket", |
|
59 |
|
"LGPL"), ("Python", "PSF"); |
|
|
77 |
|
VALUES ( |
|
78 |
|
"Rust", |
|
79 |
|
"MIT"), |
|
80 |
|
( |
|
81 |
|
".NET Core", |
|
82 |
|
"MIT"), |
|
83 |
|
( |
|
84 |
|
"Racket", |
|
85 |
|
"LGPL"), |
|
86 |
|
( |
|
87 |
|
"Python", |
|
88 |
|
"PSF"); |
60 |
89 |
|
|
61 |
90 |
-- Taken from |
-- Taken from |
|
91 |
|
-- |
|
92 |
|
-- |
|
93 |
|
-- |
|
94 |
|
-- |
62 |
95 |
-- https://en.wikipedia.org/wiki/Comparison_of_open-source_pr |
-- https://en.wikipedia.org/wiki/Comparison_of_open-source_pr |
|
96 |
|
-- ogramming_language_licensing |
63 |
97 |
INSERT INTO PROJECT |
INSERT INTO PROJECT |
64 |
|
VALUES ("Brick Break", "0123456789100"), ("Brick Break", |
|
65 |
|
"0000000000000"), ("Grade Calculator", |
|
66 |
|
"0123456789100"), ("Undecided", "9999999999999"); |
|
|
98 |
|
VALUES ( |
|
99 |
|
"Brick Break", |
|
100 |
|
"0123456789100"), |
|
101 |
|
( |
|
102 |
|
"Brick Break", |
|
103 |
|
"0000000000000"), |
|
104 |
|
( |
|
105 |
|
"Grade Calculator", |
|
106 |
|
"0123456789100"), |
|
107 |
|
( |
|
108 |
|
"Undecided", |
|
109 |
|
"9999999999999"); |
67 |
110 |
|
|
68 |
111 |
INSERT INTO USED_LANGUAGE |
INSERT INTO USED_LANGUAGE |
69 |
|
VALUES ("Brick Break", "0123456789100", "Rust"), ("Brick |
|
70 |
|
Break", "0000000000000", ".NET Core"), ("Brick Break", |
|
71 |
|
"0000000000000", "Python"), ("Grade Calculator", |
|
72 |
|
"0123456789100", "Racket"); |
|
|
112 |
|
VALUES ( |
|
113 |
|
"Brick Break", |
|
114 |
|
"0123456789100", |
|
115 |
|
"Rust"), |
|
116 |
|
( |
|
117 |
|
"Brick Break", |
|
118 |
|
"0000000000000", |
|
119 |
|
".NET Core"), |
|
120 |
|
( |
|
121 |
|
"Brick Break", |
|
122 |
|
"0000000000000", |
|
123 |
|
"Python"), |
|
124 |
|
( |
|
125 |
|
"Grade Calculator", |
|
126 |
|
"0123456789100", |
|
127 |
|
"Racket"); |
73 |
128 |
|
|
74 |
129 |
|
|
75 |
130 |
/* |
/* |
|
... |
... |
Answer the following short questions based on the model implemented above. |
84 |
138 |
You can simply answer "True" or "False", or justify your reasoning (e.g. with code). |
You can simply answer "True" or "False", or justify your reasoning (e.g. with code). |
85 |
139 |
*/ |
*/ |
86 |
140 |
-- 1. Can a project uses multiple programming languages? |
-- 1. Can a project uses multiple programming languages? |
|
141 |
|
-- FILL HERE |
|
142 |
|
-- 2. Can a student be the leader of multiple projects? |
|
143 |
|
-- FILL HERE |
|
144 |
|
-- 3. Can multiple projects have the same code name? |
|
145 |
|
-- FILL HERE |
|
146 |
|
-- 4. Could Claude simply enter NULL for the value of |
|
147 |
|
-- his |
|
148 |
|
-- project's code name, since he's undecided? |
|
149 |
|
-- FILL HERE |
|
150 |
|
-- 5. Can a project be created without project leader? |
|
151 |
|
-- FILL HERE |
|
152 |
|
-- 6. Can we know who is working on a project without |
|
153 |
|
-- being |
|
154 |
|
-- its leader? |
|
155 |
|
-- FILL HERE |
87 |
156 |
/* |
/* |
88 |
157 |
|
|
89 |
158 |
II. Relational Model (6 pts.) |
II. Relational Model (6 pts.) |
|
... |
... |
Please, leave them uncommented, unless you can't write them correctly, in which |
113 |
169 |
The first question is answered as an example. |
The first question is answered as an example. |
114 |
170 |
*/ |
*/ |
115 |
171 |
-- 0. Write a command that list all the names of the |
-- 0. Write a command that list all the names of the |
|
172 |
|
-- programming languages. |
|
173 |
|
SELECT Name |
|
174 |
|
FROM PROGRAMMING_LANGUAGE; |
|
175 |
|
|
|
176 |
|
-- 1. Write a command that insert a new student in the |
|
177 |
|
-- STUDENT table. |
|
178 |
|
-- (You should invent the values). |
|
179 |
|
-- FILL HERE |
|
180 |
|
-- 2. Write a command that updates the code name of the |
|
181 |
|
-- project ("Undecided", "9999999999999") to "VR in ER". |
|
182 |
|
-- FILL HERE |
|
183 |
|
-- 3. Write a command that updates the graduation year |
|
184 |
|
-- of |
|
185 |
|
-- the student whose id is "0987654321098" to 2024, and |
|
186 |
|
-- the |
|
187 |
|
-- semester to "Fall". |
|
188 |
|
-- FILL HERE |
|
189 |
|
-- 4. Write a command that changes the STUDENT table to |
|
190 |
|
-- make |
|
191 |
|
-- it impossible to enter NULL for the first name of a |
|
192 |
|
-- student, without changing the primary key. |
|
193 |
|
-- FILL HERE |
|
194 |
|
-- 5. Write a command that changes the datatype of |
|
195 |
|
-- GraduationYear to SMALLINT. |
|
196 |
|
-- FILL HERE |
|
197 |
|
-- 6. Write a command that adds an attribute |
|
198 |
|
-- "ReleaseDate" |
|
199 |
|
-- to the PROJECT table. |
|
200 |
|
-- FILL HERE |
|
201 |
|
-- 6.bis If you managed to write the previous command |
|
202 |
|
-- correctly, write a command that sets the release date |
|
203 |
|
-- of |
|
204 |
|
-- the project ("Brick Break", "0123456789100") to the |
|
205 |
|
-- 26th |
|
206 |
|
-- of November 2022. |
|
207 |
|
-- FILL HERE |
|
208 |
|
-- 7. Write a command that makes it impossible for a |
|
209 |
|
-- student |
|
210 |
|
-- to be the leader in more than one project |
|
211 |
|
-- (This command should return an error) |
|
212 |
|
-- FILL HERE |
File notes/code/sql/HW_Certificate.sql changed (mode: 100644) (index 166369b..f4b82a9) |
... |
... |
CN = Common Name |
12 |
12 |
CA = Certificate Authority |
CA = Certificate Authority |
13 |
13 |
*/ |
*/ |
14 |
14 |
CREATE TABLE ORGANIZATION ( |
CREATE TABLE ORGANIZATION ( |
15 |
|
SN VARCHAR(30) PRIMARY KEY, CN VARCHAR(30) |
|
|
15 |
|
SN VARCHAR(30) PRIMARY KEY, |
|
16 |
|
CN VARCHAR(30) |
16 |
17 |
); |
); |
17 |
18 |
|
|
18 |
19 |
CREATE TABLE CA ( |
CREATE TABLE CA ( |
19 |
|
SN VARCHAR(30) PRIMARY KEY, CN VARCHAR(30), Trusted BOOL |
|
|
20 |
|
SN VARCHAR(30) PRIMARY KEY, |
|
21 |
|
CN VARCHAR(30), |
|
22 |
|
Trusted BOOL |
20 |
23 |
); |
); |
21 |
24 |
|
|
22 |
25 |
CREATE TABLE CERTIFICATE ( |
CREATE TABLE CERTIFICATE ( |
23 |
|
SN VARCHAR(30) PRIMARY KEY, CN VARCHAR(30) NOT NULL, Org |
|
24 |
|
VARCHAR(30) NOT NULL, Issuer VARCHAR(30), |
|
25 |
|
Valid_Since DATE, Valid_Until DATE, FOREIGN KEY (Org) |
|
26 |
|
REFERENCES ORGANIZATION (SN) ON DELETE CASCADE, FOREIGN |
|
27 |
|
KEY (Issuer) REFERENCES CA (SN) |
|
|
26 |
|
SN VARCHAR(30) PRIMARY KEY, |
|
27 |
|
CN VARCHAR(30) NOT NULL, |
|
28 |
|
Org VARCHAR(30) NOT NULL, |
|
29 |
|
Issuer VARCHAR(30), |
|
30 |
|
Valid_Since DATE, |
|
31 |
|
Valid_Until DATE, |
|
32 |
|
FOREIGN KEY (Org) REFERENCES ORGANIZATION (SN) ON DELETE CASCADE, |
|
33 |
|
FOREIGN KEY (Issuer) REFERENCES CA (SN) |
28 |
34 |
); |
); |
29 |
35 |
|
|
30 |
36 |
INSERT INTO ORGANIZATION |
INSERT INTO ORGANIZATION |
31 |
|
VALUES ('01', 'Wikimedia Foundation'), ('02', 'Free |
|
|
37 |
|
VALUES ( |
|
38 |
|
'01', |
|
39 |
|
'Wikimedia Foundation'), |
|
40 |
|
( |
|
41 |
|
'02', |
|
42 |
|
'Free |
32 |
43 |
Software Foundation'); |
Software Foundation'); |
33 |
44 |
|
|
34 |
45 |
INSERT INTO CA |
INSERT INTO CA |
35 |
|
VALUES ('A', "Let's Encrypt", TRUE), ('B', 'Shady Corp.', |
|
36 |
|
FALSE), ('C', 'NewComer Ltd.', NULL); |
|
|
46 |
|
VALUES ( |
|
47 |
|
'A', |
|
48 |
|
"Let's Encrypt", |
|
49 |
|
TRUE), |
|
50 |
|
( |
|
51 |
|
'B', |
|
52 |
|
'Shady Corp.', |
|
53 |
|
FALSE), |
|
54 |
|
( |
|
55 |
|
'C', |
|
56 |
|
'NewComer Ltd.', |
|
57 |
|
NULL); |
37 |
58 |
|
|
38 |
59 |
INSERT INTO CERTIFICATE |
INSERT INTO CERTIFICATE |
39 |
|
VALUES ('a', '*.wikimedia.org', '01', 'A', 20180101, |
|
40 |
|
20200101), ('b', '*.fsf.org', '02', 'A', 20180101, |
|
41 |
|
20191010), ('c', '*.shadytest.org', '02', 'B', |
|
42 |
|
20190101, 20200101), ('d', '*.wikipedia.org', '01', |
|
43 |
|
'C', 20200101, 20220101); |
|
|
60 |
|
VALUES ( |
|
61 |
|
'a', |
|
62 |
|
'*.wikimedia.org', |
|
63 |
|
'01', |
|
64 |
|
'A', |
|
65 |
|
20180101, |
|
66 |
|
20200101), |
|
67 |
|
( |
|
68 |
|
'b', |
|
69 |
|
'*.fsf.org', |
|
70 |
|
'02', |
|
71 |
|
'A', |
|
72 |
|
20180101, |
|
73 |
|
20191010), |
|
74 |
|
( |
|
75 |
|
'c', |
|
76 |
|
'*.shadytest.org', |
|
77 |
|
'02', |
|
78 |
|
'B', |
|
79 |
|
20190101, |
|
80 |
|
20200101), |
|
81 |
|
( |
|
82 |
|
'd', |
|
83 |
|
'*.wikipedia.org', |
|
84 |
|
'01', |
|
85 |
|
'C', |
|
86 |
|
20200101, |
|
87 |
|
20220101); |
44 |
88 |
|
|
45 |
89 |
-- CN of all certificates. |
-- CN of all certificates. |
46 |
90 |
SELECT CN |
SELECT CN |
47 |
91 |
FROM CERTIFICATE; |
FROM CERTIFICATE; |
48 |
92 |
|
|
49 |
93 |
-- (*.wikimedia.org | *.fsf.org | *.shadytest.org | |
-- (*.wikimedia.org | *.fsf.org | *.shadytest.org | |
|
94 |
|
-- *.wikipedia.org) |
|
95 |
|
-- The SN of the organizations whose CN contains |
|
96 |
|
-- "Foundation" |
50 |
97 |
SELECT SN |
SELECT SN |
51 |
98 |
FROM ORGANIZATION |
FROM ORGANIZATION |
52 |
99 |
WHERE CN LIKE "%Foundation%"; |
WHERE CN LIKE "%Foundation%"; |
53 |
100 |
|
|
54 |
101 |
-- (01 | 02) |
-- (01 | 02) |
55 |
|
SELECT CN, Valid_Until |
|
|
102 |
|
-- The CN and expiration date of all the |
|
103 |
|
-- certificates |
|
104 |
|
-- that |
|
105 |
|
-- expired (assuming we are the 6th of December |
|
106 |
|
-- 2019). |
|
107 |
|
SELECT CN, |
|
108 |
|
Valid_Until |
56 |
109 |
FROM CERTIFICATE |
FROM CERTIFICATE |
57 |
110 |
WHERE Valid_Until < DATE '20191206'; |
WHERE Valid_Until < DATE '20191206'; |
58 |
111 |
|
|
59 |
112 |
-- (*.fsf.org, 2019-10-10) |
-- (*.fsf.org, 2019-10-10) |
|
113 |
|
-- The CN of the CA that are not trusted. |
60 |
114 |
SELECT CN |
SELECT CN |
61 |
115 |
FROM CA |
FROM CA |
62 |
116 |
WHERE Trusted IS NOT TRUE; |
WHERE Trusted IS NOT TRUE; |
63 |
117 |
|
|
64 |
118 |
-- (Shady Corp. | NewComer Ltd.) |
-- (Shady Corp. | NewComer Ltd.) |
|
119 |
|
-- The CN of the certificates that are signed by a |
|
120 |
|
-- CA |
|
121 |
|
-- that |
|
122 |
|
-- is not trusted. |
65 |
123 |
SELECT CERTIFICATE.CN |
SELECT CERTIFICATE.CN |
66 |
|
FROM CERTIFICATE, CA |
|
|
124 |
|
FROM CERTIFICATE, |
|
125 |
|
CA |
67 |
126 |
WHERE Trusted IS NOT TRUE |
WHERE Trusted IS NOT TRUE |
68 |
127 |
AND CA.SN = CERTIFICATE.Issuer; |
AND CA.SN = CERTIFICATE.Issuer; |
69 |
128 |
|
|
70 |
129 |
-- (Shady Corp. | NewComer Ltd.) |
-- (Shady Corp. | NewComer Ltd.) |
|
130 |
|
-- The number of certificates signed by the CA whose |
|
131 |
|
-- CN |
|
132 |
|
-- is |
|
133 |
|
-- "Let's encrypt". |
71 |
134 |
SELECT COUNT(CERTIFICATE.SN) AS "Number of certificates signed |
SELECT COUNT(CERTIFICATE.SN) AS "Number of certificates signed |
72 |
135 |
by Let's encrypt" |
by Let's encrypt" |
73 |
|
FROM CERTIFICATE, CA |
|
|
136 |
|
FROM CERTIFICATE, |
|
137 |
|
CA |
74 |
138 |
WHERE CERTIFICATE.Issuer = CA.SN |
WHERE CERTIFICATE.Issuer = CA.SN |
75 |
139 |
AND CA.CN = "Let's encrypt"; |
AND CA.CN = "Let's encrypt"; |
76 |
140 |
|
|
77 |
141 |
-- (2) |
-- (2) |
78 |
|
SELECT ORGANIZATION.CN AS Organization, CERTIFICATE.CN AS |
|
79 |
|
Certificate |
|
80 |
|
FROM ORGANIZATION, CERTIFICATE |
|
|
142 |
|
-- A table listing the CN of the organizations along |
|
143 |
|
-- with |
|
144 |
|
-- the CN of their certificates. |
|
145 |
|
SELECT ORGANIZATION.CN AS Organization, |
|
146 |
|
CERTIFICATE.CN AS Certificate |
|
147 |
|
FROM ORGANIZATION, |
|
148 |
|
CERTIFICATE |
81 |
149 |
WHERE CERTIFICATE.Org = ORGANIZATION.SN; |
WHERE CERTIFICATE.Org = ORGANIZATION.SN; |
82 |
150 |
|
|
83 |
151 |
-- ( Wikimedia Foundation, *.wikimedia.org | Free Software |
-- ( Wikimedia Foundation, *.wikimedia.org | Free Software |
|
152 |
|
-- Foundation, *.fsf.org | Free Software Foundation , |
|
153 |
|
-- *.shadytest.org | Wikimedia Foundation , |
|
154 |
|
-- *.wikipedia.org |
|
155 |
|
-- ) |
84 |
156 |
/* |
/* |
85 |
157 |
DELETE FROM CA WHERE SN = 'A'; |
DELETE FROM CA WHERE SN = 'A'; |
86 |
158 |
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`HW_Certificate`.`CERTIFICATE`, CONSTRAINT `CERTIFICATE_ibfk_2` FOREIGN KEY (`Issuer`) REFERENCES `CA` (`SN`)) |
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`HW_Certificate`.`CERTIFICATE`, CONSTRAINT `CERTIFICATE_ibfk_2` FOREIGN KEY (`Issuer`) REFERENCES `CA` (`SN`)) |
File notes/code/sql/HW_ComputerVariation.sql changed (mode: 100644) (index e465a77..caa075a) |
... |
... |
USE HW_ComputerVariation; |
7 |
7 |
|
|
8 |
8 |
-- start snippet set-up |
-- start snippet set-up |
9 |
9 |
CREATE TABLE COMPUTER ( |
CREATE TABLE COMPUTER ( |
10 |
|
ID VARCHAR(20) PRIMARY KEY, Model VARCHAR(40) |
|
|
10 |
|
ID VARCHAR(20) PRIMARY KEY, |
|
11 |
|
Model VARCHAR(40) |
11 |
12 |
); |
); |
12 |
13 |
|
|
13 |
14 |
CREATE TABLE PERIPHERAL ( |
CREATE TABLE PERIPHERAL ( |
14 |
|
ID VARCHAR(20) PRIMARY KEY, Model VARCHAR(40), TYPE ENUM |
|
15 |
|
('mouse', 'keyboard', 'screen', 'printer') |
|
|
15 |
|
ID VARCHAR(20) PRIMARY KEY, |
|
16 |
|
Model VARCHAR(40), |
|
17 |
|
TYPE ENUM ('mouse', 'keyboard', 'screen', 'printer') |
16 |
18 |
); |
); |
17 |
19 |
|
|
18 |
20 |
CREATE TABLE CONNEXION ( |
CREATE TABLE CONNEXION ( |
19 |
|
Computer VARCHAR(20), Peripheral VARCHAR(20), PRIMARY KEY |
|
20 |
|
(Computer, Peripheral), |
|
21 |
|
FOREIGN KEY (Computer) REFERENCES COMPUTER (ID), FOREIGN |
|
22 |
|
KEY (Peripheral) REFERENCES PERIPHERAL (ID) |
|
|
21 |
|
Computer VARCHAR(20), |
|
22 |
|
Peripheral VARCHAR(20), |
|
23 |
|
PRIMARY KEY (Computer, Peripheral), |
|
24 |
|
FOREIGN KEY (Computer) REFERENCES COMPUTER (ID), |
|
25 |
|
FOREIGN KEY (Peripheral) REFERENCES PERIPHERAL (ID) |
23 |
26 |
); |
); |
24 |
27 |
|
|
25 |
28 |
INSERT INTO COMPUTER |
INSERT INTO COMPUTER |
26 |
|
VALUES ('A', 'Apple IIc Plus'), ('B', 'Commodore SX-64'); |
|
|
29 |
|
VALUES ( |
|
30 |
|
'A', |
|
31 |
|
'Apple IIc Plus'), |
|
32 |
|
( |
|
33 |
|
'B', |
|
34 |
|
'Commodore SX-64'); |
27 |
35 |
|
|
28 |
36 |
INSERT INTO PERIPHERAL |
INSERT INTO PERIPHERAL |
29 |
|
VALUES ('12', 'Trendcom Model', 'printer'), ('14', 'TP-10 |
|
30 |
|
Thermal Matrix', 'printer'), ('15', 'IBM Selectric', 'keyboard'); |
|
|
37 |
|
VALUES ( |
|
38 |
|
'12', |
|
39 |
|
'Trendcom Model', |
|
40 |
|
'printer'), |
|
41 |
|
( |
|
42 |
|
'14', |
|
43 |
|
'TP-10 |
|
44 |
|
Thermal Matrix', |
|
45 |
|
'printer'), |
|
46 |
|
( |
|
47 |
|
'15', |
|
48 |
|
'IBM Selectric', |
|
49 |
|
'keyboard'); |
31 |
50 |
|
|
32 |
51 |
INSERT INTO CONNEXION |
INSERT INTO CONNEXION |
33 |
|
VALUES ('A', '12'), ('B', '14'), ('A', '15'); |
|
|
52 |
|
VALUES ( |
|
53 |
|
'A', |
|
54 |
|
'12'), |
|
55 |
|
( |
|
56 |
|
'B', |
|
57 |
|
'14'), |
|
58 |
|
( |
|
59 |
|
'A', |
|
60 |
|
'15'); |
34 |
61 |
|
|
35 |
62 |
-- end snippet set-up |
-- end snippet set-up |
36 |
63 |
/* |
/* |
|
... |
... |
FROM PERIPHERAL |
59 |
86 |
WHERE Model LIKE 'IBM%'; |
WHERE Model LIKE 'IBM%'; |
60 |
87 |
|
|
61 |
88 |
SELECT Model |
SELECT Model |
62 |
|
FROM PERIPHERAL, CONNEXION |
|
|
89 |
|
FROM PERIPHERAL, |
|
90 |
|
CONNEXION |
63 |
91 |
WHERE Computer = 'A' |
WHERE Computer = 'A' |
64 |
92 |
AND Peripheral = PERIPHERAL.ID; |
AND Peripheral = PERIPHERAL.ID; |
65 |
93 |
|
|
66 |
94 |
SELECT COUNT(Computer) |
SELECT COUNT(Computer) |
67 |
|
FROM CONNEXION, COMPUTER |
|
|
95 |
|
FROM CONNEXION, |
|
96 |
|
COMPUTER |
68 |
97 |
WHERE Model = 'Apple IIc Plus' |
WHERE Model = 'Apple IIc Plus' |
69 |
98 |
AND Computer = COMPUTER.ID; |
AND Computer = COMPUTER.ID; |
70 |
99 |
|
|
File notes/code/sql/HW_DBCoffee.sql changed (mode: 100644) (index 0165d95..6970c69) |
... |
... |
CREATE SCHEMA HW_DBCoffee; |
6 |
6 |
USE HW_DBCoffee; |
USE HW_DBCoffee; |
7 |
7 |
|
|
8 |
8 |
CREATE TABLE COFFEE ( |
CREATE TABLE COFFEE ( |
9 |
|
Ref VARCHAR(30) PRIMARY KEY, Origin VARCHAR(30), |
|
10 |
|
TypeOfRoast VARCHAR(30), PricePerPound DOUBLE |
|
|
9 |
|
Ref VARCHAR(30) PRIMARY KEY, |
|
10 |
|
Origin VARCHAR(30), |
|
11 |
|
TypeOfRoast VARCHAR(30), |
|
12 |
|
PricePerPound DOUBLE |
11 |
13 |
); |
); |
12 |
14 |
|
|
13 |
15 |
CREATE TABLE CUSTOMER ( |
CREATE TABLE CUSTOMER ( |
14 |
|
CardNo VARCHAR(30) PRIMARY KEY, NAME VARCHAR(30), Email |
|
15 |
|
VARCHAR(30), FavCoffee VARCHAR(30), |
|
|
16 |
|
CardNo VARCHAR(30) PRIMARY KEY, |
|
17 |
|
NAME VARCHAR(30), |
|
18 |
|
Email VARCHAR(30), |
|
19 |
|
FavCoffee VARCHAR(30), |
16 |
20 |
FOREIGN KEY (FavCoffee) REFERENCES COFFEE (Ref) ON UPDATE |
FOREIGN KEY (FavCoffee) REFERENCES COFFEE (Ref) ON UPDATE |
17 |
21 |
CASCADE ON DELETE CASCADE |
CASCADE ON DELETE CASCADE |
18 |
22 |
); |
); |
19 |
23 |
|
|
20 |
24 |
CREATE TABLE PROVIDER ( |
CREATE TABLE PROVIDER ( |
21 |
|
NAME VARCHAR(30) PRIMARY KEY, Email VARCHAR(30) |
|
|
25 |
|
NAME VARCHAR(30) PRIMARY KEY, |
|
26 |
|
Email VARCHAR(30) |
22 |
27 |
); |
); |
23 |
28 |
|
|
24 |
29 |
CREATE TABLE SUPPLY ( |
CREATE TABLE SUPPLY ( |
25 |
|
Provider VARCHAR(30), Coffee VARCHAR(30), PRIMARY KEY |
|
26 |
|
(Provider, Coffee), |
|
|
30 |
|
Provider VARCHAR(30), |
|
31 |
|
Coffee VARCHAR(30), |
|
32 |
|
PRIMARY KEY (Provider, Coffee), |
27 |
33 |
FOREIGN KEY (Provider) REFERENCES PROVIDER (NAME) ON |
FOREIGN KEY (Provider) REFERENCES PROVIDER (NAME) ON |
28 |
|
UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (Coffee) |
|
29 |
|
REFERENCES COFFEE (Ref) ON UPDATE CASCADE ON DELETE |
|
30 |
|
CASCADE |
|
|
34 |
|
UPDATE CASCADE ON DELETE CASCADE, |
|
35 |
|
FOREIGN KEY (Coffee) REFERENCES COFFEE (Ref) ON UPDATE |
|
36 |
|
CASCADE ON DELETE CASCADE |
31 |
37 |
); |
); |
32 |
38 |
|
|
33 |
39 |
INSERT INTO COFFEE |
INSERT INTO COFFEE |
34 |
|
VALUES (001, 'Brazil', 'Light', 8.9), (121, 'Bolivia', |
|
35 |
|
'Dark', 7.5), (311, 'Brazil', 'Medium', 9.0), (221, |
|
36 |
|
'Sumatra', 'Dark', 10.25); |
|
|
40 |
|
VALUES ( |
|
41 |
|
001, |
|
42 |
|
'Brazil', |
|
43 |
|
'Light', |
|
44 |
|
8.9), |
|
45 |
|
( |
|
46 |
|
121, |
|
47 |
|
'Bolivia', |
|
48 |
|
'Dark', |
|
49 |
|
7.5), |
|
50 |
|
( |
|
51 |
|
311, |
|
52 |
|
'Brazil', |
|
53 |
|
'Medium', |
|
54 |
|
9.0), |
|
55 |
|
( |
|
56 |
|
221, |
|
57 |
|
'Sumatra', |
|
58 |
|
'Dark', |
|
59 |
|
10.25); |
37 |
60 |
|
|
38 |
61 |
INSERT INTO CUSTOMER |
INSERT INTO CUSTOMER |
39 |
|
VALUES (001, 'Bob Hill', 'b.hill@sip.net', 221), (002, |
|
40 |
|
'Ana Swamp', 'swampa@nca.edu', 311), (003, 'Mary Sea', |
|
41 |
|
'brig@gsu.gov', 121), (004, 'Pat Mount', |
|
42 |
|
'pmount@fai.fr', 121); |
|
|
62 |
|
VALUES ( |
|
63 |
|
001, |
|
64 |
|
'Bob Hill', |
|
65 |
|
'b.hill@sip.net', |
|
66 |
|
221), |
|
67 |
|
( |
|
68 |
|
002, |
|
69 |
|
'Ana Swamp', |
|
70 |
|
'swampa@nca.edu', |
|
71 |
|
311), |
|
72 |
|
( |
|
73 |
|
003, |
|
74 |
|
'Mary Sea', |
|
75 |
|
'brig@gsu.gov', |
|
76 |
|
121), |
|
77 |
|
( |
|
78 |
|
004, |
|
79 |
|
'Pat Mount', |
|
80 |
|
'pmount@fai.fr', |
|
81 |
|
121); |
43 |
82 |
|
|
44 |
83 |
INSERT INTO PROVIDER |
INSERT INTO PROVIDER |
45 |
|
VALUES ('Coffee Unl.', 'bob@cofunl.com'), ('Coffee Exp.', |
|
46 |
|
'pat@coffeex.dk'), ('Johns & Co.', NULL); |
|
|
84 |
|
VALUES ( |
|
85 |
|
'Coffee Unl.', |
|
86 |
|
'bob@cofunl.com'), |
|
87 |
|
( |
|
88 |
|
'Coffee Exp.', |
|
89 |
|
'pat@coffeex.dk'), |
|
90 |
|
( |
|
91 |
|
'Johns & Co.', |
|
92 |
|
NULL); |
47 |
93 |
|
|
48 |
94 |
INSERT INTO SUPPLY |
INSERT INTO SUPPLY |
49 |
|
VALUES ('Coffee Unl.', 001), ('Coffee Unl.', 121), |
|
50 |
|
('Coffee Exp.', 311), ('Johns & Co.', 221); |
|
|
95 |
|
VALUES ( |
|
96 |
|
'Coffee Unl.', |
|
97 |
|
001), |
|
98 |
|
( |
|
99 |
|
'Coffee Unl.', |
|
100 |
|
121), |
|
101 |
|
( |
|
102 |
|
'Coffee Exp.', |
|
103 |
|
311), |
|
104 |
|
( |
|
105 |
|
'Johns & Co.', |
|
106 |
|
221); |
51 |
107 |
|
|
52 |
108 |
--start snippet solution |
--start snippet solution |
53 |
109 |
/* code/sql/HW_DBCoffee.sql */ |
/* code/sql/HW_DBCoffee.sql */ |
|
... |
... |
INSERT INTO SUPPLY |
55 |
111 |
START TRANSACTION; |
START TRANSACTION; |
56 |
112 |
|
|
57 |
113 |
INSERT INTO CUSTOMER |
INSERT INTO CUSTOMER |
58 |
|
VALUES (005, 'Bob Hill', NULL, 001); |
|
|
114 |
|
VALUES ( |
|
115 |
|
005, |
|
116 |
|
'Bob Hill', |
|
117 |
|
NULL, |
|
118 |
|
001); |
59 |
119 |
|
|
60 |
120 |
INSERT INTO COFFEE |
INSERT INTO COFFEE |
61 |
|
VALUES (002, "Peru", "Decaf", 3.00); |
|
|
121 |
|
VALUES ( |
|
122 |
|
002, |
|
123 |
|
"Peru", |
|
124 |
|
"Decaf", |
|
125 |
|
3.00); |
62 |
126 |
|
|
63 |
127 |
-- The following statement raises an error. |
-- The following statement raises an error. |
|
128 |
|
-- INSERT INTO PROVIDER |
|
129 |
|
-- VALUES (NULL, "contact@localcof.com"); |
|
130 |
|
-- ERROR 1048 (23000) at line 68: Column 'Name' |
|
131 |
|
-- cannot |
|
132 |
|
-- be |
|
133 |
|
-- null |
64 |
134 |
INSERT INTO SUPPLY |
INSERT INTO SUPPLY |
65 |
|
VALUES ("Johns & Co.", 121); |
|
|
135 |
|
VALUES ( |
|
136 |
|
"Johns & Co.", |
|
137 |
|
121); |
66 |
138 |
|
|
67 |
139 |
-- The following statement raises an error. |
-- The following statement raises an error. |
68 |
|
-- VALUES ("Coffee Unl.", 311, 221); |
|
|
140 |
|
-- -INSERT INTO SUPPLY |
|
141 |
|
-- VALUES ("Coffee Unl.", 311, 221); |
|
142 |
|
-- ERROR 1136 (21S01): Column count doesn't match |
|
143 |
|
-- value |
|
144 |
|
-- count at row 1 |
|
145 |
|
-- Rest the changes: |
69 |
146 |
ROLLBACK; |
ROLLBACK; |
70 |
147 |
|
|
71 |
148 |
-- Question 3: |
-- Question 3: |
|
... |
... |
WHERE Provider = 'Johns & Co.'; |
207 |
276 |
|
|
208 |
277 |
-- 5. |
-- 5. |
209 |
278 |
SELECT Provider |
SELECT Provider |
210 |
|
FROM COFFEE, SUPPLY |
|
|
279 |
|
FROM COFFEE, |
|
280 |
|
SUPPLY |
211 |
281 |
WHERE TypeOfRoast = 'Dark' |
WHERE TypeOfRoast = 'Dark' |
212 |
282 |
AND Coffee = Ref; |
AND Coffee = Ref; |
213 |
283 |
|
|
File notes/code/sql/HW_Department.sql changed (mode: 100644) (index 9956d14..43c7756) |
5 |
5 |
DROP SCHEMA IF EXISTS HW_Department; |
DROP SCHEMA IF EXISTS HW_Department; |
6 |
6 |
|
|
7 |
7 |
-- Carefull, we are dropping the schema HW_Department if it |
-- Carefull, we are dropping the schema HW_Department if it |
|
8 |
|
-- exists already, and all the data in it. |
8 |
9 |
CREATE SCHEMA HW_Department; |
CREATE SCHEMA HW_Department; |
9 |
10 |
|
|
10 |
11 |
-- And then re-creating it. |
-- And then re-creating it. |
|
... |
... |
USE HW_Department; |
18 |
18 |
-- start snippet statement |
-- start snippet statement |
19 |
19 |
/* code/sql/HW_Department.sql */ |
/* code/sql/HW_Department.sql */ |
20 |
20 |
CREATE TABLE DEPARTMENT ( |
CREATE TABLE DEPARTMENT ( |
21 |
|
ID INT PRIMARY KEY, NAME VARCHAR(30) |
|
|
21 |
|
ID INT PRIMARY KEY, |
|
22 |
|
NAME VARCHAR(30) |
22 |
23 |
); |
); |
23 |
24 |
|
|
24 |
25 |
CREATE TABLE EMPLOYEE ( |
CREATE TABLE EMPLOYEE ( |
25 |
|
ID INT PRIMARY KEY, NAME VARCHAR(30), Hired DATE, Department INT, |
|
|
26 |
|
ID INT PRIMARY KEY, |
|
27 |
|
NAME VARCHAR(30), |
|
28 |
|
Hired DATE, |
|
29 |
|
Department INT, |
26 |
30 |
FOREIGN KEY (Department) REFERENCES DEPARTMENT (ID) |
FOREIGN KEY (Department) REFERENCES DEPARTMENT (ID) |
27 |
31 |
); |
); |
28 |
32 |
|
|
29 |
33 |
INSERT INTO DEPARTMENT |
INSERT INTO DEPARTMENT |
30 |
|
VALUES (1, "Storage"), (2, "Hardware"); |
|
|
34 |
|
VALUES ( |
|
35 |
|
1, |
|
36 |
|
"Storage"), |
|
37 |
|
( |
|
38 |
|
2, |
|
39 |
|
"Hardware"); |
31 |
40 |
|
|
32 |
41 |
INSERT INTO EMPLOYEE |
INSERT INTO EMPLOYEE |
33 |
|
VALUES (1, "Bob", 20100101, 1), (2, "Samantha", 20150101, |
|
34 |
|
1), (3, "Mark", 20050101, 2), (4, "Karen", NULL, 1), |
|
35 |
|
(5, "Jocelyn", 20100101, 1); |
|
|
42 |
|
VALUES ( |
|
43 |
|
1, |
|
44 |
|
"Bob", |
|
45 |
|
20100101, |
|
46 |
|
1), |
|
47 |
|
( |
|
48 |
|
2, |
|
49 |
|
"Samantha", |
|
50 |
|
20150101, |
|
51 |
|
1), |
|
52 |
|
( |
|
53 |
|
3, |
|
54 |
|
"Mark", |
|
55 |
|
20050101, |
|
56 |
|
2), |
|
57 |
|
( |
|
58 |
|
4, |
|
59 |
|
"Karen", |
|
60 |
|
NULL, |
|
61 |
|
1), |
|
62 |
|
( |
|
63 |
|
5, |
|
64 |
|
"Jocelyn", |
|
65 |
|
20100101, |
|
66 |
|
1); |
36 |
67 |
|
|
37 |
68 |
-- end snippet statement |
-- end snippet statement |
38 |
69 |
/*
|
/*
|
|
... |
... |
INSERT INTO EMPLOYEE |
45 |
76 |
*/ |
*/ |
46 |
77 |
-- start snippet solution1 |
-- start snippet solution1 |
47 |
78 |
SELECT EMPLOYEE.Name |
SELECT EMPLOYEE.Name |
48 |
|
FROM EMPLOYEE, DEPARTMENT |
|
|
79 |
|
FROM EMPLOYEE, |
|
80 |
|
DEPARTMENT |
49 |
81 |
WHERE DEPARTMENT.Name = "Storage" |
WHERE DEPARTMENT.Name = "Storage" |
50 |
82 |
AND EMPLOYEE.Department = DEPARTMENT.ID; |
AND EMPLOYEE.Department = DEPARTMENT.ID; |
51 |
83 |
|
|
|
... |
... |
unknown). |
76 |
108 |
*/ |
*/ |
77 |
109 |
-- start snippet solution3 |
-- start snippet solution3 |
78 |
110 |
SELECT EMPLOYEE.Name |
SELECT EMPLOYEE.Name |
79 |
|
FROM EMPLOYEE, DEPARTMENT |
|
|
111 |
|
FROM EMPLOYEE, |
|
112 |
|
DEPARTMENT |
80 |
113 |
WHERE Hired <= ALL ( |
WHERE Hired <= ALL ( |
81 |
114 |
SELECT Hired |
SELECT Hired |
82 |
115 |
FROM EMPLOYEE |
FROM EMPLOYEE |
File notes/code/sql/HW_Faculty.sql changed (mode: 100644) (index 631b969..a5266e2) |
... |
... |
CREATE TABLE HW_Faculty.PROF ( |
41 |
41 |
but you can enter those values only using the "standard" literals |
but you can enter those values only using the "standard" literals |
42 |
42 |
(cf. https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html ) |
(cf. https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html ) |
43 |
43 |
*/ |
*/ |
44 |
|
Last_seen TIME, FavoriteFruit ENUM ('apple', 'orange', |
|
45 |
|
'pear'), PRIMARY KEY (Fname, Hiring) |
|
|
44 |
|
Last_seen TIME, |
|
45 |
|
FavoriteFruit ENUM ('apple', 'orange', 'pear'), |
|
46 |
|
PRIMARY KEY (Fname, Hiring) |
46 |
47 |
); |
); |
47 |
48 |
|
|
48 |
49 |
|
|
|
... |
... |
USE HW_Faculty; |
58 |
59 |
|
|
59 |
60 |
-- Let us insert some "Dummy" value in our table: |
-- Let us insert some "Dummy" value in our table: |
60 |
61 |
INSERT INTO PROF |
INSERT INTO PROF |
61 |
|
VALUES ("Clément", -- Or 'Clément'. |
|
62 |
|
290, 'PhD', 0, NULL, '19940101', -- Or '940101', '1994-01-01', '94/01/01' |
|
63 |
|
'090500', -- Or '09:05:00', '9:05:0', '9:5:0', '090500' |
|
64 |
|
-- Note also the existence of DATETIME, with 'YYYY-MM-DD |
|
65 |
|
-- HH:MM:SS' |
|
66 |
|
'Apple' -- This is not case-sensitive, oddly enough. |
|
|
62 |
|
VALUES ( |
|
63 |
|
"Clément", -- Or 'Clément'. |
|
64 |
|
290, |
|
65 |
|
'PhD', |
|
66 |
|
0, |
|
67 |
|
NULL, |
|
68 |
|
'19940101', -- Or '940101', '1994-01-01', '94/01/01' |
|
69 |
|
'090500', -- Or '09:05:00', '9:05:0', '9:5:0', '090500' |
|
70 |
|
-- Note also the existence of DATETIME, with 'YYYY-MM-DD |
|
71 |
|
-- HH:MM:SS' |
|
72 |
|
'Apple' -- This is not case-sensitive, oddly enough. |
67 |
73 |
); |
); |
File notes/code/sql/HW_ProcedureExamples.sql changed (mode: 100644) (index 675bb21..740d6fa) |
... |
... |
USE HW_ProcedureExamples; |
7 |
7 |
-- start snippet procedure-1 |
-- start snippet procedure-1 |
8 |
8 |
/* code/sql/HW_ProcedureExamples.sql */ |
/* code/sql/HW_ProcedureExamples.sql */ |
9 |
9 |
CREATE TABLE STUDENT ( |
CREATE TABLE STUDENT ( |
10 |
|
Login INT PRIMARY KEY, NAME VARCHAR(30), Major |
|
11 |
|
VARCHAR(30), Email VARCHAR(30) |
|
|
10 |
|
Login INT PRIMARY KEY, |
|
11 |
|
NAME VARCHAR(30), |
|
12 |
|
Major VARCHAR(30), |
|
13 |
|
Email VARCHAR(30) |
12 |
14 |
); |
); |
13 |
15 |
|
|
14 |
16 |
INSERT INTO STUDENT |
INSERT INTO STUDENT |
15 |
|
VALUES (123, "Test A", "CS", "a@a.edu"), (124, "Test B", |
|
16 |
|
"IT", "b@a.edu"), (125, "Test C", "CYBR", "c@a.edu"); |
|
|
17 |
|
VALUES ( |
|
18 |
|
123, |
|
19 |
|
"Test A", |
|
20 |
|
"CS", |
|
21 |
|
"a@a.edu"), |
|
22 |
|
( |
|
23 |
|
124, |
|
24 |
|
"Test B", |
|
25 |
|
"IT", |
|
26 |
|
"b@a.edu"), |
|
27 |
|
( |
|
28 |
|
125, |
|
29 |
|
"Test C", |
|
30 |
|
"CYBR", |
|
31 |
|
"c@a.edu"); |
17 |
32 |
|
|
18 |
33 |
-- end snippet procedure-1 |
-- end snippet procedure-1 |
19 |
34 |
-- start snippet procedure-2 |
-- start snippet procedure-2 |
|
... |
... |
BEGIN |
27 |
42 |
END; |
END; |
28 |
43 |
$$ |
$$ |
29 |
44 |
-- This is the delimiter that marks the end of the procedure |
-- This is the delimiter that marks the end of the procedure |
|
45 |
|
-- definition. |
30 |
46 |
DELIMITER ; |
DELIMITER ; |
31 |
47 |
|
|
32 |
48 |
-- Now, we want ";" to be the "natural" delimiter again. |
-- Now, we want ";" to be the "natural" delimiter again. |
|
... |
... |
DELIMITER ; |
54 |
69 |
SHOW CREATE PROCEDURE STUDENTLOGIN; |
SHOW CREATE PROCEDURE STUDENTLOGIN; |
55 |
70 |
|
|
56 |
71 |
-- This display information about the procedure just created. |
-- This display information about the procedure just created. |
|
72 |
|
-- We can pass quite naturally an argument to our |
|
73 |
|
-- procedure. |
57 |
74 |
CALL STUDENTLOGIN ("Test A"); |
CALL STUDENTLOGIN ("Test A"); |
58 |
75 |
|
|
59 |
76 |
-- end snippet procedure-3 |
-- end snippet procedure-3 |
File notes/code/sql/HW_ProfExample.sql changed (mode: 100644) (index 2e070cc..64afa6c) |
... |
... |
USE HW_ProfExample; |
8 |
8 |
-- start snippet tables-1 |
-- start snippet tables-1 |
9 |
9 |
/* code/sql/HW_ProfExample.sql */ |
/* code/sql/HW_ProfExample.sql */ |
10 |
10 |
CREATE TABLE PROF ( |
CREATE TABLE PROF ( |
11 |
|
Login VARCHAR(25) PRIMARY KEY, NAME VARCHAR(25), |
|
12 |
|
Department CHAR(5) |
|
|
11 |
|
Login VARCHAR(25) PRIMARY KEY, |
|
12 |
|
NAME VARCHAR(25), |
|
13 |
|
Department CHAR(5) |
13 |
14 |
); |
); |
14 |
15 |
|
|
15 |
16 |
CREATE TABLE DEPARTMENT ( |
CREATE TABLE DEPARTMENT ( |
16 |
|
Code CHAR(5) PRIMARY KEY, NAME VARCHAR(25), Head |
|
17 |
|
VARCHAR(25), FOREIGN KEY (Head) REFERENCES PROF (LOGIN) |
|
18 |
|
ON UPDATE CASCADE |
|
|
17 |
|
Code CHAR(5) PRIMARY KEY, |
|
18 |
|
NAME VARCHAR(25), |
|
19 |
|
Head VARCHAR(25), |
|
20 |
|
FOREIGN KEY (Head) REFERENCES PROF (LOGIN) ON UPDATE CASCADE |
19 |
21 |
); |
); |
20 |
22 |
|
|
21 |
23 |
ALTER TABLE PROF |
ALTER TABLE PROF |
|
... |
... |
ALTER TABLE PROF |
24 |
26 |
-- end snippet tables-1 |
-- end snippet tables-1 |
25 |
27 |
-- start snippet tables-2 |
-- start snippet tables-2 |
26 |
28 |
CREATE TABLE STUDENT ( |
CREATE TABLE STUDENT ( |
27 |
|
Login VARCHAR(25) PRIMARY KEY, NAME VARCHAR(25), |
|
28 |
|
Registered DATE, Major CHAR(5), |
|
|
29 |
|
Login VARCHAR(25) PRIMARY KEY, |
|
30 |
|
NAME VARCHAR(25), |
|
31 |
|
Registered DATE, |
|
32 |
|
Major CHAR(5), |
29 |
33 |
FOREIGN KEY (Major) REFERENCES DEPARTMENT (Code) |
FOREIGN KEY (Major) REFERENCES DEPARTMENT (Code) |
30 |
34 |
); |
); |
31 |
35 |
|
|
32 |
36 |
CREATE TABLE GRADE ( |
CREATE TABLE GRADE ( |
33 |
|
Login VARCHAR(25), Grade INT, PRIMARY KEY (LOGIN, Grade), |
|
|
37 |
|
Login VARCHAR(25), |
|
38 |
|
Grade INT, |
|
39 |
|
PRIMARY KEY (LOGIN, Grade), |
34 |
40 |
FOREIGN KEY (LOGIN) REFERENCES STUDENT (LOGIN) |
FOREIGN KEY (LOGIN) REFERENCES STUDENT (LOGIN) |
35 |
41 |
); |
); |
36 |
42 |
|
|
37 |
43 |
-- end snippet tables-2 |
-- end snippet tables-2 |
38 |
44 |
-- start snippet insert-1 |
-- start snippet insert-1 |
39 |
45 |
INSERT INTO DEPARTMENT |
INSERT INTO DEPARTMENT |
40 |
|
VALUES ("MATH", "Mathematics", NULL), ("CS", "Computer |
|
41 |
|
Science", NULL); |
|
|
46 |
|
VALUES ( |
|
47 |
|
"MATH", |
|
48 |
|
"Mathematics", |
|
49 |
|
NULL), |
|
50 |
|
( |
|
51 |
|
"CS", |
|
52 |
|
"Computer |
|
53 |
|
Science", |
|
54 |
|
NULL); |
42 |
55 |
|
|
43 |
56 |
-- end snippet insert-1 |
-- end snippet insert-1 |
44 |
57 |
-- start snippet insert-2 |
-- start snippet insert-2 |
45 |
|
INSERT INTO DEPARTMENT (Code, Name) |
|
46 |
|
VALUES ("CYBR", "Cyber Secturity"); |
|
|
58 |
|
INSERT INTO DEPARTMENT ( |
|
59 |
|
Code, |
|
60 |
|
Name) |
|
61 |
|
VALUES ( |
|
62 |
|
"CYBR", |
|
63 |
|
"Cyber Secturity"); |
47 |
64 |
|
|
48 |
65 |
-- end snippet insert-2 |
-- end snippet insert-2 |
49 |
66 |
-- start snippet insert-3 |
-- start snippet insert-3 |
50 |
|
INSERT INTO PROF (LOGIN, Department, Name) |
|
51 |
|
VALUES ("caubert", "CS", "Clément Aubert"); |
|
52 |
|
|
|
53 |
|
INSERT INTO PROF (LOGIN, Name, Department) |
|
54 |
|
VALUES ("aturing", "Alan Turing", "CS"), ("perdos", "Paul |
|
55 |
|
Erdős", "MATH"), ("bgates", "Bill Gates", "CYBR"); |
|
56 |
|
|
|
57 |
|
INSERT INTO STUDENT (LOGIN, Name, Registered, Major) |
|
58 |
|
VALUES ("jrakesh", "Jalal Rakesh", DATE "2017-12-01", |
|
59 |
|
"CS"), ("svlatka", "Sacnite Vlatka", "2015-03-12", |
|
60 |
|
"MATH"), ("cjoella", "Candice Joella", "20120212", |
|
61 |
|
"CYBR"), ("aalyx", "Ava Alyx", 20121011, "CYBR"), |
|
62 |
|
("caubert", "Clément Aubert", NULL, "CYBR"); |
|
|
67 |
|
INSERT INTO PROF ( |
|
68 |
|
LOGIN, |
|
69 |
|
Department, |
|
70 |
|
Name) |
|
71 |
|
VALUES ( |
|
72 |
|
"caubert", |
|
73 |
|
"CS", |
|
74 |
|
"Clément Aubert"); |
|
75 |
|
|
|
76 |
|
INSERT INTO PROF ( |
|
77 |
|
LOGIN, |
|
78 |
|
Name, |
|
79 |
|
Department) |
|
80 |
|
VALUES ( |
|
81 |
|
"aturing", |
|
82 |
|
"Alan Turing", |
|
83 |
|
"CS"), |
|
84 |
|
( |
|
85 |
|
"perdos", |
|
86 |
|
"Paul |
|
87 |
|
Erdős", |
|
88 |
|
"MATH"), |
|
89 |
|
( |
|
90 |
|
"bgates", |
|
91 |
|
"Bill Gates", |
|
92 |
|
"CYBR"); |
|
93 |
|
|
|
94 |
|
INSERT INTO STUDENT ( |
|
95 |
|
LOGIN, |
|
96 |
|
Name, |
|
97 |
|
Registered, |
|
98 |
|
Major) |
|
99 |
|
VALUES ( |
|
100 |
|
"jrakesh", |
|
101 |
|
"Jalal Rakesh", |
|
102 |
|
DATE "2017-12-01", |
|
103 |
|
"CS"), |
|
104 |
|
( |
|
105 |
|
"svlatka", |
|
106 |
|
"Sacnite Vlatka", |
|
107 |
|
"2015-03-12", |
|
108 |
|
"MATH"), |
|
109 |
|
( |
|
110 |
|
"cjoella", |
|
111 |
|
"Candice Joella", |
|
112 |
|
"20120212", |
|
113 |
|
"CYBR"), |
|
114 |
|
( |
|
115 |
|
"aalyx", |
|
116 |
|
"Ava Alyx", |
|
117 |
|
20121011, |
|
118 |
|
"CYBR"), |
|
119 |
|
( |
|
120 |
|
"caubert", |
|
121 |
|
"Clément Aubert", |
|
122 |
|
NULL, |
|
123 |
|
"CYBR"); |
63 |
124 |
|
|
64 |
125 |
INSERT INTO GRADE |
INSERT INTO GRADE |
65 |
|
VALUES ("jrakesh", 3.8), ("svlatka", 2.5); |
|
|
126 |
|
VALUES ( |
|
127 |
|
"jrakesh", |
|
128 |
|
3.8), |
|
129 |
|
( |
|
130 |
|
"svlatka", |
|
131 |
|
2.5); |
66 |
132 |
|
|
67 |
133 |
-- end snippet insert-3 |
-- end snippet insert-3 |
68 |
134 |
-- start snippet select-update |
-- start snippet select-update |
|
... |
... |
SELECT LOGIN |
84 |
150 |
FROM STUDENT |
FROM STUDENT |
85 |
151 |
WHERE NOT Major = "CYBR"; |
WHERE NOT Major = "CYBR"; |
86 |
152 |
|
|
87 |
|
SELECT LOGIN, Name |
|
|
153 |
|
SELECT LOGIN, |
|
154 |
|
Name |
88 |
155 |
FROM PROF |
FROM PROF |
89 |
156 |
WHERE Department = "CS"; |
WHERE Department = "CS"; |
90 |
157 |
|
|
|
... |
... |
WHERE LOGIN LIKE "_aubert"; |
104 |
171 |
-- end snippet select-update |
-- end snippet select-update |
105 |
172 |
-- start snippet null |
-- start snippet null |
106 |
173 |
INSERT INTO DEPARTMENT |
INSERT INTO DEPARTMENT |
107 |
|
VALUES ("Hist", "History", NULL); |
|
|
174 |
|
VALUES ( |
|
175 |
|
"Hist", |
|
176 |
|
"History", |
|
177 |
|
NULL); |
108 |
178 |
|
|
109 |
179 |
SELECT * |
SELECT * |
110 |
180 |
FROM DEPARTMENT |
FROM DEPARTMENT |
|
... |
... |
FROM GRADE |
130 |
200 |
WHERE Grade > 2.0 |
WHERE Grade > 2.0 |
131 |
201 |
ORDER BY Grade DESC; |
ORDER BY Grade DESC; |
132 |
202 |
|
|
133 |
|
SELECT LOGIN, Major |
|
|
203 |
|
SELECT LOGIN, |
|
204 |
|
Major |
134 |
205 |
FROM STUDENT |
FROM STUDENT |
135 |
|
ORDER BY Major, Name; |
|
|
206 |
|
ORDER BY Major, |
|
207 |
|
Name; |
136 |
208 |
|
|
137 |
209 |
-- end snippet order-by |
-- end snippet order-by |
138 |
210 |
-- start snippet select-project-join-1 |
-- start snippet select-project-join-1 |
139 |
211 |
SELECT LOGIN |
SELECT LOGIN |
140 |
|
FROM PROF, DEPARTMENT |
|
|
212 |
|
FROM PROF, |
|
213 |
|
DEPARTMENT |
141 |
214 |
WHERE DEPARTMENT.Name = "Mathematics" |
WHERE DEPARTMENT.Name = "Mathematics" |
142 |
215 |
AND Department = Code; |
AND Department = Code; |
143 |
216 |
|
|
144 |
217 |
-- end snippet select-project-join-1 |
-- end snippet select-project-join-1 |
|
218 |
|
-- start snippet select-project-join-2 |
145 |
219 |
SELECT Name |
SELECT Name |
146 |
|
FROM STUDENT, GRADE |
|
|
220 |
|
FROM STUDENT, |
|
221 |
|
GRADE |
147 |
222 |
WHERE Grade > 3.0 |
WHERE Grade > 3.0 |
148 |
223 |
AND STUDENT.Login = GRADE.Login; |
AND STUDENT.Login = GRADE.Login; |
149 |
224 |
|
|
150 |
225 |
-- end snippet select-project-join-2 |
-- end snippet select-project-join-2 |
|
226 |
|
-- start snippet select-project-join-3 |
151 |
227 |
SELECT PROF.Name |
SELECT PROF.Name |
152 |
|
FROM PROF, DEPARTMENT, STUDENT |
|
|
228 |
|
FROM PROF, |
|
229 |
|
DEPARTMENT, |
|
230 |
|
STUDENT |
153 |
231 |
WHERE STUDENT.Name = "Ava Alyx" |
WHERE STUDENT.Name = "Ava Alyx" |
154 |
232 |
AND STUDENT.Major = DEPARTMENT.Code |
AND STUDENT.Major = DEPARTMENT.Code |
155 |
233 |
AND DEPARTMENT.Head = PROF.Login; |
AND DEPARTMENT.Head = PROF.Login; |
|
... |
... |
WHERE STUDENT.Name = "Ava Alyx" |
159 |
235 |
-- end snippet select-project-join-3 |
-- end snippet select-project-join-3 |
160 |
236 |
-- start snippet alias-1 |
-- start snippet alias-1 |
161 |
237 |
SELECT PROF.Name |
SELECT PROF.Name |
162 |
|
FROM PROF, DEPARTMENT, STUDENT AS B |
|
|
238 |
|
FROM PROF, |
|
239 |
|
DEPARTMENT, |
|
240 |
|
STUDENT AS B |
163 |
241 |
WHERE B.Name = "Ava Alyx" |
WHERE B.Name = "Ava Alyx" |
164 |
242 |
AND B.Major = DEPARTMENT.Code |
AND B.Major = DEPARTMENT.Code |
165 |
243 |
AND DEPARTMENT.Head = PROF.Login; |
AND DEPARTMENT.Head = PROF.Login; |
|
... |
... |
WHERE B.Name = "Ava Alyx" |
167 |
245 |
-- end snippet alias-1 |
-- end snippet alias-1 |
168 |
246 |
-- start snippet alias-2 |
-- start snippet alias-2 |
169 |
247 |
SELECT A.Name |
SELECT A.Name |
170 |
|
FROM PROF AS A, DEPARTMENT AS B, STUDENT AS C |
|
|
248 |
|
FROM PROF AS A, |
|
249 |
|
DEPARTMENT AS B, |
|
250 |
|
STUDENT AS C |
171 |
251 |
WHERE C.Name = "Ava Alyx" |
WHERE C.Name = "Ava Alyx" |
172 |
252 |
AND C.Major = B.Code |
AND C.Major = B.Code |
173 |
253 |
AND B.Head = A.Login; |
AND B.Head = A.Login; |
|
... |
... |
WHERE C.Name = "Ava Alyx" |
175 |
255 |
-- end snippet alias-2 |
-- end snippet alias-2 |
176 |
256 |
-- start snippet alias-3 |
-- start snippet alias-3 |
177 |
257 |
SELECT Other.Login |
SELECT Other.Login |
178 |
|
FROM GRADE AS Mine, GRADE AS Other |
|
|
258 |
|
FROM GRADE AS Mine, |
|
259 |
|
GRADE AS Other |
179 |
260 |
WHERE Mine.Login = "aalyx" |
WHERE Mine.Login = "aalyx" |
180 |
261 |
AND Mine.Grade < Other.Grade; |
AND Mine.Grade < Other.Grade; |
181 |
262 |
|
|
182 |
263 |
-- end snippet alias-3 |
-- end snippet alias-3 |
183 |
264 |
-- start snippet alias-4 |
-- start snippet alias-4 |
184 |
265 |
SELECT JOINT.Login |
SELECT JOINT.Login |
185 |
|
FROM PROF AS PROJECT, PROF AS JOINT |
|
|
266 |
|
FROM PROF AS PROJECT, |
|
267 |
|
PROF AS JOINT |
186 |
268 |
WHERE PROJECT.Login = "caubert" |
WHERE PROJECT.Login = "caubert" |
187 |
269 |
AND PROJECT.Department = JOINT.Department; |
AND PROJECT.Department = JOINT.Department; |
188 |
270 |
|
|
189 |
271 |
-- end snippet alias-4 |
-- end snippet alias-4 |
190 |
272 |
-- start snippet alias-5 |
-- start snippet alias-5 |
191 |
273 |
SELECT Fellow.Name AS "Fellow of Ava" |
SELECT Fellow.Name AS "Fellow of Ava" |
192 |
|
FROM STUDENT AS Ava, STUDENT AS Fellow |
|
|
274 |
|
FROM STUDENT AS Ava, |
|
275 |
|
STUDENT AS Fellow |
193 |
276 |
WHERE Ava.Name = "Ava Alyx" |
WHERE Ava.Name = "Ava Alyx" |
194 |
277 |
AND Fellow.Major = Ava.Major |
AND Fellow.Major = Ava.Major |
195 |
278 |
AND NOT Fellow.Login = Ava.Login; |
AND NOT Fellow.Login = Ava.Login; |
|
... |
... |
WHERE DEPARTMENT = ( |
240 |
323 |
-- end snippet transf-1a |
-- end snippet transf-1a |
241 |
324 |
-- start snippet transf-1b |
-- start snippet transf-1b |
242 |
325 |
SELECT PROF.Login |
SELECT PROF.Login |
243 |
|
FROM PROF, STUDENT |
|
|
326 |
|
FROM PROF, |
|
327 |
|
STUDENT |
244 |
328 |
WHERE DEPARTMENT = Major |
WHERE DEPARTMENT = Major |
245 |
329 |
AND STUDENT.Login = "cjoella"; |
AND STUDENT.Login = "cjoella"; |
246 |
330 |
|
|
247 |
331 |
-- end snippet transf-1b |
-- end snippet transf-1b |
248 |
332 |
-- start snippet transf-2a |
-- start snippet transf-2a |
249 |
333 |
SELECT Name |
SELECT Name |
250 |
|
FROM STUDENT, GRADE |
|
|
334 |
|
FROM STUDENT, |
|
335 |
|
GRADE |
251 |
336 |
WHERE Grade > 3.0 |
WHERE Grade > 3.0 |
252 |
337 |
AND STUDENT.Login = GRADE.Login; |
AND STUDENT.Login = GRADE.Login; |
253 |
338 |
|
|
File notes/code/sql/HW_ProfExampleRevisitedRevisited.sql changed (mode: 100644) (index fa44a2b..dbf7cb1) |
... |
... |
CREATE SCHEMA HW_ProfExampleRevisited; |
7 |
7 |
USE HW_ProfExampleRevisited; |
USE HW_ProfExampleRevisited; |
8 |
8 |
|
|
9 |
9 |
CREATE TABLE PROF ( |
CREATE TABLE PROF ( |
10 |
|
Login VARCHAR(25) PRIMARY KEY, NAME VARCHAR(25), |
|
11 |
|
Department CHAR(5) |
|
|
10 |
|
Login VARCHAR(25) PRIMARY KEY, |
|
11 |
|
NAME VARCHAR(25), |
|
12 |
|
Department CHAR(5) |
12 |
13 |
); |
); |
13 |
14 |
|
|
14 |
15 |
CREATE TABLE DEPARTMENT ( |
CREATE TABLE DEPARTMENT ( |
15 |
|
Code CHAR(5) PRIMARY KEY, NAME VARCHAR(25), Head |
|
16 |
|
VARCHAR(25), FOREIGN KEY (Head) REFERENCES PROF (LOGIN) |
|
17 |
|
ON UPDATE CASCADE |
|
|
16 |
|
Code CHAR(5) PRIMARY KEY, |
|
17 |
|
NAME VARCHAR(25), |
|
18 |
|
Head VARCHAR(25), |
|
19 |
|
FOREIGN KEY (Head) REFERENCES PROF (LOGIN) ON UPDATE CASCADE |
18 |
20 |
); |
); |
19 |
21 |
|
|
20 |
22 |
ALTER TABLE PROF |
ALTER TABLE PROF |
21 |
23 |
ADD FOREIGN KEY (Department) REFERENCES DEPARTMENT (Code); |
ADD FOREIGN KEY (Department) REFERENCES DEPARTMENT (Code); |
22 |
24 |
|
|
23 |
25 |
CREATE TABLE STUDENT ( |
CREATE TABLE STUDENT ( |
24 |
|
Login VARCHAR(25) PRIMARY KEY, NAME VARCHAR(25), |
|
25 |
|
Registered DATE, Major CHAR(5), |
|
|
26 |
|
Login VARCHAR(25) PRIMARY KEY, |
|
27 |
|
NAME VARCHAR(25), |
|
28 |
|
Registered DATE, |
|
29 |
|
Major CHAR(5), |
26 |
30 |
FOREIGN KEY (Major) REFERENCES DEPARTMENT (Code) |
FOREIGN KEY (Major) REFERENCES DEPARTMENT (Code) |
27 |
31 |
); |
); |
28 |
32 |
|
|
29 |
33 |
CREATE TABLE GRADE ( |
CREATE TABLE GRADE ( |
30 |
|
Login VARCHAR(25), Grade INT, PRIMARY KEY (LOGIN, Grade), |
|
|
34 |
|
Login VARCHAR(25), |
|
35 |
|
Grade INT, |
|
36 |
|
PRIMARY KEY (LOGIN, Grade), |
31 |
37 |
FOREIGN KEY (LOGIN) REFERENCES STUDENT (LOGIN) |
FOREIGN KEY (LOGIN) REFERENCES STUDENT (LOGIN) |
32 |
38 |
); |
); |
33 |
39 |
|
|
34 |
40 |
INSERT INTO DEPARTMENT |
INSERT INTO DEPARTMENT |
35 |
|
VALUES ('MATH', 'Mathematics', NULL), ('CS', 'Computer |
|
36 |
|
Science', NULL); |
|
37 |
|
|
|
38 |
|
INSERT INTO DEPARTMENT (Code, Name) |
|
39 |
|
VALUES ('CYBR', 'Cyber Secturity'); |
|
40 |
|
|
|
41 |
|
INSERT INTO PROF (LOGIN, Department, Name) |
|
42 |
|
VALUES ('caubert', 'CS', 'Clément Aubert'); |
|
43 |
|
|
|
44 |
|
INSERT INTO PROF (LOGIN, Name, Department) |
|
45 |
|
VALUES ('aturing', 'Alan Turing', 'CS'), ('perdos', 'Paul |
|
46 |
|
Erdős', 'MATH'), ('bgates', 'Bill Gates', 'CYBR'); |
|
47 |
|
|
|
48 |
|
INSERT INTO STUDENT (LOGIN, Name, Registered, Major) |
|
49 |
|
VALUES ('jrakesh', 'Jalal Rakesh', DATE '2017-12-01', |
|
50 |
|
'CS'), ('svlatka', 'Sacnite Vlatka', '2015-03-12', |
|
51 |
|
'MATH'), ('cjoella', 'Candice Joella', '20120212', |
|
52 |
|
'CYBR'), ('aalyx', 'Ava Alyx', 20121011, 'CYBR'), |
|
53 |
|
('caubert', 'Clément Aubert', NULL, 'CYBR'); |
|
|
41 |
|
VALUES ( |
|
42 |
|
'MATH', |
|
43 |
|
'Mathematics', |
|
44 |
|
NULL), |
|
45 |
|
( |
|
46 |
|
'CS', |
|
47 |
|
'Computer |
|
48 |
|
Science', |
|
49 |
|
NULL); |
|
50 |
|
|
|
51 |
|
INSERT INTO DEPARTMENT ( |
|
52 |
|
Code, |
|
53 |
|
Name) |
|
54 |
|
VALUES ( |
|
55 |
|
'CYBR', |
|
56 |
|
'Cyber Secturity'); |
|
57 |
|
|
|
58 |
|
INSERT INTO PROF ( |
|
59 |
|
LOGIN, |
|
60 |
|
Department, |
|
61 |
|
Name) |
|
62 |
|
VALUES ( |
|
63 |
|
'caubert', |
|
64 |
|
'CS', |
|
65 |
|
'Clément Aubert'); |
|
66 |
|
|
|
67 |
|
INSERT INTO PROF ( |
|
68 |
|
LOGIN, |
|
69 |
|
Name, |
|
70 |
|
Department) |
|
71 |
|
VALUES ( |
|
72 |
|
'aturing', |
|
73 |
|
'Alan Turing', |
|
74 |
|
'CS'), |
|
75 |
|
( |
|
76 |
|
'perdos', |
|
77 |
|
'Paul |
|
78 |
|
Erdős', |
|
79 |
|
'MATH'), |
|
80 |
|
( |
|
81 |
|
'bgates', |
|
82 |
|
'Bill Gates', |
|
83 |
|
'CYBR'); |
|
84 |
|
|
|
85 |
|
INSERT INTO STUDENT ( |
|
86 |
|
LOGIN, |
|
87 |
|
Name, |
|
88 |
|
Registered, |
|
89 |
|
Major) |
|
90 |
|
VALUES ( |
|
91 |
|
'jrakesh', |
|
92 |
|
'Jalal Rakesh', |
|
93 |
|
DATE '2017-12-01', |
|
94 |
|
'CS'), |
|
95 |
|
( |
|
96 |
|
'svlatka', |
|
97 |
|
'Sacnite Vlatka', |
|
98 |
|
'2015-03-12', |
|
99 |
|
'MATH'), |
|
100 |
|
( |
|
101 |
|
'cjoella', |
|
102 |
|
'Candice Joella', |
|
103 |
|
'20120212', |
|
104 |
|
'CYBR'), |
|
105 |
|
( |
|
106 |
|
'aalyx', |
|
107 |
|
'Ava Alyx', |
|
108 |
|
20121011, |
|
109 |
|
'CYBR'), |
|
110 |
|
( |
|
111 |
|
'caubert', |
|
112 |
|
'Clément Aubert', |
|
113 |
|
NULL, |
|
114 |
|
'CYBR'); |
54 |
115 |
|
|
55 |
116 |
INSERT INTO GRADE |
INSERT INTO GRADE |
56 |
|
VALUES ('jrakesh', 3.8), ('svlatka', 2.5); |
|
|
117 |
|
VALUES ( |
|
118 |
|
'jrakesh', |
|
119 |
|
3.8), |
|
120 |
|
( |
|
121 |
|
'svlatka', |
|
122 |
|
2.5); |
57 |
123 |
|
|
58 |
124 |
-- end snippet recreate |
-- end snippet recreate |
59 |
125 |
-- start snippet lecture |
-- start snippet lecture |
60 |
126 |
CREATE TABLE HW_Lecture ( |
CREATE TABLE HW_Lecture ( |
61 |
|
NAME VARCHAR(25), Instructor VARCHAR(25), Year YEAR (4), |
|
62 |
|
Code CHAR(5), |
|
63 |
|
PRIMARY KEY (Year, Code), FOREIGN KEY (Instructor) |
|
64 |
|
REFERENCES PROF (LOGIN) |
|
|
127 |
|
NAME VARCHAR(25), |
|
128 |
|
Instructor VARCHAR(25), |
|
129 |
|
Year YEAR (4), |
|
130 |
|
Code CHAR(5), |
|
131 |
|
PRIMARY KEY (Year, Code), |
|
132 |
|
FOREIGN KEY (Instructor) REFERENCES PROF (LOGIN) |
65 |
133 |
); |
); |
66 |
134 |
|
|
67 |
135 |
INSERT INTO HW_Lecture |
INSERT INTO HW_Lecture |
68 |
|
VALUES ('Intro to CS', 'caubert', 2017, '1304'), ('Intro |
|
69 |
|
to Algebra', 'perdos', 2017, '1405'), ('Intro to |
|
70 |
|
Cyber', 'aturing', 2017, '1234'); |
|
|
136 |
|
VALUES ( |
|
137 |
|
'Intro to CS', |
|
138 |
|
'caubert', |
|
139 |
|
2017, |
|
140 |
|
'1304'), |
|
141 |
|
( |
|
142 |
|
'Intro |
|
143 |
|
to Algebra', |
|
144 |
|
'perdos', |
|
145 |
|
2017, |
|
146 |
|
'1405'), |
|
147 |
|
( |
|
148 |
|
'Intro to |
|
149 |
|
Cyber', |
|
150 |
|
'aturing', |
|
151 |
|
2017, |
|
152 |
|
'1234'); |
71 |
153 |
|
|
72 |
154 |
-- end snippet lecture |
-- end snippet lecture |
73 |
155 |
ALTER TABLE GRADE |
ALTER TABLE GRADE |
|
... |
... |
FROM GRADE; |
88 |
170 |
-- start snippet update |
-- start snippet update |
89 |
171 |
UPDATE |
UPDATE |
90 |
172 |
GRADE |
GRADE |
91 |
|
SET LectureCode = '1304', LectureYear = 2017 |
|
|
173 |
|
SET LectureCode = '1304', |
|
174 |
|
LectureYear = 2017 |
92 |
175 |
WHERE LOGIN = 'jrakesh' |
WHERE LOGIN = 'jrakesh' |
93 |
176 |
AND Grade = '2.85'; |
AND Grade = '2.85'; |
94 |
177 |
|
|
95 |
178 |
UPDATE |
UPDATE |
96 |
179 |
GRADE |
GRADE |
97 |
|
SET LectureCode = '1405', LectureYear = 2017 |
|
|
180 |
|
SET LectureCode = '1405', |
|
181 |
|
LectureYear = 2017 |
98 |
182 |
WHERE LOGIN = 'svlatka' |
WHERE LOGIN = 'svlatka' |
99 |
183 |
OR (LOGIN = 'jrakesh' |
OR (LOGIN = 'jrakesh' |
100 |
184 |
AND Grade = '3.85'); |
AND Grade = '3.85'); |
101 |
185 |
|
|
102 |
186 |
UPDATE |
UPDATE |
103 |
187 |
GRADE |
GRADE |
104 |
|
SET LectureCode = '1234', LectureYear = 2017 |
|
|
188 |
|
SET LectureCode = '1234', |
|
189 |
|
LectureYear = 2017 |
105 |
190 |
WHERE LOGIN = 'aalyx' |
WHERE LOGIN = 'aalyx' |
106 |
191 |
OR LOGIN = 'cjoella'; |
OR LOGIN = 'cjoella'; |
107 |
192 |
|
|
108 |
193 |
-- end snippet update |
-- end snippet update |
109 |
194 |
-- start snippet select |
-- start snippet select |
110 |
|
SELECT LOGIN, Grade |
|
|
195 |
|
SELECT LOGIN, |
|
196 |
|
Grade |
111 |
197 |
FROM GRADE |
FROM GRADE |
112 |
198 |
WHERE Lecturecode = '1304' |
WHERE Lecturecode = '1304' |
113 |
199 |
AND LectureYear = '2017'; |
AND LectureYear = '2017'; |
|
... |
... |
SELECT DISTINCT Instructor |
116 |
202 |
FROM HW_Lecture |
FROM HW_Lecture |
117 |
203 |
WHERE Year = 2017; |
WHERE Year = 2017; |
118 |
204 |
|
|
119 |
|
SELECT Name, Grade |
|
120 |
|
FROM STUDENT, GRADE |
|
|
205 |
|
SELECT Name, |
|
206 |
|
Grade |
|
207 |
|
FROM STUDENT, |
|
208 |
|
GRADE |
121 |
209 |
WHERE GRADE.LectureCode = 1405 |
WHERE GRADE.LectureCode = 1405 |
122 |
210 |
AND STUDENT.Login = GRADE.Login; |
AND STUDENT.Login = GRADE.Login; |
123 |
211 |
|
|
|
... |
... |
WHERE Year IN ( |
133 |
221 |
WHERE CODE = '1234'); |
WHERE CODE = '1234'); |
134 |
222 |
|
|
135 |
223 |
SELECT B.name |
SELECT B.name |
136 |
|
FROM STUDENT AS A, STUDENT AS B |
|
|
224 |
|
FROM STUDENT AS A, |
|
225 |
|
STUDENT AS B |
137 |
226 |
WHERE A.Name = 'Ava Alyx' |
WHERE A.Name = 'Ava Alyx' |
138 |
227 |
AND A.Registered > B.Registered; |
AND A.Registered > B.Registered; |
139 |
228 |
|
|
140 |
229 |
SELECT COUNT(DISTINCT PROF.Name) AS 'Head Teaching This Year' |
SELECT COUNT(DISTINCT PROF.Name) AS 'Head Teaching This Year' |
141 |
|
FROM HW_Lecture, DEPARTMENT, PROF |
|
|
230 |
|
FROM HW_Lecture, |
|
231 |
|
DEPARTMENT, |
|
232 |
|
PROF |
142 |
233 |
WHERE Year = 2017 |
WHERE Year = 2017 |
143 |
234 |
AND Instructor = Head |
AND Instructor = Head |
144 |
235 |
AND Head = PROF.Login; |
AND Head = PROF.Login; |
File notes/code/sql/HW_Residency.sql changed (mode: 100644) (index e2de265..df5c735) |
... |
... |
CREATE SCHEMA HW_RESIDENCY; |
6 |
6 |
USE HW_RESIDENCY; |
USE HW_RESIDENCY; |
7 |
7 |
|
|
8 |
8 |
CREATE TABLE PERSON ( |
CREATE TABLE PERSON ( |
9 |
|
FName VARCHAR(40), LName VARCHAR(40), SSN VARCHAR(11) |
|
10 |
|
PRIMARY KEY, Birthdate DATE |
|
|
9 |
|
FName VARCHAR(40), |
|
10 |
|
LName VARCHAR(40), |
|
11 |
|
SSN VARCHAR(11) PRIMARY KEY, |
|
12 |
|
Birthdate DATE |
11 |
13 |
); |
); |
12 |
14 |
|
|
13 |
15 |
CREATE TABLE HOUSE ( |
CREATE TABLE HOUSE ( |
14 |
|
Address VARCHAR(40) PRIMARY KEY, Color ENUM ("blue", |
|
15 |
|
"white", "green") |
|
|
16 |
|
Address VARCHAR(40) PRIMARY KEY, |
|
17 |
|
Color ENUM ("blue", "white", "green") |
16 |
18 |
); |
); |
17 |
19 |
|
|
18 |
20 |
CREATE TABLE RESIDENCY ( |
CREATE TABLE RESIDENCY ( |
19 |
|
Person VARCHAR(11), House VARCHAR(40), PrincipalResidence |
|
20 |
|
BOOLEAN, Status ENUM ("own", "rent", "squat", "other"), |
|
21 |
|
FOREIGN KEY (Person) REFERENCES PERSON (SSN), |
|
|
21 |
|
Person VARCHAR(11), |
|
22 |
|
House VARCHAR(40), |
|
23 |
|
PrincipalResidence BOOLEAN, |
|
24 |
|
Status ENUM ("own", "rent", "squat", "other"), |
|
25 |
|
FOREIGN KEY (Person) REFERENCES PERSON (SSN), |
22 |
26 |
FOREIGN KEY (House) REFERENCES HOUSE (Address) ON DELETE CASCADE |
FOREIGN KEY (House) REFERENCES HOUSE (Address) ON DELETE CASCADE |
23 |
27 |
); |
); |
24 |
28 |
|
|
25 |
29 |
INSERT INTO PERSON |
INSERT INTO PERSON |
26 |
|
VALUES (NULL, "Doe", "000-00-0000", NULL), -- P.1 |
|
27 |
|
("Michael", "Keal", "000-00-0001", DATE |
|
28 |
|
"1983-02-11"), -- P.2 |
|
29 |
|
("James", "Baldwin", "000-00-0002", DATE |
|
|
30 |
|
VALUES ( |
|
31 |
|
NULL, |
|
32 |
|
"Doe", |
|
33 |
|
"000-00-0000", |
|
34 |
|
NULL), -- P.1 |
|
35 |
|
( |
|
36 |
|
"Michael", "Keal", "000-00-0001", DATE "1983-02-11"), -- P.2 |
|
37 |
|
( |
|
38 |
|
"James", "Baldwin", "000-00-0002", DATE |
30 |
39 |
"1967-01-01"), -- P.3 |
"1967-01-01"), -- P.3 |
31 |
|
("Mridula", "Warrier", "000-00-0003", DATE "1990-02-11"); |
|
|
40 |
|
( |
|
41 |
|
"Mridula", "Warrier", "000-00-0003", DATE "1990-02-11"); |
32 |
42 |
|
|
33 |
43 |
-- P.4 |
-- P.4 |
34 |
44 |
INSERT INTO HOUSE |
INSERT INTO HOUSE |
35 |
|
VALUES ("123 Main St.", "blue"), -- H.1 |
|
36 |
|
("456 Second St.", "white"), -- H.2 |
|
37 |
|
("11 Third St.", "blue"); |
|
|
45 |
|
VALUES ( |
|
46 |
|
"123 Main St.", |
|
47 |
|
"blue"), -- H.1 |
|
48 |
|
( |
|
49 |
|
"456 Second St.", "white"), -- H.2 |
|
50 |
|
( |
|
51 |
|
"11 Third St.", "blue"); |
38 |
52 |
|
|
39 |
53 |
-- H.3 |
-- H.3 |
40 |
54 |
INSERT INTO RESIDENCY |
INSERT INTO RESIDENCY |
41 |
|
VALUES ("000-00-0001", "123 Main St.", TRUE, "own"), -- R.1 |
|
42 |
|
("000-00-0001", "456 Second St.", FALSE, "own"), -- R.2 |
|
43 |
|
("000-00-0002", "123 Main St.", TRUE, "rent"), -- R.3 |
|
44 |
|
("000-00-0003", "456 Second St.", TRUE, "own"); |
|
|
55 |
|
VALUES ( |
|
56 |
|
"000-00-0001", |
|
57 |
|
"123 Main St.", |
|
58 |
|
TRUE, |
|
59 |
|
"own"), -- R.1 |
|
60 |
|
( |
|
61 |
|
"000-00-0001", "456 Second St.", FALSE, "own"), -- R.2 |
|
62 |
|
( |
|
63 |
|
"000-00-0002", "123 Main St.", TRUE, "rent"), -- R.3 |
|
64 |
|
( |
|
65 |
|
"000-00-0003", "456 Second St.", TRUE, "own"); |
45 |
66 |
|
|
46 |
67 |
-- R.4 |
-- R.4 |
File notes/code/sql/HW_ResidencySol.sql changed (mode: 100644) (index 32b09f4..8896711) |
... |
... |
CREATE SCHEMA HW_RESIDENCY_SOL; |
6 |
6 |
USE HW_RESIDENCY_SOL; |
USE HW_RESIDENCY_SOL; |
7 |
7 |
|
|
8 |
8 |
CREATE TABLE PERSON ( |
CREATE TABLE PERSON ( |
9 |
|
FName VARCHAR(40), LName VARCHAR(40), SSN VARCHAR(11) |
|
10 |
|
PRIMARY KEY, Birthdate DATE |
|
|
9 |
|
FName VARCHAR(40), |
|
10 |
|
LName VARCHAR(40), |
|
11 |
|
SSN VARCHAR(11) PRIMARY KEY, |
|
12 |
|
Birthdate DATE |
11 |
13 |
); |
); |
12 |
14 |
|
|
13 |
15 |
CREATE TABLE HOUSE ( |
CREATE TABLE HOUSE ( |
14 |
|
Address VARCHAR(40) PRIMARY KEY, Color ENUM ("blue", |
|
15 |
|
"white", "green") |
|
|
16 |
|
Address VARCHAR(40) PRIMARY KEY, |
|
17 |
|
Color ENUM ("blue", "white", "green") |
16 |
18 |
); |
); |
17 |
19 |
|
|
18 |
20 |
CREATE TABLE RESIDENCY ( |
CREATE TABLE RESIDENCY ( |
19 |
|
Person VARCHAR(11), House VARCHAR(40), PrincipalResidence |
|
20 |
|
BOOLEAN, Status ENUM ("own", "rent", "squat", "other"), |
|
21 |
|
FOREIGN KEY (Person) REFERENCES PERSON (SSN), |
|
|
21 |
|
Person VARCHAR(11), |
|
22 |
|
House VARCHAR(40), |
|
23 |
|
PrincipalResidence BOOLEAN, |
|
24 |
|
Status ENUM ("own", "rent", "squat", "other"), |
|
25 |
|
FOREIGN KEY (Person) REFERENCES PERSON (SSN), |
22 |
26 |
FOREIGN KEY (House) REFERENCES HOUSE (Address) ON DELETE CASCADE |
FOREIGN KEY (House) REFERENCES HOUSE (Address) ON DELETE CASCADE |
23 |
27 |
); |
); |
24 |
28 |
|
|
25 |
29 |
INSERT INTO PERSON |
INSERT INTO PERSON |
26 |
|
VALUES (NULL, "Doe", "000-00-0000", NULL), -- P.1 |
|
27 |
|
("Michael", "Keal", "000-00-0001", DATE |
|
28 |
|
"1983-02-11"), -- P.2 |
|
29 |
|
("James", "Baldwin", "000-00-0002", DATE |
|
|
30 |
|
VALUES ( |
|
31 |
|
NULL, |
|
32 |
|
"Doe", |
|
33 |
|
"000-00-0000", |
|
34 |
|
NULL), -- P.1 |
|
35 |
|
( |
|
36 |
|
"Michael", "Keal", "000-00-0001", DATE "1983-02-11"), -- P.2 |
|
37 |
|
( |
|
38 |
|
"James", "Baldwin", "000-00-0002", DATE |
30 |
39 |
"1967-01-01"), -- P.3 |
"1967-01-01"), -- P.3 |
31 |
|
("Mridula", "Warrier", "000-00-0003", DATE "1990-02-11"); |
|
|
40 |
|
( |
|
41 |
|
"Mridula", "Warrier", "000-00-0003", DATE "1990-02-11"); |
32 |
42 |
|
|
33 |
43 |
-- P.4 |
-- P.4 |
34 |
44 |
INSERT INTO HOUSE |
INSERT INTO HOUSE |
35 |
|
VALUES ("123 Main St.", "blue"), -- H.1 |
|
36 |
|
("456 Second St.", "white"), -- H.2 |
|
37 |
|
("11 Third St.", "blue"); |
|
|
45 |
|
VALUES ( |
|
46 |
|
"123 Main St.", |
|
47 |
|
"blue"), -- H.1 |
|
48 |
|
( |
|
49 |
|
"456 Second St.", "white"), -- H.2 |
|
50 |
|
( |
|
51 |
|
"11 Third St.", "blue"); |
38 |
52 |
|
|
39 |
53 |
-- H.3 |
-- H.3 |
40 |
54 |
INSERT INTO RESIDENCY |
INSERT INTO RESIDENCY |
41 |
|
VALUES ("000-00-0001", "123 Main St.", TRUE, "own"), -- R.1 |
|
42 |
|
("000-00-0001", "456 Second St.", FALSE, "own"), -- R.2 |
|
43 |
|
("000-00-0002", "123 Main St.", TRUE, "rent"), -- R.3 |
|
44 |
|
("000-00-0003", "456 Second St.", TRUE, "own"); |
|
|
55 |
|
VALUES ( |
|
56 |
|
"000-00-0001", |
|
57 |
|
"123 Main St.", |
|
58 |
|
TRUE, |
|
59 |
|
"own"), -- R.1 |
|
60 |
|
( |
|
61 |
|
"000-00-0001", "456 Second St.", FALSE, "own"), -- R.2 |
|
62 |
|
( |
|
63 |
|
"000-00-0002", "123 Main St.", TRUE, "rent"), -- R.3 |
|
64 |
|
( |
|
65 |
|
"000-00-0003", "456 Second St.", TRUE, "own"); |
45 |
66 |
|
|
46 |
67 |
-- R.4 |
-- R.4 |
47 |
68 |
-- start snippet solution4 |
-- start snippet solution4 |
|
... |
... |
INSERT INTO RESIDENCY |
54 |
75 |
the next question. |
the next question. |
55 |
76 |
*/ |
*/ |
56 |
77 |
-- Exercise 4 |
-- Exercise 4 |
|
78 |
|
-- List the rows (i.e., P.2, H.1, or even |
|
79 |
|
-- “none”) |
|
80 |
|
-- modified by the following statements: |
57 |
81 |
START TRANSACTION; |
START TRANSACTION; |
58 |
82 |
|
|
59 |
83 |
UPDATE |
UPDATE |
|
... |
... |
ROLLBACK; |
84 |
106 |
START TRANSACTION; |
START TRANSACTION; |
85 |
107 |
|
|
86 |
108 |
-- Commented, because it causes an error. |
-- Commented, because it causes an error. |
|
109 |
|
-- DELETE FROM PERSON |
|
110 |
|
-- WHERE Birthdate = DATE "1990-02-11"; |
|
111 |
|
-- None, because of the foreign key and the |
|
112 |
|
-- referential |
|
113 |
|
-- integrity constraint. |
|
114 |
|
-- ERROR 1451 (23000): Cannot delete or update a |
|
115 |
|
-- parent |
|
116 |
|
-- row: |
|
117 |
|
-- a foreign key constraint fails |
|
118 |
|
-- (`HW_RESIDENCY_SOL`.`RESIDENCY`, CONSTRAINT |
|
119 |
|
-- `RESIDENCY_ibfk_1` FOREIGN KEY (`Person`) |
|
120 |
|
-- REFERENCES |
|
121 |
|
-- `PERSON` (`SSN`)) |
87 |
122 |
ROLLBACK; |
ROLLBACK; |
88 |
123 |
|
|
89 |
124 |
-- end snippet solution4 |
-- end snippet solution4 |
|
... |
... |
SELECT Address |
106 |
131 |
FROM HOUSE; |
FROM HOUSE; |
107 |
132 |
|
|
108 |
133 |
-- … the SSN of the persons whose first name was not |
-- … the SSN of the persons whose first name was not |
|
134 |
|
-- entered in the system (000-00-0000). |
109 |
135 |
SELECT SSN |
SELECT SSN |
110 |
136 |
FROM PERSON |
FROM PERSON |
111 |
137 |
WHERE FName IS NULL; |
WHERE FName IS NULL; |
|
... |
... |
SELECT DISTINCT COLOR |
116 |
141 |
FROM HOUSE; |
FROM HOUSE; |
117 |
142 |
|
|
118 |
143 |
-- … the address of the residency of James Baldwin (123 |
-- … the address of the residency of James Baldwin (123 |
|
144 |
|
-- Main St.). |
119 |
145 |
SELECT House |
SELECT House |
120 |
|
FROM RESIDENCY, PERSON |
|
|
146 |
|
FROM RESIDENCY, |
|
147 |
|
PERSON |
121 |
148 |
WHERE PERSON.Fname = "James" |
WHERE PERSON.Fname = "James" |
122 |
149 |
AND PERSON.LName = "Baldwin" |
AND PERSON.LName = "Baldwin" |
123 |
150 |
AND PERSON.SSN = RESIDENCY.Person; |
AND PERSON.SSN = RESIDENCY.Person; |
124 |
151 |
|
|
125 |
152 |
-- … the first name of the oldest person in the database |
-- … the first name of the oldest person in the database |
|
153 |
|
-- (James). |
126 |
154 |
SELECT FName |
SELECT FName |
127 |
155 |
FROM PERSON |
FROM PERSON |
128 |
156 |
WHERE Birthdate = ( |
WHERE Birthdate = ( |
|
... |
... |
WHERE Birthdate = ( |
133 |
159 |
WHERE Birthdate IS NOT NULL); |
WHERE Birthdate IS NOT NULL); |
134 |
160 |
|
|
135 |
161 |
-- … Michael Keal’s principal residency address (123 Main |
-- … Michael Keal’s principal residency address (123 Main |
|
162 |
|
-- St.). |
136 |
163 |
SELECT RESIDENCY.House |
SELECT RESIDENCY.House |
137 |
|
FROM RESIDENCY, PERSON |
|
|
164 |
|
FROM RESIDENCY, |
|
165 |
|
PERSON |
138 |
166 |
WHERE PERSON.FName = "Michael" |
WHERE PERSON.FName = "Michael" |
139 |
167 |
AND PERSON.LName = "Keal" |
AND PERSON.LName = "Keal" |
140 |
168 |
AND PERSON.SSN = RESIDENCY.Person |
AND PERSON.SSN = RESIDENCY.Person |
141 |
169 |
AND RESIDENCY.PrincipalResidence = TRUE; |
AND RESIDENCY.PrincipalResidence = TRUE; |
142 |
170 |
|
|
143 |
171 |
-- … the (distinct) first and last names of the homeowners |
-- … the (distinct) first and last names of the homeowners |
144 |
|
SELECT DISTINCT (PERSON.FName), PERSON.LName |
|
145 |
|
FROM PERSON, RESIDENCY |
|
|
172 |
|
-- (Michael Keal, Mridula Warrier). |
|
173 |
|
SELECT DISTINCT (PERSON.FName), |
|
174 |
|
PERSON.LName |
|
175 |
|
FROM PERSON, |
|
176 |
|
RESIDENCY |
146 |
177 |
WHERE RESIDENCY.Status = "own" |
WHERE RESIDENCY.Status = "own" |
147 |
178 |
AND RESIDENCY.Person = PERSON.SSN; |
AND RESIDENCY.Person = PERSON.SSN; |
148 |
179 |
|
|
149 |
180 |
-- cf comment at snippet homonyms |
-- cf comment at snippet homonyms |
150 |
|
SELECT PERSON.FName, PERSON.LName |
|
|
181 |
|
SELECT PERSON.FName, |
|
182 |
|
PERSON.LName |
151 |
183 |
FROM PERSON |
FROM PERSON |
152 |
184 |
WHERE SSN IN ( SELECT DISTINCT (RESIDENCY.Person) |
WHERE SSN IN ( SELECT DISTINCT (RESIDENCY.Person) |
153 |
185 |
FROM RESIDENCY |
FROM RESIDENCY |
154 |
186 |
WHERE RESIDENCY.Status = "own"); |
WHERE RESIDENCY.Status = "own"); |
155 |
187 |
|
|
156 |
188 |
-- … the SSN of the persons that have the same principal |
-- … the SSN of the persons that have the same principal |
|
189 |
|
-- residency as James Baldwin (000-00-0001). |
157 |
190 |
SELECT RoomMate.Person |
SELECT RoomMate.Person |
158 |
|
FROM RESIDENCY AS James, RESIDENCY AS RoomMate, PERSON |
|
|
191 |
|
FROM RESIDENCY AS James, |
|
192 |
|
RESIDENCY AS RoomMate, |
|
193 |
|
PERSON |
159 |
194 |
WHERE PERSON.FName = "James" |
WHERE PERSON.FName = "James" |
160 |
195 |
AND PERSON.LName = "Baldwin" |
AND PERSON.LName = "Baldwin" |
161 |
196 |
AND PERSON.SSN = James.Person |
AND PERSON.SSN = James.Person |
|
... |
... |
WHERE PERSON.FName = "James" |
170 |
202 |
START TRANSACTION; |
START TRANSACTION; |
171 |
203 |
|
|
172 |
204 |
-- start snippet homonyms |
-- start snippet homonyms |
|
205 |
|
-- If we have homonymns in our database, e.g. |
173 |
206 |
INSERT INTO PERSON |
INSERT INTO PERSON |
174 |
|
VALUES ("A", "B", "000-00-0010", NULL), ("A", "B", |
|
175 |
|
"000-00-0011", NULL); |
|
|
207 |
|
VALUES ( |
|
208 |
|
"A", |
|
209 |
|
"B", |
|
210 |
|
"000-00-0010", |
|
211 |
|
NULL), |
|
212 |
|
( |
|
213 |
|
"A", |
|
214 |
|
"B", |
|
215 |
|
"000-00-0011", |
|
216 |
|
NULL); |
176 |
217 |
|
|
177 |
218 |
INSERT INTO HOUSE |
INSERT INTO HOUSE |
178 |
|
VALUES ("H", NULL); |
|
|
219 |
|
VALUES ( |
|
220 |
|
"H", |
|
221 |
|
NULL); |
179 |
222 |
|
|
180 |
223 |
-- H.3 |
-- H.3 |
181 |
224 |
INSERT INTO RESIDENCY |
INSERT INTO RESIDENCY |
182 |
|
VALUES ("000-00-0010", "H", TRUE, "own"), ("000-00-0011", |
|
183 |
|
"H", TRUE, "own"); |
|
|
225 |
|
VALUES ( |
|
226 |
|
"000-00-0010", |
|
227 |
|
"H", |
|
228 |
|
TRUE, |
|
229 |
|
"own"), |
|
230 |
|
( |
|
231 |
|
"000-00-0011", |
|
232 |
|
"H", |
|
233 |
|
TRUE, |
|
234 |
|
"own"); |
184 |
235 |
|
|
185 |
236 |
-- Then the query below fails, in the sense that it reports |
-- Then the query below fails, in the sense that it reports |
186 |
|
SELECT DISTINCT (PERSON.FName), PERSON.LName |
|
187 |
|
FROM PERSON, RESIDENCY |
|
|
237 |
|
-- the name "A, B" only once. |
|
238 |
|
SELECT DISTINCT (PERSON.FName), |
|
239 |
|
PERSON.LName |
|
240 |
|
FROM PERSON, |
|
241 |
|
RESIDENCY |
188 |
242 |
WHERE RESIDENCY.Status = "own" |
WHERE RESIDENCY.Status = "own" |
189 |
243 |
AND RESIDENCY.Person = PERSON.SSN; |
AND RESIDENCY.Person = PERSON.SSN; |
190 |
244 |
|
|
191 |
245 |
-- A better (and not much more complicated) solution would |
-- A better (and not much more complicated) solution would |
192 |
|
SELECT PERSON.FName, PERSON.LName |
|
|
246 |
|
-- have been |
|
247 |
|
SELECT PERSON.FName, |
|
248 |
|
PERSON.LName |
193 |
249 |
FROM PERSON |
FROM PERSON |
194 |
250 |
WHERE SSN IN ( SELECT DISTINCT (RESIDENCY.Person) |
WHERE SSN IN ( SELECT DISTINCT (RESIDENCY.Person) |
195 |
251 |
FROM RESIDENCY |
FROM RESIDENCY |
File notes/code/sql/HW_SimpleBook.sql changed (mode: 100644) (index 241d4d1..ef8f5b4) |
... |
... |
CREATE SCHEMA HW_SimpleBook; |
6 |
6 |
USE HW_SimpleBook; |
USE HW_SimpleBook; |
7 |
7 |
|
|
8 |
8 |
CREATE TABLE AUTHOR ( |
CREATE TABLE AUTHOR ( |
9 |
|
FName VARCHAR(30), LName VARCHAR(30), Id INT PRIMARY KEY |
|
|
9 |
|
FName VARCHAR(30), |
|
10 |
|
LName VARCHAR(30), |
|
11 |
|
Id INT PRIMARY KEY |
10 |
12 |
); |
); |
11 |
13 |
|
|
12 |
14 |
CREATE TABLE PUBLISHER ( |
CREATE TABLE PUBLISHER ( |
13 |
|
NAME VARCHAR(30), City VARCHAR(30), PRIMARY KEY (NAME, City) |
|
|
15 |
|
NAME VARCHAR(30), |
|
16 |
|
City VARCHAR(30), |
|
17 |
|
PRIMARY KEY (NAME, City) |
14 |
18 |
); |
); |
15 |
19 |
|
|
16 |
20 |
CREATE TABLE BOOK ( |
CREATE TABLE BOOK ( |
17 |
|
Title VARCHAR(30), Pages INT, Published DATE, |
|
18 |
|
PublisherName VARCHAR(30), |
|
19 |
|
PublisherCity VARCHAR(30), FOREIGN KEY (PublisherName, |
|
20 |
|
PublisherCity) REFERENCES PUBLISHER (NAME, City), |
|
21 |
|
Author INT, FOREIGN KEY (Author) REFERENCES AUTHOR (Id), |
|
22 |
|
PRIMARY KEY (Title, Published) |
|
|
21 |
|
Title VARCHAR(30), |
|
22 |
|
Pages INT, |
|
23 |
|
Published DATE, |
|
24 |
|
PublisherName VARCHAR(30), |
|
25 |
|
PublisherCity VARCHAR(30), |
|
26 |
|
FOREIGN KEY (PublisherName, PublisherCity) REFERENCES |
|
27 |
|
PUBLISHER (NAME, City), |
|
28 |
|
Author INT, |
|
29 |
|
FOREIGN KEY (Author) REFERENCES AUTHOR (Id), |
|
30 |
|
PRIMARY KEY (Title, Published) |
23 |
31 |
); |
); |
24 |
32 |
|
|
25 |
33 |
INSERT INTO AUTHOR |
INSERT INTO AUTHOR |
26 |
|
VALUES ("Virginia", "Wolve", 01), ("Paul", "Bryant", 02), |
|
27 |
|
("Samantha", "Carey", 03); |
|
|
34 |
|
VALUES ( |
|
35 |
|
"Virginia", |
|
36 |
|
"Wolve", |
|
37 |
|
01), |
|
38 |
|
( |
|
39 |
|
"Paul", |
|
40 |
|
"Bryant", |
|
41 |
|
02), |
|
42 |
|
( |
|
43 |
|
"Samantha", |
|
44 |
|
"Carey", |
|
45 |
|
03); |
28 |
46 |
|
|
29 |
47 |
INSERT INTO PUBLISHER |
INSERT INTO PUBLISHER |
30 |
|
VALUES ("Gallimard", "Paris"), ("Gallimard", "New-York"), |
|
31 |
|
("Jobs Pub.", "New-York"); |
|
|
48 |
|
VALUES ( |
|
49 |
|
"Gallimard", |
|
50 |
|
"Paris"), |
|
51 |
|
( |
|
52 |
|
"Gallimard", |
|
53 |
|
"New-York"), |
|
54 |
|
( |
|
55 |
|
"Jobs Pub.", |
|
56 |
|
"New-York"); |
32 |
57 |
|
|
33 |
58 |
INSERT INTO BOOK |
INSERT INTO BOOK |
34 |
|
VALUES ("What to eat", 213, DATE '20170219', "Gallimard", |
|
35 |
|
"Paris", 01), ("Where to live", 120, DATE '20130212', |
|
36 |
|
"Gallimard", "New-York", 02), ("My Life, I", 100, DATE |
|
37 |
|
'18790220', "Gallimard", "Paris", 03), ("My Life, II", |
|
38 |
|
100, DATE '18790219', "Jobs Pub.", "New-York", 03); |
|
|
59 |
|
VALUES ( |
|
60 |
|
"What to eat", |
|
61 |
|
213, |
|
62 |
|
DATE '20170219', |
|
63 |
|
"Gallimard", |
|
64 |
|
"Paris", |
|
65 |
|
01), |
|
66 |
|
( |
|
67 |
|
"Where to live", |
|
68 |
|
120, |
|
69 |
|
DATE '20130212', |
|
70 |
|
"Gallimard", |
|
71 |
|
"New-York", |
|
72 |
|
02), |
|
73 |
|
( |
|
74 |
|
"My Life, I", |
|
75 |
|
100, |
|
76 |
|
DATE '18790220', |
|
77 |
|
"Gallimard", |
|
78 |
|
"Paris", |
|
79 |
|
03), |
|
80 |
|
( |
|
81 |
|
"My Life, II", |
|
82 |
|
100, |
|
83 |
|
DATE '18790219', |
|
84 |
|
"Jobs Pub.", |
|
85 |
|
"New-York", |
|
86 |
|
03); |
File notes/code/sql/HW_SocialMedia.sql changed (mode: 100644) (index acdb22b..fabebfe) |
... |
... |
USE HW_SocialMedia; |
7 |
7 |
-- start snippet set-up |
-- start snippet set-up |
8 |
8 |
/* code/sql/HW_SocialMedia.sql */ |
/* code/sql/HW_SocialMedia.sql */ |
9 |
9 |
CREATE TABLE ACCOUNT ( |
CREATE TABLE ACCOUNT ( |
10 |
|
ID INT PRIMARY KEY, NAME VARCHAR(25), Email VARCHAR(25) UNIQUE |
|
|
10 |
|
ID INT PRIMARY KEY, |
|
11 |
|
NAME VARCHAR(25), |
|
12 |
|
Email VARCHAR(25) UNIQUE |
11 |
13 |
); |
); |
12 |
14 |
|
|
13 |
15 |
CREATE TABLE SUBSCRIBE ( |
CREATE TABLE SUBSCRIBE ( |
14 |
|
Subscriber INT, Subscribed INT, DATE DATE, FOREIGN KEY |
|
15 |
|
(Subscriber) REFERENCES ACCOUNT (ID), |
|
16 |
|
FOREIGN KEY (Subscribed) REFERENCES ACCOUNT (ID), PRIMARY |
|
17 |
|
KEY (Subscriber, Subscribed) |
|
|
16 |
|
Subscriber INT, |
|
17 |
|
Subscribed INT, |
|
18 |
|
DATE DATE, |
|
19 |
|
FOREIGN KEY (Subscriber) REFERENCES ACCOUNT (ID), |
|
20 |
|
FOREIGN KEY (Subscribed) REFERENCES ACCOUNT (ID), |
|
21 |
|
PRIMARY KEY (Subscriber, Subscribed) |
18 |
22 |
); |
); |
19 |
23 |
|
|
20 |
24 |
CREATE TABLE VIDEO ( |
CREATE TABLE VIDEO ( |
21 |
|
ID INT PRIMARY KEY, Title VARCHAR(25), Released DATE, |
|
22 |
|
Publisher INT, |
|
|
25 |
|
ID INT PRIMARY KEY, |
|
26 |
|
Title VARCHAR(25), |
|
27 |
|
Released DATE, |
|
28 |
|
Publisher INT, |
23 |
29 |
FOREIGN KEY (Publisher) REFERENCES ACCOUNT (ID) |
FOREIGN KEY (Publisher) REFERENCES ACCOUNT (ID) |
24 |
30 |
); |
); |
25 |
31 |
|
|
26 |
32 |
CREATE TABLE THUMBS_UP ( |
CREATE TABLE THUMBS_UP ( |
27 |
|
Account INT, Video INT, DATE DATE, PRIMARY KEY (Account, |
|
28 |
|
Video), FOREIGN KEY (Account) REFERENCES ACCOUNT (ID), |
|
29 |
|
FOREIGN KEY (Video) REFERENCES VIDEO (ID) |
|
|
33 |
|
Account INT, |
|
34 |
|
Video INT, |
|
35 |
|
DATE DATE, |
|
36 |
|
PRIMARY KEY (Account, Video), |
|
37 |
|
FOREIGN KEY (Account) REFERENCES ACCOUNT (ID), |
|
38 |
|
FOREIGN KEY (Video) REFERENCES VIDEO (ID) |
30 |
39 |
); |
); |
31 |
40 |
|
|
32 |
41 |
INSERT INTO ACCOUNT |
INSERT INTO ACCOUNT |
33 |
|
VALUES (1, "Bob Ross", "bob@ross.com"), (2, NULL, |
|
34 |
|
"anon@fai.com"), (3, "Martha", NULL); |
|
|
42 |
|
VALUES ( |
|
43 |
|
1, |
|
44 |
|
"Bob Ross", |
|
45 |
|
"bob@ross.com"), |
|
46 |
|
( |
|
47 |
|
2, |
|
48 |
|
NULL, |
|
49 |
|
"anon@fai.com"), |
|
50 |
|
( |
|
51 |
|
3, |
|
52 |
|
"Martha", |
|
53 |
|
NULL); |
35 |
54 |
|
|
36 |
55 |
INSERT INTO SUBSCRIBE |
INSERT INTO SUBSCRIBE |
37 |
|
VALUES (2, 1, DATE "2020-01-01"), (3, 1, DATE |
|
38 |
|
"2019-03-03"), (3, 2, DATE "2019-03-03"), (2, 2, DATE |
|
39 |
|
"2019-03-03"), (1, 2, DATE "2019-03-03"); |
|
|
56 |
|
VALUES ( |
|
57 |
|
2, |
|
58 |
|
1, |
|
59 |
|
DATE "2020-01-01"), |
|
60 |
|
( |
|
61 |
|
3, |
|
62 |
|
1, |
|
63 |
|
DATE "2019-03-03"), |
|
64 |
|
( |
|
65 |
|
3, |
|
66 |
|
2, |
|
67 |
|
DATE "2019-03-03"), |
|
68 |
|
( |
|
69 |
|
2, |
|
70 |
|
2, |
|
71 |
|
DATE "2019-03-03"), |
|
72 |
|
( |
|
73 |
|
1, |
|
74 |
|
2, |
|
75 |
|
DATE "2019-03-03"); |
40 |
76 |
|
|
41 |
77 |
-- The first entry means that 2 subscribed to 1, not the |
-- The first entry means that 2 subscribed to 1, not the |
|
78 |
|
-- other way around. |
|
79 |
|
-- And similarly for the other entries. |
42 |
80 |
INSERT INTO VIDEO |
INSERT INTO VIDEO |
43 |
|
VALUES (10, "My first video!", DATE "2020-02-02", 1), |
|
44 |
|
(20, "My second video!", DATE "2020-02-03", 1), (30, |
|
45 |
|
"My vacations", DATE "2020-02-04", 2); |
|
|
81 |
|
VALUES ( |
|
82 |
|
10, |
|
83 |
|
"My first video!", |
|
84 |
|
DATE "2020-02-02", |
|
85 |
|
1), |
|
86 |
|
( |
|
87 |
|
20, |
|
88 |
|
"My second video!", |
|
89 |
|
DATE "2020-02-03", |
|
90 |
|
1), |
|
91 |
|
( |
|
92 |
|
30, |
|
93 |
|
"My vacations", |
|
94 |
|
DATE "2020-02-04", |
|
95 |
|
2); |
46 |
96 |
|
|
47 |
97 |
INSERT INTO THUMBS_UP |
INSERT INTO THUMBS_UP |
48 |
|
VALUES (2, 10, DATE "2020-02-02"), (3, 10, DATE |
|
49 |
|
"2020-02-02"), (2, 20, DATE "2020-02-02"), (1, 30, DATE |
|
50 |
|
"2020-02-05"); |
|
|
98 |
|
VALUES ( |
|
99 |
|
2, |
|
100 |
|
10, |
|
101 |
|
DATE "2020-02-02"), |
|
102 |
|
( |
|
103 |
|
3, |
|
104 |
|
10, |
|
105 |
|
DATE "2020-02-02"), |
|
106 |
|
( |
|
107 |
|
2, |
|
108 |
|
20, |
|
109 |
|
DATE "2020-02-02"), |
|
110 |
|
( |
|
111 |
|
1, |
|
112 |
|
30, |
|
113 |
|
DATE "2020-02-05"); |
51 |
114 |
|
|
52 |
115 |
-- end snippet set-up |
-- end snippet set-up |
53 |
116 |
/* |
/* |
|
... |
... |
INSERT INTO THUMBS_UP |
63 |
124 |
-- start snippet solution |
-- start snippet solution |
64 |
125 |
/* code/sql/HW_SocialMedia.sql */ |
/* code/sql/HW_SocialMedia.sql */ |
65 |
126 |
-- … the title of all the videos ("My first video!", "My |
-- … the title of all the videos ("My first video!", "My |
|
127 |
|
-- second video!", "My vacations"). |
66 |
128 |
SELECT TITLE |
SELECT TITLE |
67 |
129 |
FROM VIDEO; |
FROM VIDEO; |
68 |
130 |
|
|
69 |
131 |
-- … the release date of the video whose title is "My first |
-- … the release date of the video whose title is "My first |
|
132 |
|
-- video!" ("2020-02-02"). |
70 |
133 |
SELECT Released |
SELECT Released |
71 |
134 |
FROM VIDEO |
FROM VIDEO |
72 |
135 |
WHERE Title = "My first video!"; |
WHERE Title = "My first video!"; |
73 |
136 |
|
|
74 |
137 |
-- … the ID of the account(s) where the "Name" attribute |
-- … the ID of the account(s) where the "Name" attribute |
|
138 |
|
-- was not given ("2"). |
75 |
139 |
SELECT ID |
SELECT ID |
76 |
140 |
FROM ACCOUNT |
FROM ACCOUNT |
77 |
141 |
WHERE Name IS NULL; |
WHERE Name IS NULL; |
78 |
142 |
|
|
79 |
143 |
-- … the ID of the videos whose title contains the word |
-- … the ID of the videos whose title contains the word |
|
144 |
|
-- "video" ("10", "20"). |
80 |
145 |
SELECT ID |
SELECT ID |
81 |
146 |
FROM VIDEO |
FROM VIDEO |
82 |
147 |
WHERE TITLE LIKE "%video%"; |
WHERE TITLE LIKE "%video%"; |
|
... |
... |
FROM VIDEO |
91 |
152 |
WHERE Title REGEXP 'video'; |
WHERE Title REGEXP 'video'; |
92 |
153 |
|
|
93 |
154 |
-- … the number of thumbs up for the video with title "My |
-- … the number of thumbs up for the video with title "My |
|
155 |
|
-- vacations" ("1"). |
94 |
156 |
SELECT COUNT(*) |
SELECT COUNT(*) |
95 |
|
FROM THUMBS_UP, VIDEO |
|
|
157 |
|
FROM THUMBS_UP, |
|
158 |
|
VIDEO |
96 |
159 |
WHERE VIDEO.Title = "My vacations" |
WHERE VIDEO.Title = "My vacations" |
97 |
160 |
AND VIDEO.ID = THUMBS_UP.Video; |
AND VIDEO.ID = THUMBS_UP.Video; |
98 |
161 |
|
|
|
... |
... |
ORDER BY Released ASC |
118 |
180 |
LIMIT 1; |
LIMIT 1; |
119 |
181 |
|
|
120 |
182 |
-- … the names of the accounts who gave a thumbs up to the |
-- … the names of the accounts who gave a thumbs up to the |
|
183 |
|
-- video with id 30 ("Bob Ross"). |
121 |
184 |
SELECT Name |
SELECT Name |
122 |
|
FROM ACCOUNT, THUMBS_UP |
|
|
185 |
|
FROM ACCOUNT, |
|
186 |
|
THUMBS_UP |
123 |
187 |
WHERE THUMBS_UP.Video = 30 |
WHERE THUMBS_UP.Video = 30 |
124 |
188 |
AND THUMBS_UP.Account = ACCOUNT.ID; |
AND THUMBS_UP.Account = ACCOUNT.ID; |
125 |
189 |
|
|
126 |
190 |
-- … the ID of the account with the greatest number of |
-- … the ID of the account with the greatest number of |
|
191 |
|
-- subscribers ("2"). |
127 |
192 |
SELECT Subscribed |
SELECT Subscribed |
128 |
193 |
FROM SUBSCRIBE |
FROM SUBSCRIBE |
129 |
194 |
GROUP BY Subscribed |
GROUP BY Subscribed |
File notes/code/sql/HW_Storm.sql changed (mode: 100644) (index 4e65b8b..d1dc78f) |
... |
... |
USE HW_STORM; |
7 |
7 |
|
|
8 |
8 |
-- start snippet schema |
-- start snippet schema |
9 |
9 |
CREATE TABLE STORM ( |
CREATE TABLE STORM ( |
10 |
|
NAME VARCHAR(25) PRIMARY KEY, Kind ENUM ("Tropical |
|
11 |
|
Storm", "Hurricane"), WindSpeed INT, |
|
|
10 |
|
NAME VARCHAR(25) PRIMARY KEY, |
|
11 |
|
Kind ENUM ("Tropical |
|
12 |
|
Storm", "Hurricane"), |
|
13 |
|
WindSpeed INT, |
12 |
14 |
Creation DATE |
Creation DATE |
13 |
15 |
); |
); |
14 |
16 |
|
|
|
... |
... |
ALTER TABLE STORM MODIFY Kind ENUM ("Tropical Storm", |
17 |
19 |
"Hurricane", "Typhoon"); |
"Hurricane", "Typhoon"); |
18 |
20 |
|
|
19 |
21 |
CREATE TABLE STATE ( |
CREATE TABLE STATE ( |
20 |
|
NAME VARCHAR(25) UNIQUE, Postal_abbr CHAR(2) PRIMARY KEY, |
|
21 |
|
Affected_by VARCHAR(25), FOREIGN KEY (Affected_by) |
|
22 |
|
REFERENCES STORM (NAME) ON DELETE SET NULL ON UPDATE |
|
23 |
|
CASCADE |
|
|
22 |
|
NAME VARCHAR(25) UNIQUE, |
|
23 |
|
Postal_abbr CHAR(2) PRIMARY KEY, |
|
24 |
|
Affected_by VARCHAR(25), |
|
25 |
|
FOREIGN KEY (Affected_by) REFERENCES STORM (NAME) ON |
|
26 |
|
DELETE SET NULL ON UPDATE CASCADE |
24 |
27 |
); |
); |
25 |
28 |
|
|
26 |
29 |
--end snippet schema |
--end snippet schema |
27 |
30 |
-- start snippet insert |
-- start snippet insert |
28 |
31 |
INSERT INTO STORM |
INSERT INTO STORM |
29 |
|
VALUES ("Harvey", "Hurricane", 130, "2017-08-17"); |
|
|
32 |
|
VALUES ( |
|
33 |
|
"Harvey", |
|
34 |
|
"Hurricane", |
|
35 |
|
130, |
|
36 |
|
"2017-08-17"); |
30 |
37 |
|
|
31 |
38 |
-- In the following, the entry gets created, but date is |
-- In the following, the entry gets created, but date is |
|
39 |
|
-- "corrected" to "2017-17-08"! |
|
40 |
|
-- INSERT INTO STORM |
|
41 |
|
-- VALUES ("Dummy", "Hurricane", 120, |
|
42 |
|
-- "2017-17-08"); |
|
43 |
|
-- The error message returned is |
|
44 |
|
-- ERROR 1292 (22007) at line 34: Incorrect date |
|
45 |
|
-- value: |
|
46 |
|
-- "2017-17-08" for column |
|
47 |
|
-- `HW_STORM`.`STORM`.`Creation` |
|
48 |
|
-- at |
|
49 |
|
-- row 1 |
|
50 |
|
-- In the following, we explicitely use "DATE", and |
|
51 |
|
-- since |
|
52 |
|
-- the date is incorrect, nothing gets inserted. |
|
53 |
|
-- INSERT INTO STORM |
|
54 |
|
-- VALUES ("Dummy2", "Hurricane", 120, DATE |
|
55 |
|
-- "2017-17-08"); |
|
56 |
|
-- ERROR 1525 (HY000) at line 40: Incorrect DATE |
|
57 |
|
-- value: |
|
58 |
|
-- "2017-17-08" |
|
59 |
|
-- The next one sets NULL for DATE. |
32 |
60 |
INSERT INTO STORM |
INSERT INTO STORM |
33 |
|
VALUES ("Irma", "Tropical Storm", 102, DEFAULT); |
|
|
61 |
|
VALUES ( |
|
62 |
|
"Irma", |
|
63 |
|
"Tropical Storm", |
|
64 |
|
102, |
|
65 |
|
DEFAULT); |
34 |
66 |
|
|
35 |
67 |
-- end snippet insert |
-- end snippet insert |
36 |
68 |
-- start snippet date |
-- start snippet date |
37 |
69 |
INSERT INTO STATE |
INSERT INTO STATE |
38 |
|
VALUES ("Georgia", "GA", NULL); |
|
|
70 |
|
VALUES ( |
|
71 |
|
"Georgia", |
|
72 |
|
"GA", |
|
73 |
|
NULL); |
39 |
74 |
|
|
40 |
75 |
INSERT INTO STATE |
INSERT INTO STATE |
41 |
|
VALUES ("Texas", "TX", NULL); |
|
|
76 |
|
VALUES ( |
|
77 |
|
"Texas", |
|
78 |
|
"TX", |
|
79 |
|
NULL); |
42 |
80 |
|
|
43 |
81 |
INSERT INTO STATE |
INSERT INTO STATE |
44 |
|
VALUES ("Florida", "FL", NULL); |
|
|
82 |
|
VALUES ( |
|
83 |
|
"Florida", |
|
84 |
|
"FL", |
|
85 |
|
NULL); |
45 |
86 |
|
|
46 |
87 |
-- This instruction is not using the primary key, is that a |
-- This instruction is not using the primary key, is that a |
|
88 |
|
-- problem? |
47 |
89 |
UPDATE |
UPDATE |
48 |
90 |
STATE |
STATE |
49 |
91 |
SET Affected_by = "Harvey" |
SET Affected_by = "Harvey" |
File notes/code/sql/HW_TextbookAuthoredSol.sql changed (mode: 100644) (index 3a4a107..7cc3d53) |
... |
... |
CREATE SCHEMA HW_PROJECT1; |
7 |
7 |
USE HW_PROJECT1; |
USE HW_PROJECT1; |
8 |
8 |
|
|
9 |
9 |
CREATE TABLE TEXTBOOK ( |
CREATE TABLE TEXTBOOK ( |
10 |
|
Title VARCHAR(50), ISBN CHAR(13) PRIMARY KEY, Price DECIMAL(10, 2) |
|
|
10 |
|
Title VARCHAR(50), |
|
11 |
|
ISBN CHAR(13) PRIMARY KEY, |
|
12 |
|
Price DECIMAL(10, 2) |
11 |
13 |
); |
); |
12 |
14 |
|
|
13 |
15 |
CREATE TABLE AUTHOR ( |
CREATE TABLE AUTHOR ( |
14 |
|
LName VARCHAR(30), FName VARCHAR(30), Email VARCHAR(30), |
|
15 |
|
PRIMARY KEY (Lname, Fname) |
|
|
16 |
|
LName VARCHAR(30), |
|
17 |
|
FName VARCHAR(30), |
|
18 |
|
Email VARCHAR(30), |
|
19 |
|
PRIMARY KEY (Lname, Fname) |
16 |
20 |
); |
); |
17 |
21 |
|
|
18 |
22 |
|
|
|
... |
... |
CREATE TABLE AUTHOR ( |
22 |
26 |
whose ISBN is I. |
whose ISBN is I. |
23 |
27 |
*/ |
*/ |
24 |
28 |
CREATE TABLE AUTHORED ( |
CREATE TABLE AUTHORED ( |
25 |
|
Book CHAR(13), FOREIGN KEY (Book) REFERENCES TEXTBOOK |
|
26 |
|
(ISBN), AuthorLName VARCHAR(30), AuthorFName |
|
27 |
|
VARCHAR(30), |
|
|
29 |
|
Book CHAR(13), |
|
30 |
|
FOREIGN KEY (Book) REFERENCES TEXTBOOK (ISBN), |
|
31 |
|
AuthorLName VARCHAR(30), |
|
32 |
|
AuthorFName VARCHAR(30), |
28 |
33 |
FOREIGN KEY (AuthorLName, AuthorFName) REFERENCES AUTHOR |
FOREIGN KEY (AuthorLName, AuthorFName) REFERENCES AUTHOR |
29 |
34 |
(LName, Fname) |
(LName, Fname) |
30 |
35 |
); |
); |
31 |
36 |
|
|
32 |
37 |
INSERT INTO TEXTBOOK |
INSERT INTO TEXTBOOK |
33 |
|
VALUES ('Starting Out with Java: Early Objects', |
|
34 |
|
9780133776744, 30.00), ('NoSQL for Mere Mortals', |
|
35 |
|
9780134023212, 47.99); |
|
|
38 |
|
VALUES ( |
|
39 |
|
'Starting Out with Java: Early Objects', |
|
40 |
|
9780133776744, |
|
41 |
|
30.00), |
|
42 |
|
( |
|
43 |
|
'NoSQL for Mere Mortals', |
|
44 |
|
9780134023212, |
|
45 |
|
47.99); |
36 |
46 |
|
|
37 |
47 |
INSERT INTO AUTHOR |
INSERT INTO AUTHOR |
38 |
|
VALUES ('Sullivan', 'Dan', NULL), ('Gaddis', 'Tony', NULL); |
|
|
48 |
|
VALUES ( |
|
49 |
|
'Sullivan', |
|
50 |
|
'Dan', |
|
51 |
|
NULL), |
|
52 |
|
( |
|
53 |
|
'Gaddis', |
|
54 |
|
'Tony', |
|
55 |
|
NULL); |
39 |
56 |
|
|
40 |
57 |
INSERT INTO AUTHORED |
INSERT INTO AUTHORED |
41 |
|
VALUES (9780134023212, 'Sullivan', 'Dan'), |
|
42 |
|
(9780133776744, 'Gaddis', 'Tony'); |
|
|
58 |
|
VALUES ( |
|
59 |
|
9780134023212, |
|
60 |
|
'Sullivan', |
|
61 |
|
'Dan'), |
|
62 |
|
( |
|
63 |
|
9780133776744, |
|
64 |
|
'Gaddis', |
|
65 |
|
'Tony'); |
43 |
66 |
|
|
44 |
67 |
|
|
45 |
68 |
/* |
/* |
|
... |
... |
WHERE LName = 'Gaddis' |
72 |
95 |
the values. |
the values. |
73 |
96 |
*/ |
*/ |
74 |
97 |
INSERT INTO TEXTBOOK |
INSERT INTO TEXTBOOK |
75 |
|
VALUES ('Fundamentals of Database Systems', |
|
76 |
|
9780133970777, 165.89); |
|
|
98 |
|
VALUES ( |
|
99 |
|
'Fundamentals of Database Systems', |
|
100 |
|
9780133970777, |
|
101 |
|
165.89); |
77 |
102 |
|
|
78 |
103 |
|
|
79 |
104 |
/* |
/* |
|
... |
... |
INSERT INTO TEXTBOOK |
88 |
113 |
textbook you just added to our database. |
textbook you just added to our database. |
89 |
114 |
*/ |
*/ |
90 |
115 |
INSERT INTO AUTHORED |
INSERT INTO AUTHORED |
91 |
|
VALUES (9780133970777, 'Gaddis', 'Tony'); |
|
|
116 |
|
VALUES ( |
|
117 |
|
9780133970777, |
|
118 |
|
'Gaddis', |
|
119 |
|
'Tony'); |
92 |
120 |
|
|
93 |
121 |
|
|
94 |
122 |
/* |
/* |
|
... |
... |
ALTER TABLE TEXTBOOK |
121 |
149 |
price set to the default value. |
price set to the default value. |
122 |
150 |
*/ |
*/ |
123 |
151 |
INSERT INTO TEXTBOOK |
INSERT INTO TEXTBOOK |
124 |
|
VALUES ('Proof Theory', 9780486490731, DEFAULT); |
|
|
152 |
|
VALUES ( |
|
153 |
|
'Proof Theory', |
|
154 |
|
9780486490731, |
|
155 |
|
DEFAULT); |
125 |
156 |
|
|
126 |
157 |
|
|
127 |
158 |
/* |
/* |
|
... |
... |
INSERT INTO TEXTBOOK |
139 |
170 |
should have the "Name" attribute set to "Pearson". |
should have the "Name" attribute set to "Pearson". |
140 |
171 |
*/ |
*/ |
141 |
172 |
CREATE TABLE EDITOR ( |
CREATE TABLE EDITOR ( |
142 |
|
NAME VARCHAR(30) PRIMARY KEY, Address VARCHAR(255), |
|
143 |
|
Website VARCHAR(100) |
|
|
173 |
|
NAME VARCHAR(30) PRIMARY KEY, |
|
174 |
|
Address VARCHAR(255), |
|
175 |
|
Website VARCHAR(100) |
144 |
176 |
); |
); |
145 |
177 |
|
|
146 |
178 |
INSERT INTO EDITOR |
INSERT INTO EDITOR |
147 |
|
VALUES ('Pearson', NULL, 'http://pearsoned.com/'), |
|
148 |
|
('Dover', NULL, |
|
149 |
|
'https://store.doverpublications.com/'); |
|
|
179 |
|
VALUES ( |
|
180 |
|
'Pearson', |
|
181 |
|
NULL, |
|
182 |
|
'http://pearsoned.com/'), |
|
183 |
|
( |
|
184 |
|
'Dover', |
|
185 |
|
NULL, |
|
186 |
|
'https://store.doverpublications.com/'); |
150 |
187 |
|
|
151 |
188 |
|
|
152 |
189 |
/* |
/* |
|
... |
... |
INSERT INTO EDITOR |
166 |
203 |
the TEXTBOOK table. |
the TEXTBOOK table. |
167 |
204 |
*/ |
*/ |
168 |
205 |
CREATE TABLE PUBLISHED ( |
CREATE TABLE PUBLISHED ( |
169 |
|
Editor VARCHAR(30), FOREIGN KEY (Editor) REFERENCES |
|
170 |
|
EDITOR (NAME), Textbook CHAR(13), FOREIGN KEY |
|
171 |
|
(Textbook) REFERENCES TEXTBOOK (ISBN) |
|
|
206 |
|
Editor VARCHAR(30), |
|
207 |
|
FOREIGN KEY (Editor) REFERENCES EDITOR (NAME), |
|
208 |
|
Textbook CHAR(13), |
|
209 |
|
FOREIGN KEY (Textbook) REFERENCES TEXTBOOK (ISBN) |
172 |
210 |
); |
); |
173 |
211 |
|
|
174 |
212 |
|
|
|
... |
... |
CREATE TABLE PUBLISHED ( |
183 |
221 |
the textbook whose ISBN is 9780133776744. |
the textbook whose ISBN is 9780133776744. |
184 |
222 |
*/ |
*/ |
185 |
223 |
INSERT INTO PUBLISHED |
INSERT INTO PUBLISHED |
186 |
|
VALUES ("Pearson", 9780133776744); |
|
|
224 |
|
VALUES ( |
|
225 |
|
"Pearson", |
|
226 |
|
9780133776744); |
187 |
227 |
|
|
188 |
228 |
|
|
189 |
229 |
/* |
/* |
File notes/code/sql/HW_Train.sql changed (mode: 100644) (index 85be945..de640aa) |
... |
... |
USE HW_Train; |
7 |
7 |
-- start snippet set-up |
-- start snippet set-up |
8 |
8 |
/* code/sql/HW_Train.sql */ |
/* code/sql/HW_Train.sql */ |
9 |
9 |
CREATE TABLE TRAIN ( |
CREATE TABLE TRAIN ( |
10 |
|
ID VARCHAR(30), Model VARCHAR(30), ConstructionYear YEAR (4) |
|
|
10 |
|
ID VARCHAR(30), |
|
11 |
|
Model VARCHAR(30), |
|
12 |
|
ConstructionYear YEAR (4) |
11 |
13 |
); |
); |
12 |
14 |
|
|
13 |
15 |
CREATE TABLE CONDUCTOR ( |
CREATE TABLE CONDUCTOR ( |
14 |
|
ID VARCHAR(20), NAME VARCHAR(20), ExperienceLevel VARCHAR(20) |
|
|
16 |
|
ID VARCHAR(20), |
|
17 |
|
NAME VARCHAR(20), |
|
18 |
|
ExperienceLevel VARCHAR(20) |
15 |
19 |
); |
); |
16 |
20 |
|
|
17 |
21 |
CREATE TABLE ASSIGNED_TO ( |
CREATE TABLE ASSIGNED_TO ( |
18 |
|
TrainId VARCHAR(20), ConductorId VARCHAR(20), Day DATE, |
|
19 |
|
PRIMARY KEY (TrainId, ConductorId) |
|
|
22 |
|
TrainId VARCHAR(20), |
|
23 |
|
ConductorId VARCHAR(20), |
|
24 |
|
Day DATE, |
|
25 |
|
PRIMARY KEY (TrainId, ConductorId) |
20 |
26 |
); |
); |
21 |
27 |
|
|
22 |
28 |
-- end snippet set-up |
-- end snippet set-up |
|
... |
... |
DROP TABLE TRAIN, CONDUCTOR, ASSIGNED_TO; |
35 |
41 |
-- Question 1: |
-- Question 1: |
36 |
42 |
CREATE TABLE TRAIN ( |
CREATE TABLE TRAIN ( |
37 |
43 |
Id VARCHAR(30) PRIMARY KEY, -- This line was changed. |
Id VARCHAR(30) PRIMARY KEY, -- This line was changed. |
38 |
|
Model VARCHAR(30), ConstructionYear YEAR (4) |
|
|
44 |
|
Model VARCHAR(30), |
|
45 |
|
ConstructionYear YEAR (4) |
39 |
46 |
); |
); |
40 |
47 |
|
|
41 |
48 |
-- Question 2 : |
-- Question 2 : |
42 |
49 |
CREATE TABLE CONDUCTOR ( |
CREATE TABLE CONDUCTOR ( |
43 |
|
Id VARCHAR(20), NAME VARCHAR(20), ExperienceLevel VARCHAR(20) |
|
|
50 |
|
Id VARCHAR(20), |
|
51 |
|
NAME VARCHAR(20), |
|
52 |
|
ExperienceLevel VARCHAR(20) |
44 |
53 |
); |
); |
45 |
54 |
|
|
46 |
55 |
ALTER TABLE CONDUCTOR |
ALTER TABLE CONDUCTOR |
|
... |
... |
ALTER TABLE CONDUCTOR |
48 |
57 |
|
|
49 |
58 |
-- Question 3 |
-- Question 3 |
50 |
59 |
CREATE TABLE ASSIGNED_TO ( |
CREATE TABLE ASSIGNED_TO ( |
51 |
|
TrainId VARCHAR(20), ConductorId VARCHAR(20), Day DATE, |
|
52 |
|
PRIMARY KEY (TrainId, ConductorId), FOREIGN KEY |
|
53 |
|
(TrainId) REFERENCES TRAIN (Id), -- This line was changed |
|
|
60 |
|
TrainId VARCHAR(20), |
|
61 |
|
ConductorId VARCHAR(20), |
|
62 |
|
Day DATE, |
|
63 |
|
PRIMARY KEY (TrainId, ConductorId), |
|
64 |
|
FOREIGN KEY (TrainId) REFERENCES TRAIN (Id), -- This line was changed |
54 |
65 |
FOREIGN KEY (ConductorId) REFERENCES CONDUCTOR (Id) -- This line was changed |
FOREIGN KEY (ConductorId) REFERENCES CONDUCTOR (Id) -- This line was changed |
55 |
66 |
); |
); |
56 |
67 |
|
|
|
... |
... |
CREATE TABLE ASSIGNED_TO ( |
59 |
70 |
We insert more than one tuple, to make the SELECT statements that follow easier |
We insert more than one tuple, to make the SELECT statements that follow easier |
60 |
71 |
to test and debug. |
to test and debug. |
61 |
72 |
*/ |
*/ |
62 |
|
INSERT INTO TRAIN VALUES ('K-13', 'SurfLiner', 2019), |
|
63 |
|
('K-12', 'Regina', 2015); |
|
|
73 |
|
INSERT INTO TRAIN |
|
74 |
|
VALUES ( |
|
75 |
|
'K-13', |
|
76 |
|
'SurfLiner', |
|
77 |
|
2019), |
|
78 |
|
( |
|
79 |
|
'K-12', |
|
80 |
|
'Regina', |
|
81 |
|
2015); |
64 |
82 |
|
|
65 |
83 |
INSERT INTO CONDUCTOR |
INSERT INTO CONDUCTOR |
66 |
|
VALUES ('GP1029', 'Bill', 'Junior'), ('GP1030', |
|
67 |
|
'Sandrine', 'Junior'); |
|
|
84 |
|
VALUES ( |
|
85 |
|
'GP1029', |
|
86 |
|
'Bill', |
|
87 |
|
'Junior'), |
|
88 |
|
( |
|
89 |
|
'GP1030', |
|
90 |
|
'Sandrine', |
|
91 |
|
'Junior'); |
68 |
92 |
|
|
69 |
93 |
INSERT INTO ASSIGNED_TO |
INSERT INTO ASSIGNED_TO |
70 |
|
VALUES ('K-13', 'GP1029', DATE '2015/12/14'), ('K-12', |
|
71 |
|
'GP1030', '20120909'); |
|
|
94 |
|
VALUES ( |
|
95 |
|
'K-13', |
|
96 |
|
'GP1029', |
|
97 |
|
DATE '2015/12/14'), |
|
98 |
|
( |
|
99 |
|
'K-12', |
|
100 |
|
'GP1030', |
|
101 |
|
'20120909'); |
72 |
102 |
|
|
73 |
103 |
-- Question 5: |
-- Question 5: |
74 |
104 |
UPDATE |
UPDATE |
|
... |
... |
WHERE TrainId = 'K-13' |
100 |
130 |
|
|
101 |
131 |
-- 5. |
-- 5. |
102 |
132 |
SELECT Model |
SELECT Model |
103 |
|
FROM TRAIN, ASSIGNED_TO |
|
|
133 |
|
FROM TRAIN, |
|
134 |
|
ASSIGNED_TO |
104 |
135 |
WHERE ConductorID = 'GP1029' |
WHERE ConductorID = 'GP1029' |
105 |
136 |
AND TrainId = TRAIN.ID; |
AND TrainId = TRAIN.ID; |
106 |
137 |
|
|
File notes/code/sql/HW_TriggerExample.sql changed (mode: 100644) (index 3af2ce5..6b66ce5) |
2 |
2 |
DROP SCHEMA IF EXISTS HW_TriggerExample; |
DROP SCHEMA IF EXISTS HW_TriggerExample; |
3 |
3 |
|
|
4 |
4 |
-- To drop only a trigger, you can use |
-- To drop only a trigger, you can use |
|
5 |
|
-- DROP TRIGGER IF EXISTS |
|
6 |
|
-- HW_TriggerExample.NUMBER_OF_STUDENT_INC; |
|
7 |
|
-- DROP TRIGGER IF EXISTS |
|
8 |
|
-- HW_TriggerExample.NUMBER_OF_STUDENT_DEC; |
5 |
9 |
CREATE SCHEMA HW_TriggerExample; |
CREATE SCHEMA HW_TriggerExample; |
6 |
10 |
|
|
7 |
11 |
USE HW_TriggerExample; |
USE HW_TriggerExample; |
8 |
12 |
|
|
9 |
13 |
-- start snippet trigger-1 |
-- start snippet trigger-1 |
10 |
14 |
CREATE TABLE STUDENT ( |
CREATE TABLE STUDENT ( |
11 |
|
Login VARCHAR(30) PRIMARY KEY, Average FLOAT |
|
|
15 |
|
Login VARCHAR(30) PRIMARY KEY, |
|
16 |
|
Average FLOAT |
12 |
17 |
); |
); |
13 |
18 |
|
|
14 |
19 |
CREATE TABLE GRADE ( |
CREATE TABLE GRADE ( |
15 |
|
Student VARCHAR(30), Exam VARCHAR(30), Grade INT, PRIMARY |
|
16 |
|
KEY (Student, Exam), FOREIGN KEY (Student) REFERENCES |
|
17 |
|
STUDENT (LOGIN) |
|
|
20 |
|
Student VARCHAR(30), |
|
21 |
|
Exam VARCHAR(30), |
|
22 |
|
Grade INT, |
|
23 |
|
PRIMARY KEY (Student, Exam), |
|
24 |
|
FOREIGN KEY (Student) REFERENCES STUDENT (LOGIN) |
18 |
25 |
); |
); |
19 |
26 |
|
|
20 |
27 |
-- end snippet trigger-1 |
-- end snippet trigger-1 |
|
... |
... |
CREATE TRIGGER NUMBER_OF_STUDENT_INC |
31 |
34 |
SET @number_of_student = @number_of_student + 1; |
SET @number_of_student = @number_of_student + 1; |
32 |
35 |
|
|
33 |
36 |
-- end snippet trigger-2 |
-- end snippet trigger-2 |
34 |
|
INSERT INTO STUDENT (LOGIN) |
|
35 |
|
VALUES ("A"), ("B"), ("C"), ("D"); |
|
|
37 |
|
INSERT INTO STUDENT ( |
|
38 |
|
LOGIN) |
|
39 |
|
VALUES ( |
|
40 |
|
"A"), |
|
41 |
|
( |
|
42 |
|
"B"), |
|
43 |
|
( |
|
44 |
|
"C"), |
|
45 |
|
( |
|
46 |
|
"D"); |
36 |
47 |
|
|
37 |
48 |
SELECT COUNT(*) |
SELECT COUNT(*) |
38 |
49 |
FROM STUDENT; |
FROM STUDENT; |
|
... |
... |
CREATE TRIGGER STUDENT_AVERAGE |
72 |
83 |
WHERE STUDENT.Login = NEW.Student; |
WHERE STUDENT.Login = NEW.Student; |
73 |
84 |
|
|
74 |
85 |
-- The "NEW" keyword here refers to the "new" entry |
-- The "NEW" keyword here refers to the "new" entry |
|
86 |
|
-- that is being inserted by the INSERT statement |
|
87 |
|
-- triggering |
|
88 |
|
-- the trigger. |
|
89 |
|
-- end snippet trigger-3 |
75 |
90 |
INSERT INTO GRADE |
INSERT INTO GRADE |
76 |
|
VALUES ("A", "Exam 1", 50), ("A", "Exam 2", 40), ("B", |
|
77 |
|
"Exam 1", 80), ("B", "Exam 2", 100); |
|
|
91 |
|
VALUES ( |
|
92 |
|
"A", |
|
93 |
|
"Exam 1", |
|
94 |
|
50), |
|
95 |
|
( |
|
96 |
|
"A", |
|
97 |
|
"Exam 2", |
|
98 |
|
40), |
|
99 |
|
( |
|
100 |
|
"B", |
|
101 |
|
"Exam 1", |
|
102 |
|
80), |
|
103 |
|
( |
|
104 |
|
"B", |
|
105 |
|
"Exam 2", |
|
106 |
|
100); |
78 |
107 |
|
|
79 |
108 |
SELECT * |
SELECT * |
80 |
109 |
FROM GRADE; |
FROM GRADE; |
|
... |
... |
SELECT * |
87 |
112 |
FROM STUDENT; |
FROM STUDENT; |
88 |
113 |
|
|
89 |
114 |
-- Tada, all the averages have been computed! |
-- Tada, all the averages have been computed! |
|
115 |
|
-- Note also that the student "C" does not have an |
|
116 |
|
-- average! |
File notes/code/sql/HW_Work.sql changed (mode: 100644) (index a596b78..62c7283) |
... |
... |
USE HW_Work; |
7 |
7 |
-- start snippet set-up |
-- start snippet set-up |
8 |
8 |
/* code/sql/HW_Work.sql */ |
/* code/sql/HW_Work.sql */ |
9 |
9 |
CREATE TABLE AUTHOR ( |
CREATE TABLE AUTHOR ( |
10 |
|
NAME VARCHAR(30) PRIMARY KEY, Email VARCHAR(30) |
|
|
10 |
|
NAME VARCHAR(30) PRIMARY KEY, |
|
11 |
|
Email VARCHAR(30) |
11 |
12 |
); |
); |
12 |
13 |
|
|
13 |
14 |
CREATE TABLE WORK ( |
CREATE TABLE WORK ( |
14 |
|
Title VARCHAR(30) PRIMARY KEY, Author VARCHAR(30), |
|
15 |
|
FOREIGN KEY (Author) REFERENCES AUTHOR (NAME) ON DELETE |
|
|
15 |
|
Title VARCHAR(30) PRIMARY KEY, |
|
16 |
|
Author VARCHAR(30), |
|
17 |
|
FOREIGN KEY (Author) REFERENCES AUTHOR (NAME) ON DELETE |
16 |
18 |
CASCADE ON UPDATE CASCADE |
CASCADE ON UPDATE CASCADE |
17 |
19 |
); |
); |
18 |
20 |
|
|
19 |
21 |
CREATE TABLE BOOK ( |
CREATE TABLE BOOK ( |
20 |
|
ISBN INT PRIMARY KEY, Work VARCHAR(30), Published DATE, |
|
21 |
|
Price DECIMAL(10, 2), |
|
|
22 |
|
ISBN INT PRIMARY KEY, |
|
23 |
|
Work VARCHAR(30), |
|
24 |
|
Published DATE, |
|
25 |
|
Price DECIMAL(10, 2), |
22 |
26 |
FOREIGN KEY (WORK) REFERENCES WORK (Title) ON DELETE |
FOREIGN KEY (WORK) REFERENCES WORK (Title) ON DELETE |
23 |
27 |
RESTRICT ON UPDATE CASCADE |
RESTRICT ON UPDATE CASCADE |
24 |
28 |
); |
); |
25 |
29 |
|
|
26 |
30 |
CREATE TABLE EBOOK ( |
CREATE TABLE EBOOK ( |
27 |
|
ISBN INT PRIMARY KEY, Work VARCHAR(30), Published DATE, |
|
28 |
|
Price DECIMAL(10, 2), |
|
|
31 |
|
ISBN INT PRIMARY KEY, |
|
32 |
|
Work VARCHAR(30), |
|
33 |
|
Published DATE, |
|
34 |
|
Price DECIMAL(10, 2), |
29 |
35 |
FOREIGN KEY (WORK) REFERENCES WORK (Title) ON DELETE |
FOREIGN KEY (WORK) REFERENCES WORK (Title) ON DELETE |
30 |
36 |
RESTRICT ON UPDATE CASCADE |
RESTRICT ON UPDATE CASCADE |
31 |
37 |
); |
); |
32 |
38 |
|
|
33 |
39 |
INSERT INTO AUTHOR |
INSERT INTO AUTHOR |
34 |
|
VALUES ("Virginia W.", "vw@isp.net"), -- A.1 |
|
35 |
|
("Paul B.", "pb@isp.net"), -- A.2 |
|
36 |
|
("Samantha T.", "st@fai.fr") -- A.3 |
|
|
40 |
|
VALUES ( |
|
41 |
|
"Virginia W.", |
|
42 |
|
"vw@isp.net"), -- A.1 |
|
43 |
|
( |
|
44 |
|
"Paul B.", "pb@isp.net"), -- A.2 |
|
45 |
|
( |
|
46 |
|
"Samantha T.", "st@fai.fr") -- A.3 |
37 |
47 |
; |
; |
38 |
48 |
|
|
39 |
49 |
INSERT INTO WORK |
INSERT INTO WORK |
40 |
|
VALUES ("What to eat", "Virginia W.") -- W.1 |
|
|
50 |
|
VALUES ( |
|
51 |
|
"What to eat", |
|
52 |
|
"Virginia W.") -- W.1 |
41 |
53 |
; |
; |
42 |
54 |
|
|
43 |
55 |
INSERT INTO BOOK |
INSERT INTO BOOK |
44 |
|
VALUES (15155627, "What to eat", DATE '20170219', |
|
45 |
|
12.89) -- B.1 |
|
|
56 |
|
VALUES ( |
|
57 |
|
15155627, |
|
58 |
|
"What to eat", |
|
59 |
|
DATE '20170219', |
|
60 |
|
12.89) -- B.1 |
46 |
61 |
; |
; |
47 |
62 |
|
|
48 |
63 |
INSERT INTO EBOOK |
INSERT INTO EBOOK |
49 |
|
VALUES (15155628, "What to eat", DATE '20170215', |
|
50 |
|
9.89) -- E.1 |
|
|
64 |
|
VALUES ( |
|
65 |
|
15155628, |
|
66 |
|
"What to eat", |
|
67 |
|
DATE '20170215', |
|
68 |
|
9.89) -- E.1 |
51 |
69 |
; |
; |
52 |
70 |
|
|
53 |
71 |
--end snippet set-up |
--end snippet set-up |
|
... |
... |
START TRANSACTION; |
70 |
88 |
|
|
71 |
89 |
-- We don't want to perform the actual insertions. |
-- We don't want to perform the actual insertions. |
72 |
90 |
INSERT INTO EBOOK |
INSERT INTO EBOOK |
73 |
|
VALUES (0, NULL, 20180101, 0); |
|
|
91 |
|
VALUES ( |
|
92 |
|
0, |
|
93 |
|
NULL, |
|
94 |
|
20180101, |
|
95 |
|
0); |
74 |
96 |
|
|
75 |
97 |
|
|
76 |
98 |
/* |
/* |
|
... |
... |
INSERT INTO EBOOK |
78 |
100 |
So, "Successful insertion". |
So, "Successful insertion". |
79 |
101 |
*/ |
*/ |
80 |
102 |
-- The following statement raises an error. |
-- The following statement raises an error. |
|
103 |
|
-- INSERT INTO AUTHOR |
|
104 |
|
-- VALUES ("Mary B.", "mb@fai.fr", NULL); |
81 |
105 |
/* |
/* |
82 |
106 |
ERROR 1136 (21S01): Column count doesn't match value count at row 1 |
ERROR 1136 (21S01): Column count doesn't match value count at row 1 |
83 |
107 |
So, "Other kind of error". |
So, "Other kind of error". |
84 |
108 |
*/ |
*/ |
85 |
109 |
-- The following statement raises an error. |
-- The following statement raises an error. |
|
110 |
|
-- INSERT INTO WORK |
|
111 |
|
-- VALUES ("My Life", "Claude A."); |
86 |
112 |
/* |
/* |
87 |
113 |
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails |
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails |
88 |
114 |
(`HW_EXAM_1`.`WORK`, CONSTRAINT `WORK_ibfk_1` FOREIGN KEY (`Author`) REFERENCES `AUTHOR` (`Name`) |
(`HW_EXAM_1`.`WORK`, CONSTRAINT `WORK_ibfk_1` FOREIGN KEY (`Author`) REFERENCES `AUTHOR` (`Name`) |
|
... |
... |
INSERT INTO EBOOK |
94 |
116 |
So, "Referential integrity constraint" |
So, "Referential integrity constraint" |
95 |
117 |
*/ |
*/ |
96 |
118 |
INSERT INTO BOOK |
INSERT INTO BOOK |
97 |
|
VALUES (00000000, NULL, DATE '20001225', 90.9); |
|
|
119 |
|
VALUES ( |
|
120 |
|
00000000, |
|
121 |
|
NULL, |
|
122 |
|
DATE '20001225', |
|
123 |
|
90.9); |
98 |
124 |
|
|
99 |
125 |
|
|
100 |
126 |
/* |
/* |
|
... |
... |
INSERT INTO BOOK |
102 |
128 |
So, "Successful insertion". |
So, "Successful insertion". |
103 |
129 |
*/ |
*/ |
104 |
130 |
-- The following statement raises an error. |
-- The following statement raises an error. |
|
131 |
|
-- INSERT INTO AUTHOR |
|
132 |
|
-- VALUES ("Virginia W.", "alt@isp.net"); |
105 |
133 |
/* |
/* |
106 |
134 |
ERROR 1062 (23000): Duplicate entry 'Virginia W.' for key 'PRIMARY' |
ERROR 1062 (23000): Duplicate entry 'Virginia W.' for key 'PRIMARY' |
107 |
135 |
So, "Entity integrity constraint". |
So, "Entity integrity constraint". |
|
... |
... |
WHERE Title = "What to eat"; |
149 |
175 |
Does not change any row. |
Does not change any row. |
150 |
176 |
*/ |
*/ |
151 |
177 |
-- The following statement raises an error. |
-- The following statement raises an error. |
|
178 |
|
-- DELETE FROM AUTHOR |
|
179 |
|
-- WHERE Name = "Virginia W."; |
152 |
180 |
/* |
/* |
153 |
181 |
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails |
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails |
154 |
182 |
(`HW_EXAM_1`.`BOOK`, CONSTRAINT `BOOK_ibfk_1` FOREIGN KEY (`Work`) REFERENCES `WORK` (`Title`) ON UPDATE CASCADE) |
(`HW_EXAM_1`.`BOOK`, CONSTRAINT `BOOK_ibfk_1` FOREIGN KEY (`Work`) REFERENCES `WORK` (`Title`) ON UPDATE CASCADE) |
|
... |
... |
WHERE Title = "What to eat"; |
159 |
185 |
ROLLBACK; |
ROLLBACK; |
160 |
186 |
|
|
161 |
187 |
-- We go back to the previous state. |
-- We go back to the previous state. |
|
188 |
|
-- You can now assume that there is more data than |
|
189 |
|
-- what |
|
190 |
|
-- we |
|
191 |
|
-- inserted, if that helps you. Write a command that |
|
192 |
|
-- selects |
|
193 |
|
-- … |
|
194 |
|
-- We insert some dummy values for this next part. |
162 |
195 |
INSERT INTO WORK |
INSERT INTO WORK |
163 |
|
VALUES ("My Life", "Paul B."), ("What to eat, 2", "Virginia W."); |
|
|
196 |
|
VALUES ( |
|
197 |
|
"My Life", |
|
198 |
|
"Paul B."), |
|
199 |
|
( |
|
200 |
|
"What to eat, 2", |
|
201 |
|
"Virginia W."); |
164 |
202 |
|
|
165 |
203 |
INSERT INTO BOOK |
INSERT INTO BOOK |
166 |
|
VALUES (15355627, "My Life", DATE '20180219', 15.00), |
|
167 |
|
(12912912, "What to eat, 2", DATE '20200101', 13); |
|
|
204 |
|
VALUES ( |
|
205 |
|
15355627, |
|
206 |
|
"My Life", |
|
207 |
|
DATE '20180219', |
|
208 |
|
15.00), |
|
209 |
|
( |
|
210 |
|
12912912, |
|
211 |
|
"What to eat, 2", |
|
212 |
|
DATE '20200101', |
|
213 |
|
13); |
168 |
214 |
|
|
169 |
215 |
INSERT INTO EBOOK |
INSERT INTO EBOOK |
170 |
|
VALUES (15150628, "My Life", DATE '20190215', 10.89), |
|
171 |
|
(42912912, "What to eat, 2", DATE '20200115', 12); |
|
|
216 |
|
VALUES ( |
|
217 |
|
15150628, |
|
218 |
|
"My Life", |
|
219 |
|
DATE '20190215', |
|
220 |
|
10.89), |
|
221 |
|
( |
|
222 |
|
42912912, |
|
223 |
|
"What to eat, 2", |
|
224 |
|
DATE '20200115', |
|
225 |
|
12); |
172 |
226 |
|
|
173 |
227 |
-- … the price of all the ebooks. |
-- … the price of all the ebooks. |
174 |
228 |
SELECT Price |
SELECT Price |
175 |
229 |
FROM EBOOK; |
FROM EBOOK; |
176 |
230 |
|
|
177 |
231 |
-- … the (distinct) names of the authors who have authored |
-- … the (distinct) names of the authors who have authored |
|
232 |
|
-- a piece of work. |
178 |
233 |
SELECT DISTINCT Author |
SELECT DISTINCT Author |
179 |
234 |
FROM WORK; |
FROM WORK; |
180 |
235 |
|
|
|
... |
... |
SELECT MAX(Price) |
207 |
255 |
FROM BOOK; |
FROM BOOK; |
208 |
256 |
|
|
209 |
257 |
-- … the number of pieces of work written by the author |
-- … the number of pieces of work written by the author |
|
258 |
|
-- whose name is “Virginia W.”. |
210 |
259 |
SELECT COUNT(*) |
SELECT COUNT(*) |
211 |
260 |
FROM WORK |
FROM WORK |
212 |
261 |
WHERE WORK.Author = "Virginia W."; |
WHERE WORK.Author = "Virginia W."; |
213 |
262 |
|
|
214 |
263 |
-- … the email of the author who wrote the piece of work |
-- … the email of the author who wrote the piece of work |
|
264 |
|
-- called “My Life”. |
215 |
265 |
SELECT Email |
SELECT Email |
216 |
|
FROM AUTHOR, WORK |
|
|
266 |
|
FROM AUTHOR, |
|
267 |
|
WORK |
217 |
268 |
WHERE WORK.Title = "My Life" |
WHERE WORK.Title = "My Life" |
218 |
269 |
AND WORK.Author = AUTHOR.Name; |
AND WORK.Author = AUTHOR.Name; |
219 |
270 |
|
|
220 |
271 |
-- the isbn(s) of the book containing a work written by the |
-- the isbn(s) of the book containing a work written by the |
|
272 |
|
-- author whose email is "vw@isp.net". |
221 |
273 |
SELECT ISBN |
SELECT ISBN |
222 |
|
FROM BOOK, WORK, AUTHOR |
|
|
274 |
|
FROM BOOK, |
|
275 |
|
WORK, |
|
276 |
|
AUTHOR |
223 |
277 |
WHERE AUTHOR.Email = "vw@isp.net" |
WHERE AUTHOR.Email = "vw@isp.net" |
224 |
278 |
AND WORK.Author = AUTHOR.Name |
AND WORK.Author = AUTHOR.Name |
225 |
279 |
AND BOOK.Work = WORK.Title; |
AND BOOK.Work = WORK.Title; |
|
... |
... |
WHERE |
246 |
297 |
they are both given the title "BANNED", which violates the unicity of value in primary keys. |
they are both given the title "BANNED", which violates the unicity of value in primary keys. |
247 |
298 |
*/ |
*/ |
248 |
299 |
-- Write one or multiple commands that would delete the work |
-- Write one or multiple commands that would delete the work |
|
300 |
|
-- whose title is “My Life”, as well as all of |
|
301 |
|
-- the |
|
302 |
|
-- books |
|
303 |
|
-- and ebooks versions of it. |
|
304 |
|
-- The following statement raises an error. |
|
305 |
|
-- DELETE FROM WORK |
|
306 |
|
-- WHERE Title = "My Life"; |
249 |
307 |
/* |
/* |
250 |
308 |
Fails |
Fails |
251 |
309 |
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails |
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails |