-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJoins and Unions.sql
300 lines (240 loc) · 6.6 KB
/
Joins and Unions.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
-- Joins and Unions
use Academy
-- Print names of the classrooms where the teacher "Edward Hopper" lectures
select
LectureRooms.[Name of Classroom]
from
Lectures
Inner Join Teachers
ON
Teachers.Id=Lectures.[TeacherId for Lectures]
Inner Join Schedules
ON
Schedules.[LectureId for Schedules]=Lectures.Id
Inner Join LectureRooms
ON
Schedules.[LectureRoomsId for Schedules]=LectureRooms.Id
Where
Teachers.[Teachers's name] ='Edward' and Teachers.[Teachers's surname]='Hopper'
-- Print names of the assistants who deliver lectures for the group "F505".
select Distinct
Teachers.[Teachers's name]
from
Assistants
Inner Join Teachers
ON
Assistants.[TeacherId for Assistants]=Teachers.Id
Inner Join Lectures
ON
Lectures.[TeacherId for Lectures] =Teachers.Id
Inner Join [Groups and Lectures]
ON
[Groups and Lectures].[LectureId for Groups and Lectures]=Lectures.Id
Inner Join Groups
ON
Groups.Id=[Groups and Lectures].[GroupId for Groups and Lectures]
where
Groups.[Name of Group]='F505'
-- Print subjects taught by the teacher "Alex Carmack" for groups of the 5th year
select
Subjects.[Name of Subject], Groups.[Name of Group]
from
Subjects
Inner Join Lectures
ON
Lectures.[SubjectId for Lectures]=Subjects.Id
Inner Join Teachers
ON
Lectures.[TeacherId for Lectures]=Teachers.Id
Inner Join [Groups and Lectures]
ON
[Groups and Lectures].[LectureId for Groups and Lectures]=Lectures.Id
Inner Join Groups
ON
Groups.Id=[Groups and Lectures].[GroupId for Groups and Lectures]
where
Teachers.[Teachers's name]='Alex'
AND
Teachers.[Teachers's surname]='Carmack'
AND
Groups.[Year of Group]=5
--x Print names of the teachers who do not deliver lectures on Mondays
select Distinct
Teachers.[Teachers's name], Schedules.[Day of week]
from
Teachers
Inner Join Lectures
ON
Lectures.[TeacherId for Lectures]=Teachers.Id
Inner Join Subjects
ON
Lectures.[SubjectId for Lectures]=Subjects.Id
Inner Join Schedules
ON
Schedules.[LectureId for Schedules]=Lectures.Id
EXCEPT
-- deliver lectures on Mondays
select Distinct
Teachers.[Teachers's name], Schedules.[Day of week]
from
Teachers
Inner Join Lectures
ON
Lectures.[TeacherId for Lectures]=Teachers.Id
Inner Join Subjects
ON
Lectures.[SubjectId for Lectures]=Subjects.Id
Inner Join Schedules
ON
Schedules.[LectureId for Schedules]=Lectures.Id
where
Schedules.[Day of week] < ALL
(
Select Schedules.[Day of week]
from Schedules, Lectures
where Schedules.[LectureId for Schedules]= Lectures.Id
AND
Schedules.[Day of week]>1
)
-- Print names of the classrooms, indicating their buildings, in which there are no lectures on Wednesday of the second week on the third double period.
select Distinct
LectureRooms.[Name of Classroom], LectureRooms.Building, Schedules.[Day of week], Schedules.[Week number of lecture], Schedules.[Double period]
from
LectureRooms
Inner Join Schedules
ON
LectureRooms.Id=Schedules.[LectureRoomsId for Schedules]
Inner Join Lectures
ON
Lectures.Id=Schedules.[LectureId for Schedules]
where
Schedules.[Day of week]<>3
AND
Schedules.[Week number of lecture]=2
AND
Schedules.[Double period]=3
-- Print full names of teachers of the Computer Science faculty, who do not supervise groups of the Software Development department.
select Distinct
Teachers.[Teachers's name]+' '+ Teachers.[Teachers's surname] as [Teacher's fullname], Departments.[Name of Departments]
from
Teachers
Inner Join Lectures
ON
Lectures.[TeacherId for Lectures] = Teachers.Id
Inner Join [Groups and Lectures]
ON
Lectures.Id= [Groups and Lectures].[LectureId for Groups and Lectures]
Inner Join Groups
ON
[Groups and Lectures].[GroupId for Groups and Lectures]= Groups.Id
Inner Join Departments
ON
Departments.Id=Groups.[DepartmentId for Groups]
Inner Join Faculties
ON
Faculties.Id=Departments.[FacultyId for Departments]
where
Faculties.[Name of Faculty] = 'Computer Science'
AND
Departments.[Name of Departments] != 'Software Development'
-- Print numbers of all buildings that are available in the tables of faculties, departments, and classrooms.
select Distinct
LectureRooms.Building, Faculties.[Name of Faculty], Departments.[Name of Departments], LectureRooms.[Name of Classroom]
from
Faculties
Inner Join Departments
ON
Faculties.Id=Departments.[FacultyId for Departments]
Inner Join Groups
ON
Departments.Id=Groups.[DepartmentId for Groups]
Inner Join [Groups and Lectures]
ON
[Groups and Lectures].[GroupId for Groups and Lectures]= Groups.Id
Inner Join Lectures
ON
Lectures.Id= [Groups and Lectures].[LectureId for Groups and Lectures]
Inner Join Schedules
ON
Schedules.[LectureId for Schedules]=Lectures.Id
Inner Join LectureRooms
ON
LectureRooms.Id=Schedules.[LectureId for Schedules]
-- Print full names of teachers in the following order: deans of faculties, heads of departments, teachers, curators, assistants.
select Distinct
Teachers.[Teachers's name]+' '+Teachers.[Teachers's surname]
from
Teachers
Inner Join Heads
ON
Heads.[TeacherId for Heads]=Teachers.Id
UNION ALL
select Distinct
Teachers.[Teachers's name]+' '+Teachers.[Teachers's surname]
from
Teachers
Inner Join Deans
ON
Deans.[TeacherId for Deans]=Teachers.Id
UNION ALL
select Distinct
Teachers.[Teachers's name]+' '+Teachers.[Teachers's surname]
from
Teachers
Inner Join Curators
ON
Curators.[TeacherId for Curators] = Teachers.Id
UNION ALL
select Distinct
Teachers.[Teachers's name]+' '+Teachers.[Teachers's surname]
from
Teachers
Inner Join Lectures
ON
Lectures.[TeacherId for Lectures] = Teachers.Id
Inner Join [Groups and Lectures]
ON
Lectures.Id = [Groups and Lectures].[LectureId for Groups and Lectures]
Inner Join Groups
ON
Groups.Id = [Groups and Lectures].[GroupId for Groups and Lectures]
Inner Join Departments
ON
Departments.Id=Groups.[DepartmentId for Groups]
Inner Join Faculties
ON
Faculties.Id=Departments.[FacultyId for Departments]
Inner Join Deans
ON
Deans.Id=Faculties.[DeanId for Faculties]
Inner Join Heads
ON
Heads.Id= Departments.[HeadId for Departments]
Inner Join [Groups and Curators]
ON
[Groups and Curators].[GroupId for Groups and Curators]= Groups.Id
-- Print days of the week (without repetitions), in which there are classes in the classrooms "A311" and "A104" of the building 5
select Distinct
Schedules.[Day of week]
from
LectureRooms
Inner Join Schedules
ON
LectureRooms.Id=Schedules.[LectureRoomsId for Schedules]
Inner Join Lectures
ON
Lectures.Id=Schedules.[LectureId for Schedules]
Inner Join [Groups and Lectures]
ON
Lectures.Id=[Groups and Lectures].[LectureId for Groups and Lectures]
Inner Join Groups
ON
Groups.Id=[Groups and Lectures].[GroupId for Groups and Lectures]
where
LectureRooms.Building=5
AND
(
LectureRooms.[Name of Classroom]='A311'
OR
LectureRooms.[Name of Classroom]='A104'
)