-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsql-select.sql
More file actions
417 lines (292 loc) · 17.5 KB
/
sql-select.sql
File metadata and controls
417 lines (292 loc) · 17.5 KB
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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
###################################### 1 ##########################################
#Найдите номер модели, скорость и размер жесткого диска
#для всех ПК стоимостью менее 500 дол. Вывести: model, speed и hd
SELECT PC.model AS model, PC.speed AS speed, PC.hd AS hd FROM PC WHERE PC.price<500
###################################### 2 ##########################################
#Найдите производителей принтеров. Вывести: maker
SELECT maker FROM Product WHERE type='Printer' GROUP BY maker
###################################### 3 ##########################################
#Найдите номер модели, объем памяти и размеры экранов ПК-блокнотов, цена которых
#превышает 1000 дол.
SELECT model, ram, screen FROM Laptop WHERE price>1000 ORDER BY model
###################################### 4 ##########################################
#Найдите все записи таблицы Printer для цветных принтеров.
SELECT * FROM Printer WHERE color='y'
###################################### 5 ##########################################
#Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x
#CD и цену менее 600 дол.
SELECT model, speed, hd FROM PC WHERE price < 600 AND (cd='12x' OR cd = '24x')
ORDER BY model,speed
###################################### 6 ##########################################
#Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска
#не менее 10 Гбайт, найти скорости таких ПК-блокнотов. Вывод: производитель,
#скорость.
SELECT DISTINCT Product.maker AS Maker, Laptop.speed AS speed FROM Product
LEFT OUTER JOIN Laptop ON Laptop.hd >= 10
WHERE Product.model=Laptop.model AND Product.type='Laptop'
ORDER BY Laptop.speed
###################################### 7 ##########################################
#Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа)
#производителя B (латинская буква).
SELECT DISTINCT Product.model, PC.price FROM PC
INNER JOIN Product ON Product.maker='B'
WHERE Product.model=PC.model
UNION
SELECT DISTINCT Product.model, Laptop.price FROM Laptop
INNER JOIN Product ON Product.maker='B'
WHERE Product.model=Laptop.model
UNION
SELECT DISTINCT Product.model, Printer.price FROM Printer
INNER JOIN Product ON Product.maker='B'
WHERE Product.model=Printer.model
###################################### 8 ##########################################
#Найдите производителя, выпускающего ПК, но не ПК-блокноты.
SELECT maker FROM Product
WHERE type='PC'
EXCEPT
SELECT maker FROM Product
WHERE type='Laptop'
###################################### 9 ##########################################
#Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker
SELECT Product.maker FROM Product
INNER JOIN PC ON PC.speed >= 450
WHERE PC.model=Product.model
GROUP BY Product.maker
###################################### 10 ##########################################
#Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price
SELECT model, price FROM Printer
WHERE price = (SELECT max(price) FROM Printer)
ORDER BY model
###################################### 11 ##########################################
#Найдите среднюю скорость ПК.
SELECT AVG(speed) FROM PC
###################################### 12 ##########################################
#Найдите среднюю скорость ПК-блокнотов, цена которых превышает 1000 дол.
SELECT AVG(speed) AS Avg_speed FROM Laptop WHERE price>1000
###################################### 13 ##########################################
#Найдите среднюю скорость ПК, выпущенных производителем A.
SELECT AVG(PC.speed) AS Avg_speed FROM PC
INNER JOIN Product ON Product.maker='A'
WHERE Product.model=PC.model
###################################### 14 ##########################################
#Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.
SELECT Classes.class, Ships.name, Classes.country FROM Ships
INNER JOIN Classes ON Classes.numGuns >=10
WHERE Classes.class=Ships.class
###################################### 15 ##########################################
#Найдите размеры жестких дисков, совпадающих у двух и более PC. Вывести: HD
SELECT hd FROM PC
GROUP BY hd
HAVING COUNT(hd)>1
###################################### 16 ##########################################
#Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая
#пара указывается только один раз, т.е. (i,j), но не (j,i), Порядок вывода: модель
#с большим номером, модель с меньшим номером, скорость и RAM.
SELECT DISTINCT p1.model, p2.model, p1.speed, p1.ram FROM PC AS p1, PC AS p2
WHERE p1.speed=p2.speed AND p1.ram=p2.ram AND p1.model > p2.model
ORDER BY p1.model
###################################### 17 ##########################################
#Найдите модели ПК-блокнотов, скорость которых меньше скорости любого из ПК.
#Вывести: type, model, speed
SELECT DISTINCT p.type, p.model, l.speed FROM Product p
INNER JOIN Laptop l ON l.speed < ALL (SELECT speed FROM PC)
WHERE l.model = p.model AND p.type='Laptop'
###################################### 18 ##########################################
#Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price
SELECT DISTINCT p.maker, r.price FROM Printer r
INNER JOIN Product p ON p.type='Printer'
WHERE r.price = (SELECT MIN(price) FROM Printer WHERE color='y') AND
p.model=r.model AND r.color='y'
###################################### 19 ##########################################
#Для каждого производителя, имеющего модели в таблице Laptop, найдите средний
#размер экрана выпускаемых им ПК-блокнотов.
#Вывести: maker, средний размер экрана.
SELECT p.maker, AVG(l.screen) FROM Product p
INNER JOIN Laptop l ON p.model=l.model
WHERE p.type='Laptop'
GROUP BY p.maker
###################################### 20 ##########################################
#Найдите производителей, выпускающих по меньшей мере три различных модели ПК.
#Вывести: Maker, число моделей ПК.
SELECT p.maker, COUNT(p.model) AS Count_Model FROM Product p
WHERE p.type='PC'
GROUP BY p.maker
HAVING COUNT(p.model)>2
###################################### 21 ##########################################
#Найдите максимальную цену ПК, выпускаемых каждым производителем, у которого
#есть модели в таблице PC.
#Вывести: maker, максимальная цена.
SELECT p.maker, MAX(pc.price) FROM Product p
INNER JOIN PC pc ON p.model=pc.model
WHERE p.type='PC'
GROUP BY p.maker
###################################### 22 ##########################################
#Для каждого значения скорости ПК, превышающего 600 МГц, определите среднюю цену
#ПК с такой же скоростью. Вывести: speed, средняя цена.
SELECT pc.speed, AVG(pc.price) AS Avg_price FROM PC pc
WHERE pc.speed > 600
GROUP BY pc.speed
###################################### 23 ##########################################
#Найдите производителей, которые производили бы как ПК
#со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц.
#Вывести: Maker
SELECT DISTINCT p.maker FROM Product p
INNER JOIN PC pc ON pc.speed >= 750
WHERE p.type='PC' AND p.model=pc.model
INTERSECT
SELECT DISTINCT p.maker FROM Product p
INNER JOIN laptop l ON l.speed >= 750
WHERE p.type='Laptop' AND p.model=l.model
###################################### 24 ##########################################
#Перечислите номера моделей любых типов, имеющих самую высокую цену по всей
#имеющейся в базе данных продукции.
SELECT TOP 1 WITH TIES model FROM ( SELECT price, model FROM PC
UNION
SELECT price, model FROM Laptop
UNION
SELECT price, model FROM Printer ) X
ORDER BY price
DESC
###################################### 25 ##########################################
#Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM
#и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM.
#Вывести: Maker
SELECT maker FROM Product
WHERE model IN (SELECT model FROM PC
WHERE speed = (SELECT MAX(speed) FROM PC
WHERE ram = (SELECT MIN(ram) FROM PC))
AND ram = (SELECT MIN(ram) FROM PC))
AND maker IN (SELECT p.maker FROM Product p WHERE p.type='Printer')
GROUP BY maker
###################################### 26 ##########################################
#Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A
#(латинская буква). Вывести: одна общая средняя цена.
SELECT AVG(price) AS AVG_price FROM (
SELECT price FROM Product p
INNER JOIN PC ON p.model=PC.model
WHERE p.maker = 'A'
UNION ALL
SELECT price FROM Product p
INNER JOIN Laptop l ON p.model=l.model
WHERE p.maker = 'A') X
###################################### 27 ##########################################
#Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и
#принтеры. Вывести: maker, средний размер HD.
SELECT p.maker AS Maker, AVG(pc.hd) AS Avg_hd FROM Product p
INNER JOIN PC pc ON pc.model = p.model
WHERE p.maker IN (SELECT p.maker FROM Product p
WHERE p.type='Printer')
GROUP BY p.maker
###################################### 28 ##########################################
#Используя таблицу Product, определить количество производителей, выпускающих по
#одной модели.
SELECT DISTINCT COUNT(maker) AS qty FROM(
SELECT maker FROM Product
GROUP BY maker
HAVING COUNT(DISTINCT model) = 1) X
###################################### 31 ##########################################
#Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и
#страну.
SELECT class, country FROM Classes
WHERE bore >= 16
###################################### 33 ##########################################
#Укажите корабли, потопленные в сражениях в Северной Атлантике (North Atlantic).
#Вывод: ship..
SELECT ship FROM Outcomes
WHERE result='sunk' AND battle='North Atlantic'
###################################### 34 ##########################################
#По Вашингтонскому международному договору от начала 1922 г. запрещалось строить
#линейные корабли водоизмещением более 35 тыс.тонн.
#Укажите корабли, нарушившие этот договор (учитывать только корабли c известным
#годом спуска на воду). Вывести названия кораблей.
SELECT DISTINCT s.name FROM Ships s
INNER JOIN Classes c ON c.type='bb'
WHERE c.class=s.class AND c.displacement > 35000
AND s.launched>=1922
AND s.launched IS NOT NULL
###################################### 36 ##########################################
#Перечислите названия головных кораблей, имеющихся в базе данных
#(учесть корабли в Outcomes).
SELECT name FROM Ships
WHERE name=class
UNION
SELECT ship AS name FROM Outcomes
WHERE ship IN (SELECT class FROM Classes)
###################################### 38 ##########################################
#Найдите страны, имевшие когда-либо классы обычных боевых кораблей ('bb')
#и имевшие когда-либо классы крейсеров ('bc').
SELECT country FROM Classes
WHERE type='bb'
INTERSECT
SELECT country FROM Classes
WHERE type='bc'
###################################### 42 ##########################################
#Найдите названия кораблей, потопленных в сражениях, и название сражения,
#в котором они были потоплены.
SELECT ship, battle FROM Outcomes
WHERE result='sunk'
###################################### 44 ##########################################
#Найдите названия всех кораблей в базе данных, начинающихся с буквы R.
SELECT name FROM Ships
WHERE name LIKE 'R%'
UNION
SELECT ship AS name FROM Outcomes
WHERE ship LIKE 'R%'
###################################### 45 ##########################################
#Найдите названия всех кораблей в базе данных, состоящие из трех и более слов
#(например, King George V).
#Считать, что слова в названиях разделяются единичными пробелами, и нет концевых пробелов.
SELECT name FROM Ships
WHERE name LIKE '% % %'
UNION
SELECT ship AS name FROM Outcomes
WHERE ship LIKE '% % %'
###################################### 48 ##########################################
#Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении.
SELECT c.class FROM Classes c
INNER JOIN Outcomes o ON o.ship=c.class
WHERE o.result = 'sunk'
UNION
SELECT c.class FROM Classes c
INNER JOIN Ships s ON s.class=c.class
INNER JOIN Outcomes o ON s.name=o.ship
WHERE o.result = 'sunk'
###################################### 49 ##########################################
#Найдите названия кораблей с орудиями калибра 16 дюймов
#(учесть корабли из таблицы Outcomes).
SELECT s.name FROM Ships s
INNER JOIN Classes c ON c.class = s.class
WHERE c.bore=16
UNION
SELECT o.ship AS name FROM Outcomes o
INNER JOIN Classes c ON c.class = o.ship
WHERE c.bore=16
###################################### 50 ##########################################
#Найдите сражения, в которых участвовали корабли класса Kongo из таблицы Ships.
SELECT DISTINCT o.battle FROM Outcomes o
INNER JOIN Ships s ON s.name = o.ship
WHERE s.class='Kongo'
###################################### 52 ##########################################
#Определить названия всех кораблей из таблицы Ships, которые могут быть линейным
#японским кораблем, имеющим число главных орудий не менее девяти, калибр орудий
#менее 19 дюймов и водоизмещение не более 65 тыс.тонн
SELECT s.name FROM Ships s
INNER JOIN Classes c ON c.class=s.class
WHERE (c.country = 'Japan' OR c.country IS NULL)
AND c.type='bb'
AND (c.numGuns>=9 OR c.numGuns IS NULL)
AND (c.bore <19 OR c.bore IS NULL)
AND (c.displacement<=65000 OR c.displacement IS NULL)
###################################### 53 ##########################################
#Определите среднее число орудий для классов линейных кораблей.
#Получить результат с точностью до 2-х десятичных знаков.
SELECT CAST(AVG(CAST(numGuns AS numeric(4,2))) AS numeric(6,2))
AS AvgnumGuns FROM Classes
WHERE type='bb'
###################################### 55 ##########################################
#Для каждого класса определите год, когда был спущен на воду первый корабль этого
#класса. Если год спуска на воду головного корабля неизвестен, определите
#минимальный год спуска на воду кораблей этого класса. Вывести: класс, год.
SELECT c.class, MIN(s.launched) FROM Ships s
RIGHT JOIN Classes c ON c.class=s.class
GROUP BY c.class