List of commits:
Subject Hash Author Date (UTC)
Changed SQL code formatting. 6c3cad5a2545f46ab113f7df7a83457857d82ed8 aubert@math.cnrs.fr 2020-09-09 17:04:55
Cleaned code. 5bdb4faed3a83b81257734f1e1aced2890783f04 aubert@math.cnrs.fr 2020-09-03 21:35:41
Added the first project. 564a02887933f2395bc40d7d8a10833f657659fd aubert@math.cnrs.fr 2020-08-28 22:34:08
Week 2 edits, added quiz #1, couple of fixes, replaced single quote with double quotes. 3c9942731678900122088356db3a2cbabd99b9be aubert@math.cnrs.fr 2020-08-27 19:00:13
Added ressource for makefile. 7696c44bca707646530a7dbb71bf2e05badaa306 aubert@math.cnrs.fr 2020-08-03 16:00:23
Crystal's final edits. 714e3030423a836c4ba07890f9aa5e45f58ad15a aubert@math.cnrs.fr 2020-05-21 17:43:26
Converted an image into a figure (Movie example). c55e61ed5d11631e908d99b14ef10a0a0247bda0 aubert@math.cnrs.fr 2020-05-20 20:58:41
Re-formatted SQL code. 915442a1ba4d8baa120343f98de5ee39d4ac45f6 aubert@math.cnrs.fr 2020-05-18 15:52:06
Fixed Known_bugs 5900c572928ec3b8c98c82fe4e95ebbe9aeee6c3 aubert@math.cnrs.fr 2020-05-15 18:19:36
Fixed contrib and enriched example. 04864c0ee2d4fa77b4e681ebf8049c4642bf1e67 aubert@math.cnrs.fr 2020-05-15 18:17:22
Fixed formatting mistake. 948a87c75b5d9aa8317feb5a0859d4efc23e95d6 aubert@math.cnrs.fr 2020-05-15 17:58:40
Cleaned SQL code. 4d39ebc5c1a3566ef4d3fa7afc8b2868f827c108 aubert@math.cnrs.fr 2020-05-15 17:41:00
Fixing few mistakes in code. b7eb7a0e476f8e0c3c6d3e651fd80827a03dd127 aubert@math.cnrs.fr 2020-05-15 17:38:32
Fixing few mistakes in code. 2bc77d7ee4e82e6961ce123fb7c3e1c68cba59b5 aubert@math.cnrs.fr 2020-05-15 17:30:02
Testing and indenting SQL code. a2b3bb4e242dd4980b94b25d11d6001459e2f0a0 aubert@math.cnrs.fr 2020-05-15 17:26:27
Clarified an example. e68bac453ab427c132b55249e21a08166b112f31 aubert@math.cnrs.fr 2020-05-15 15:06:54
Edits in style. 47578b081f74e9ec706772fa70a3079957129542 aubert@math.cnrs.fr 2020-05-15 14:38:16
Added activity diagram. 11c9acfa88c398f7463d6e54f45ea48c8793caf1 aubert@math.cnrs.fr 2020-05-15 14:34:31
Added activity diagram. 995cf4f64c43601716f77bb46d1535025ea14d10 aubert@math.cnrs.fr 2020-05-15 14:33:30
Edits in intro, converted an image to a figure for example of class diagram. 1ff4ef2f7f44ece81972a6c77e9f6654c144fcdc aubert@math.cnrs.fr 2020-05-14 22:12:38
Commit 6c3cad5a2545f46ab113f7df7a83457857d82ed8 - Changed SQL code formatting.
Author: aubert@math.cnrs.fr
Author date (UTC): 2020-09-09 17:04
Committer name: aubert@math.cnrs.fr
Committer date (UTC): 2020-09-09 17:04
Parent(s): 5bdb4faed3a83b81257734f1e1aced2890783f04
Signer:
Signing key:
Signing status: N
Tree: fb115d774e5fd9f085a9975e5eccb030bc834ddf
File Lines added Lines deleted
notes/Makefile 1 1
notes/code/sql/HW_AdvancedFK.sql 21 13
notes/code/sql/HW_Avg.sql 6 1
notes/code/sql/HW_Captone.sql 136 71
notes/code/sql/HW_Certificate.sql 93 41
notes/code/sql/HW_Computer.sql 45 11
notes/code/sql/HW_ComputerVariation.sql 42 13
notes/code/sql/HW_ConstraintsPart1.sql 6 4
notes/code/sql/HW_DBCoffee.sql 104 34
notes/code/sql/HW_DefaultTest.sql 13 3
notes/code/sql/HW_Department.sql 42 9
notes/code/sql/HW_EBookshop.sql 36 10
notes/code/sql/HW_FKtest.sql 2 1
notes/code/sql/HW_Faculty.sql 14 8
notes/code/sql/HW_PKtest.sql 3 1
notes/code/sql/HW_Person.sql 20 12
notes/code/sql/HW_ProcedureExamples.sql 22 7
notes/code/sql/HW_ProfExample.sql 127 42
notes/code/sql/HW_ProfExampleRevisitedRevisited.sql 134 43
notes/code/sql/HW_Residency.sql 40 19
notes/code/sql/HW_ResidencySol.sql 107 54
notes/code/sql/HW_Short.sql 11 5
notes/code/sql/HW_SimpleBook.sql 65 17
notes/code/sql/HW_SocialMedia.sql 95 32
notes/code/sql/HW_Storm.sql 53 29
notes/code/sql/HW_TextbookAuthored.sql 35 12
notes/code/sql/HW_TextbookAuthoredSol.sql 65 25
notes/code/sql/HW_Train.sql 47 16
notes/code/sql/HW_TriggerExample.sql 43 18
notes/code/sql/HW_Work.sql 100 48
File notes/Makefile changed (mode: 100644) (index d260bd7..5e25416)
... ... $(JAVA_CODE):
133 133 .PHONY: clean_sql $(SQL_CODE) .PHONY: clean_sql $(SQL_CODE)
134 134 clean_sql: $(SQL_CODE) clean_sql: $(SQL_CODE)
135 135 $(SQL_CODE): $(SQL_CODE):
136 pg_format -s 2 -t -U 2 -w 60 -W 4 -C $@ -o $@
136 pg_format -s 2 -t -U 2 -w 60 -W 1 -C -B -i $@
137 137
138 138 ### ###
139 139 # Rules to call makefile from parent directory. # Rules to call makefile from parent directory.
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_Avg.sql changed (mode: 100644) (index 1bd5a3b..a233b75)
... ... CREATE TABLE TEST (
11 11 ); );
12 12
13 13 INSERT INTO TEST INSERT INTO TEST
14 VALUES (NULL), (0), (10);
14 VALUES (
15 NULL),
16 (
17 0),
18 (
19 10);
15 20
16 21 SELECT AVG(Test) SELECT AVG(Test)
17 22 FROM TEST; FROM TEST;
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_Computer.sql changed (mode: 100644) (index 9fc5f7b..4b14ae9)
... ... CREATE SCHEMA HW_Computer;
6 6 USE HW_Computer; USE HW_Computer;
7 7
8 8 CREATE TABLE COMPUTER ( CREATE TABLE COMPUTER (
9 ID VARCHAR(20) PRIMARY KEY, Model VARCHAR(40)
9 ID VARCHAR(20) PRIMARY KEY,
10 Model VARCHAR(40)
10 11 ); );
11 12
12 13 CREATE TABLE PRINTER ( CREATE TABLE PRINTER (
13 ID VARCHAR(20) PRIMARY KEY, Model VARCHAR(40)
14 ID VARCHAR(20) PRIMARY KEY,
15 Model VARCHAR(40)
14 16 ); );
15 17
16 18 CREATE TABLE CONNEXION ( CREATE TABLE CONNEXION (
17 Computer VARCHAR(20), Printer VARCHAR(20), PRIMARY KEY
18 (Computer, Printer),
19 FOREIGN KEY (Computer) REFERENCES COMPUTER (ID), FOREIGN
20 KEY (Printer) REFERENCES PRINTER (ID)
19 Computer VARCHAR(20),
20 Printer VARCHAR(20),
21 PRIMARY KEY (Computer, Printer),
22 FOREIGN KEY (Computer) REFERENCES COMPUTER (ID),
23 FOREIGN KEY (Printer) REFERENCES PRINTER (ID)
21 24 ); );
22 25
23 26 INSERT INTO COMPUTER INSERT INTO COMPUTER
24 VALUES ('A', 'DELL A'), ('B', 'HP X'), ('C', 'ZEPTO D'),
25 ('D', 'MAC Y');
27 VALUES (
28 'A',
29 'DELL A'),
30 (
31 'B',
32 'HP X'),
33 (
34 'C',
35 'ZEPTO D'),
36 (
37 'D',
38 'MAC Y');
26 39
27 40 INSERT INTO PRINTER INSERT INTO PRINTER
28 VALUES ('12', 'HP-140'), ('13', 'HP-139'), ('14',
29 'HP-140'), ('15', 'HP-139');
41 VALUES (
42 '12',
43 'HP-140'),
44 (
45 '13',
46 'HP-139'),
47 (
48 '14',
49 'HP-140'),
50 (
51 '15',
52 'HP-139');
30 53
31 54 INSERT INTO CONNEXION INSERT INTO CONNEXION
32 VALUES ('A', '12'), ('A', '13'), ('B', '13'), ('C', '14');
55 VALUES (
56 'A',
57 '12'),
58 (
59 'A',
60 '13'),
61 (
62 'B',
63 '13'),
64 (
65 'C',
66 '14');
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_ConstraintsPart1.sql changed (mode: 100644) (index 22dcc46..fb320ad)
... ... CREATE SCHEMA HW_ConstraintsPart1;
6 6 USE HW_ConstraintsPart1; USE HW_ConstraintsPart1;
7 7
8 8 CREATE TABLE HURRICANE ( CREATE TABLE HURRICANE (
9 NAME VARCHAR(25) PRIMARY KEY, WindSpeed INT DEFAULT 76
10 CHECK (WindSpeed > 74 AND WindSpeed < 500),
9 NAME VARCHAR(25) PRIMARY KEY,
10 WindSpeed INT DEFAULT 76 CHECK (WindSpeed > 74 AND
11 WindSpeed < 500),
11 12 -- 75mph is the minimum to be considered as a hurricane -- 75mph is the minimum to be considered as a hurricane
12 -- cf. https://www.hwn.org/resources/bws.html
13 -- cf. https://www.hwn.org/resources/bws.html
13 14 Above VARCHAR(25) Above VARCHAR(25)
14 15 ); );
15 16
16 17 CREATE TABLE STATE ( CREATE TABLE STATE (
17 NAME VARCHAR(25) UNIQUE, Postal_abbr CHAR(2) NOT NULL
18 NAME VARCHAR(25) UNIQUE,
19 Postal_abbr CHAR(2) NOT NULL
18 20 ); );
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_DefaultTest.sql changed (mode: 100644) (index e7a0bc6..825f91e)
... ... CREATE SCHEMA HW_DEFAULT_test;
6 6 USE HW_DEFAULT_test; USE HW_DEFAULT_test;
7 7
8 8 CREATE TABLE TEST ( CREATE TABLE TEST (
9 TestA VARCHAR(15), TestB INT, TestC FLOAT, TestD BOOLEAN,
10 TestE BIT(1), TestF DATE
9 TestA VARCHAR(15),
10 TestB INT,
11 TestC FLOAT,
12 TestD BOOLEAN,
13 TestE BIT(1),
14 TestF DATE
11 15 ); );
12 16
13 17 INSERT INTO TEST INSERT INTO TEST
14 VALUES (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);
18 VALUES (
19 DEFAULT,
20 DEFAULT,
21 DEFAULT,
22 DEFAULT,
23 DEFAULT,
24 DEFAULT);
15 25
16 26 SELECT * SELECT *
17 27 FROM TEST; FROM TEST;
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_EBookshop.sql changed (mode: 100644) (index 607a9e4..2b09892)
... ... CREATE DATABASE HW_EBookshop;
6 6 USE HW_EBookshop; USE HW_EBookshop;
7 7
8 8 CREATE TABLE BOOKS ( CREATE TABLE BOOKS (
9 ID INT PRIMARY KEY, title VARCHAR(50), author
10 VARCHAR(50), price DECIMAL(10, 2),
9 ID INT PRIMARY KEY,
10 title VARCHAR(50),
11 author VARCHAR(50),
12 price DECIMAL(10, 2),
11 13 qty INT qty INT
12 14 ); );
13 15
14 16 -- Cf. https://en.wikipedia.org/wiki/List_of_best-selling_books -- Cf. https://en.wikipedia.org/wiki/List_of_best-selling_books
15 17 INSERT INTO BOOKS INSERT INTO BOOKS
16 VALUES (1, 'The Communist Manifesto', 'Karl Marx and
17 Friedrich Engels', 11.11, 11);
18 VALUES (
19 1,
20 'The Communist Manifesto',
21 'Karl Marx and
22 Friedrich Engels',
23 11.11,
24 11);
18 25
19 26 INSERT INTO BOOKS INSERT INTO BOOKS
20 VALUES (2, 'Don Quixote', 'Miguel de Cervantes', 22.22, 22);
27 VALUES (
28 2,
29 'Don Quixote',
30 'Miguel de Cervantes',
31 22.22,
32 22);
21 33
22 34 INSERT INTO BOOKS INSERT INTO BOOKS
23 VALUES (3, 'A Tale of Two Cities', 'Charles Dickens', 33.33, 33);
35 VALUES (
36 3,
37 'A Tale of Two Cities',
38 'Charles Dickens',
39 33.33,
40 33);
24 41
25 42 INSERT INTO BOOKS INSERT INTO BOOKS
26 VALUES (4, 'The Lord of the Rings', 'J. R. R. Tolkien',
27 44.44, 44);
43 VALUES (
44 4,
45 'The Lord of the Rings',
46 'J. R. R. Tolkien',
47 44.44,
48 44);
28 49
29 50 INSERT INTO BOOKS INSERT INTO BOOKS
30 VALUES (5, 'Le Petit Prince', 'Antoine de
31 Saint-Exupéry', 55.55, 55);
51 VALUES (
52 5,
53 'Le Petit Prince',
54 'Antoine de
55 Saint-Exupéry',
56 55.55,
57 55);
32 58
33 59 SELECT * SELECT *
34 60 FROM BOOKS; FROM BOOKS;
File notes/code/sql/HW_FKtest.sql changed (mode: 100644) (index 02ea2b3..1364384)
... ... CREATE TABLE TARGET (
10 10 ); );
11 11
12 12 CREATE TABLE SOURCE ( CREATE TABLE SOURCE (
13 Test VARCHAR(25), FOREIGN KEY (Test) REFERENCES TARGET (Test)
13 Test VARCHAR(25),
14 FOREIGN KEY (Test) REFERENCES TARGET (Test)
14 15 ); );
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_PKtest.sql changed (mode: 100644) (index f09e439..598c94b)
... ... CREATE SCHEMA HW_PKtest;
6 6 USE HW_PKtest; USE HW_PKtest;
7 7
8 8 CREATE TABLE TEST ( CREATE TABLE TEST (
9 A INT, B INT, PRIMARY KEY (A, B)
9 A INT,
10 B INT,
11 PRIMARY KEY (A, B)
10 12 ); );
File notes/code/sql/HW_Person.sql changed (mode: 100644) (index 68a8ce5..eca9827)
... ... CREATE SCHEMA HW_Person;
6 6 USE HW_Person; USE HW_Person;
7 7
8 8 CREATE TABLE PERSON ( CREATE TABLE PERSON (
9 ID VARCHAR(25) PRIMARY KEY, NAME VARCHAR(25), Street
10 VARCHAR(25), City VARCHAR(25),
11 Seat VARCHAR(25), Position VARCHAR(25)
9 ID VARCHAR(25) PRIMARY KEY,
10 NAME VARCHAR(25),
11 Street VARCHAR(25),
12 City VARCHAR(25),
13 Seat VARCHAR(25),
14 Position VARCHAR(25)
12 15 ); );
13 16
14 17 CREATE TABLE CAR ( CREATE TABLE CAR (
15 Vin VARCHAR(25) PRIMARY KEY, Make VARCHAR(25), Model
16 VARCHAR(25), Year DATE,
17 Driver VARCHAR(25), FOREIGN KEY (Driver) REFERENCES
18 PERSON (ID) ON UPDATE CASCADE
18 Vin VARCHAR(25) PRIMARY KEY,
19 Make VARCHAR(25),
20 Model VARCHAR(25),
21 Year DATE,
22 Driver VARCHAR(25),
23 FOREIGN KEY (Driver) REFERENCES PERSON (ID) ON UPDATE CASCADE
19 24 ); );
20 25
21 26 ALTER TABLE PERSON ALTER TABLE PERSON
22 27 ADD FOREIGN KEY (Seat) REFERENCES CAR (Vin); ADD FOREIGN KEY (Seat) REFERENCES CAR (Vin);
23 28
24 29 CREATE TABLE CAR_INSURANCE ( CREATE TABLE CAR_INSURANCE (
25 Policy_number VARCHAR(25) PRIMARY KEY, Company_name
26 VARCHAR(25), Insured_car VARCHAR(25), FOREIGN KEY
27 (Insured_car) REFERENCES CAR (Vin)
30 Policy_number VARCHAR(25) PRIMARY KEY,
31 Company_name VARCHAR(25),
32 Insured_car VARCHAR(25),
33 FOREIGN KEY (Insured_car) REFERENCES CAR (Vin)
28 34 ); );
29 35
30 36 CREATE TABLE PHONE ( CREATE TABLE PHONE (
31 ID VARCHAR(25), Number VARCHAR(25), FOREIGN KEY (ID)
32 REFERENCES PERSON (ID), PRIMARY KEY (ID, number)
37 ID VARCHAR(25),
38 Number VARCHAR(25),
39 FOREIGN KEY (ID) REFERENCES PERSON (ID),
40 PRIMARY KEY (ID, number)
33 41 ); );
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_Short.sql changed (mode: 100644) (index 153aa8a..13d0739)
... ... USE HW_Short;
7 7 -- start snippet solution -- start snippet solution
8 8 /* code/sql/HW_Short.sql */ /* code/sql/HW_Short.sql */
9 9 CREATE TABLE A ( CREATE TABLE A (
10 Att1 INT PRIMARY KEY, Att2 INT
10 Att1 INT PRIMARY KEY,
11 Att2 INT
11 12 ); );
12 13
13 14 CREATE TABLE B ( CREATE TABLE B (
14 Att3 INT PRIMARY KEY, Att4 INT, FOREIGN KEY (Att4)
15 REFERENCES A (Att1)
15 Att3 INT PRIMARY KEY,
16 Att4 INT,
17 FOREIGN KEY (Att4) REFERENCES A (Att1)
16 18 ); );
17 19
18 20 INSERT INTO A INSERT INTO A
19 VALUES (1, 2);
21 VALUES (
22 1,
23 2);
20 24
21 25 INSERT INTO B INSERT INTO B
22 VALUES (3, 1);
26 VALUES (
27 3,
28 1);
23 29
24 30 -- end snippet solution -- end snippet solution
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_TextbookAuthored.sql changed (mode: 100644) (index 6f3427e..12f7858)
... ... CREATE SCHEMA HW_TEXTBOOKAUTHORED;
6 6 USE HW_TEXTBOOKAUTHORED; USE HW_TEXTBOOKAUTHORED;
7 7
8 8 CREATE TABLE TEXTBOOK ( CREATE TABLE TEXTBOOK (
9 Title VARCHAR(50), ISBN CHAR(13) PRIMARY KEY, Price DECIMAL(10, 2)
9 Title VARCHAR(50),
10 ISBN CHAR(13) PRIMARY KEY,
11 Price DECIMAL(10, 2)
10 12 ); );
11 13
12 14 CREATE TABLE AUTHOR ( CREATE TABLE AUTHOR (
13 LName VARCHAR(30), FName VARCHAR(30), Email VARCHAR(30),
14 PRIMARY KEY (Lname, Fname)
15 LName VARCHAR(30),
16 FName VARCHAR(30),
17 Email VARCHAR(30),
18 PRIMARY KEY (Lname, Fname)
15 19 ); );
16 20
17 21 CREATE TABLE AUTHORED ( CREATE TABLE AUTHORED (
18 Book CHAR(13), FOREIGN KEY (Book) REFERENCES TEXTBOOK
19 (ISBN), AuthorLName VARCHAR(30), AuthorFName
20 VARCHAR(30),
22 Book CHAR(13),
23 FOREIGN KEY (Book) REFERENCES TEXTBOOK (ISBN),
24 AuthorLName VARCHAR(30),
25 AuthorFName VARCHAR(30),
21 26 FOREIGN KEY (AuthorLName, AuthorFName) REFERENCES AUTHOR FOREIGN KEY (AuthorLName, AuthorFName) REFERENCES AUTHOR
22 27 (LName, Fname) (LName, Fname)
23 28 ); );
24 29
25 30 INSERT INTO TEXTBOOK INSERT INTO TEXTBOOK
26 VALUES ('Starting Out with Java: Early Objects',
27 9780133776744, 30.00), ('NoSQL for Mere Mortals',
28 9780134023212, 47.99);
31 VALUES (
32 'Starting Out with Java: Early Objects',
33 9780133776744,
34 30.00),
35 (
36 'NoSQL for Mere Mortals',
37 9780134023212,
38 47.99);
29 39
30 40 INSERT INTO AUTHOR INSERT INTO AUTHOR
31 VALUES ('Sullivan', 'Dan', NULL), ('Gaddis', 'Tony', NULL);
41 VALUES (
42 'Sullivan',
43 'Dan',
44 NULL),
45 (
46 'Gaddis',
47 'Tony',
48 NULL);
32 49
33 50 INSERT INTO AUTHORED INSERT INTO AUTHORED
34 VALUES (9780134023212, 'Sullivan', 'Dan'),
35 (9780133776744, 'Gaddis', 'Tony');
51 VALUES (
52 9780134023212,
53 'Sullivan',
54 'Dan'),
55 (
56 9780133776744,
57 'Gaddis',
58 'Tony');
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
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/caubert/CSCI_3410

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/caubert/CSCI_3410

Clone this repository using git:
git clone git://git.rocketgit.com/user/caubert/CSCI_3410

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main