Содержание Задание №1 .............................................................................................................. 4 Задание №2 .............................................................................................................. 5 Задание №3 .............................................................................................................. 6 Задание №4 .............................................................................................................. 7 Задание №5 .............................................................................................................. 8 Задание №6 .............................................................................................................. 9 Задание №7 ............................................................................................................ 10 Задание №8 ............................................................................................................ 12 Задание №9 ............................................................................................................ 13 Задание №10 .......................................................................................................... 14 Задание №11 .......................................................................................................... 15 Задание №12 .......................................................................................................... 16 Задание №13 .......................................................................................................... 17 Задание №14 .......................................................................................................... 18 Задание №15 .......................................................................................................... 19 Задание №16 .......................................................................................................... 20 Задание №17 .......................................................................................................... 21 Задание №18 .......................................................................................................... 22 Задание №19 .......................................................................................................... 23 Задание №20 .......................................................................................................... 24 Задание №21 .......................................................................................................... 25 Задание №22 .......................................................................................................... 26 Задание №23 .......................................................................................................... 27 Задание №24 .......................................................................................................... 28 Задание №25 .......................................................................................................... 30 Задание №26 .......................................................................................................... 32 Задание №27 .......................................................................................................... 33 Задание №28 .......................................................................................................... 34 Задание №29 .......................................................................................................... 35 Задание №30 .......................................................................................................... 37 Задание №31 .......................................................................................................... 39 Задание №32 .......................................................................................................... 40 Задание №33 .......................................................................................................... 42 Задание №34 .......................................................................................................... 43 Задание №35 .......................................................................................................... 45 Задание №36 .......................................................................................................... 47 Задание №37 .......................................................................................................... 48 Задание №38 .......................................................................................................... 49 Задание №39 .......................................................................................................... 50 Задание №40 .......................................................................................................... 51 Задание №41 .......................................................................................................... 52 Задание №42 .......................................................................................................... 54 Задание №43 .......................................................................................................... 55 Задание №44 .......................................................................................................... 56 Задание №45 .......................................................................................................... 57 Задание №46 .......................................................................................................... 58 Задание №47 .......................................................................................................... 59 Задание №48 .......................................................................................................... 61 Задание №49 .......................................................................................................... 62 Задание №50 .......................................................................................................... 64 Задание №1 Найдите номер модели, скорость и размер жесткого диска для всех ПК стоимостью менее 500 дол. Вывести: model, speed и hd. Sql запрос: Рисунок 1 - Задание №1 Результат: Рисунок 2 - Результат Исходный код: SELECT PC.model, PC.speed, Pc.hd FROM PC WHERE PC.price < 500 Задание №2 Найдите производителей принтеров. Вывести: maker. Sql запрос: Рисунок 3 - Задание №2 Результат: Рисунок 4 - Результат Исходный код: SELECT Product.maker FROM Product WHERE Product.type = 'printer' group by maker Задание №3 Найдите номер модели, объем памяти и размеры экранов ПК-блокнотов, цена которых превышает 1000 дол. Sql запрос: Рисунок 5 - Задание №3 Результат: Рисунок 6 - Результат Исходный код: SELECT model, ram, screen FROM Laptop WHERE Laptop.price > 1000 Задание №4 Найдите все записи таблицы Printer для цветных принтеров. Sql запрос: Рисунок 7 - Задание №4 Результат: Рисунок 8 - Результат Исходный код: SELECT * FROM Printer WHERE color = 'y' Задание №5 Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x CD и цену менее 600 дол. Sql запрос: Рисунок 9 - Задание №5 Результат: Рисунок 10 - Результат Исходный код: SELECT model, speed, hd FROM PC WHERE (PC.cd = '12x' OR PC.cd = '24x') AND PC.price < 600 Задание №6 Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска не менее 10 Гбайт, найти скорости таких ПК-блокнотов. Вывод: производитель, скорость. Sql запрос: Рисунок 11 - Задание №6 Результат: Рисунок 12 - Результат Исходный код: SELECT distinct maker, speed FROM Laptop join Product on Product.model = Laptop.model WHERE Laptop.hd >= 10 Задание №7 Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа) производителя B (латинская буква). Sql запрос: Рисунок 13 - Задание №7 Результат: Рисунок 14 - Результат Исходный код: SELECT DISTINCT product.model, pc.price FROM product JOIN pc ON product.model = pc.model WHERE maker = 'B' UNION SELECT DISTINCT product.model, laptop.price FROM product JOIN laptop ON product.model=laptop.model WHERE maker='B' UNION SELECT DISTINCT product.model, printer.price FROM product JOIN printer ON product.model=printer.model WHERE maker='B' Задание №8 Найдите производителя, выпускающего ПК, но не ПК-блокноты. Sql запрос: Рисунок 15 - Задание №8 Результат: Рисунок 16 - Результат Исходный код: SELECT maker FROM Product WHERE Product.type='PC' and maker not in (SELECT maker FROM Product WHERE type='Laptop') group by maker Задание №9 Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker Sql запрос: Рисунок 17 - Задание №9 Результат: Рисунок 18 - Результат Исходный код: SELECT DISTINCT maker FROM PC JOIN Product ON PC.Model = product.model WHERE speed >= 450 Задание №10 Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price Sql запрос: Рисунок 19 - Задание №10 Результат: Рисунок 20 - Результат Исходный код: SELECT model, price FROM Printer WHERE Price = (SELECT MAX(Price) FROM Printer) Задание №11 Найдите среднюю скорость ПК. Sql запрос: Рисунок 21 - Задание №11 Результат: Рисунок 22 - Результат Исходный код: SELECT AVG(Speed) FROM PC Задание №12 Найдите среднюю скорость ПК-блокнотов, цена которых превышает 1000 дол. Sql запрос: Рисунок 23 - Задание №12 Результат: Рисунок 24 - Результат Исходный код: SELECT AVG(speed) FROM laptop WHERE laptop.price > 1000 Задание №13 Найдите среднюю скорость ПК, выпущенных производителем A. Sql запрос: Рисунок 25 - Задание №13 Результат: Рисунок 26 - Результат Исходный код: SELECT AVG(Speed) FROM PC JOIN Product ON PC.Model = Product.model WHERE Product.maker = 'A' Задание №14 Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий. Sql запрос: Рисунок 27 - Задание №14 Результат: Рисунок 28 - Результат Исходный код: SELECT Classes.class, name, country FROM Ships JOIN Classes on Ships.class = Classes.class WHERE Classes.numGuns >= 10 Задание №15 Найдите размеры жестких дисков, совпадающих у двух и более PC. Вывести: HD Sql запрос: Рисунок 29 - Задание №15 Результат: Рисунок 30 - Результат Исходный код: SELECT hd FROM PC group by hd having COUNT(*)>1 Задание №16 Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, т.е. (i,j), но не (j,i), Порядок вывода: модель с большим номером, модель с меньшим номером, скорость и RAM. Sql запрос: Рисунок 31 - Задание №16 Результат: Рисунок 32 - Результат Исходный код: SELECT DISTINCT B.model, A.model, A.speed, A.ram FROM PC AS A, PC B WHERE A.speed = B.speed AND A.ram = B.ram AND A.model < B.model Задание №17 Найдите модели ПК-блокнотов, скорость которых меньше скорости каждого из ПК. Вывести: type, model, speed Sql запрос: Рисунок 33 - Задание №17 Результат: Рисунок 34 - Результат Исходный код: SELECT DISTINCT type, laptop.model, speed FROM laptop inner join product on laptop.model = product.model where speed < (SELECT MIN(speed) FROM PC) Задание №18 Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price Sql запрос: Рисунок 35 - Задание №18 Результат: Рисунок 36 - Результат Исходный код: SELECT DISTINCt maker, price FROM Product JOIN Printer on product.model = printer.model WHERE price = (SELECT min(price) FROM printer WHERE color = 'y') AND color = 'y' Задание №19 Для каждого производителя, имеющего модели в таблице Laptop, найдите средний размер экрана выпускаемых им ПК-блокнотов. Вывести: maker, средний размер экрана. Sql запрос: Рисунок 37 - Задание №19 Результат: Рисунок 38 - Результат Исходный код: SELECT DISTINCT maker, AVG(Screen) FROM laptop join product on laptop.model = product.model GROUP BY maker Задание №20 Найдите производителей, выпускающих по меньшей мере три различных модели ПК. Вывести: Maker, число моделей ПК. Sql запрос: Рисунок 39 - Задание №20 Результат: Рисунок 40 - Результат Исходный код: SELECT maker, count(model) FROM product WHERE type = 'pc' GROUP BY maker having count(model) >= 3 Задание №21 Найдите производителем, максимальную у которого цену есть ПК, выпускаемых модели Вывести: maker, максимальная цена. Sql запрос: Рисунок 41 - Задание №21 Результат: Рисунок 42 - Результат Исходный код: SELECT maker, MAX(price) FROM pc JOIN product ON pc.model = product.model GROUP BY maker в каждым таблице PC. Задание №22 Для каждого значения скорости ПК, превышающего 600 МГц, определите среднюю цену ПК с такой же скоростью. Вывести: speed, средняя цена. Sql запрос: Рисунок 43 - Задание №22 Результат: Рисунок 44 - Результат Исходный код: SELECT speed, AVG(price) FROM pc WHERE speed > 600 GROUP BY speed Задание №23 Найдите производителей, которые производили бы как ПК со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц. Вывести: Maker Sql запрос: Рисунок 45 - Задание №23 Результат: Рисунок 46 - Результат Исходный код: SELECT DISTINCT maker FROM pc INNER JOIN product ON pc.model = product.model WHERE pc.speed >= 750 AND maker in (SELECT maker FROM laptop INNER JOIN product on laptop.model = product.model WHERE laptop.speed >= 750) Задание №24 Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции. Sql запрос: Риунок 47 - Задание №24 Результат: Рисунок 48 - Результат Исходный код: SELECT model FROM ( SELECT DISTINCT model, price FROM Laptop WHERE Laptop.price = (SELECT MAX(price) FROM Laptop) UNION SELECT DISTINCT model, price FROM PC WHERE PC.price = (SELECT MAX(price) FROM PC) UNION SELECT DISTINCT model, price FROM Printer WHERE printer.price = (SELECT MAX(price) FROM Printer) ) AS t WHERE t.price = (SELECT MAX(price) FROM ( SELECT DISTINCT price FROM Laptop UNION SELECT DISTINCT price FROM PC UNION SELECT DISTINCT price FROM Printer ) AS SUBQUERY) Задание №25 Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker Sql запрос: Рисунок 49 - Задание № Результат: Рисунок 50 - Результат Исходный код: select distinct product.maker from product, pc where product.type = 'PC' and product.model = pc.model and pc.ram = (select min(pcc.ram) from pc pcc where pcc.ram <> 0) and pc.speed = (select max(pccc.speed) from pc pccc where pccc.ram = (select min(pcc.ram) from pc pcc where pcc.ram <> 0)) and exists(select 'x' from product p where p.type = 'Printer' and p.maker = product.maker) Задание №26 Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена. Sql запрос: Рисунок 51 - Задание №26 Результат: Рисунок 52 – Результат Исходный код: SELECT ZAP1.c/ZAP1.d FROM(SELECT SUM(ZAP.a) AS c, SUM(ZAP.b) AS d FROM( SELECT SUM(pc.price) AS a, COUNT(pc.code) AS b FROM pc INNER JOIN product ON pc.model=product.model WHERE product.maker='A' UNION SELECT SUM(laptop.price) AS a, COUNT(laptop.code) AS b FROM laptop INNER JOIN product ON product.maker='A') AS ZAP ) AS ZAP1 laptop.model=product.model WHERE Задание №27 Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры. Вывести: maker, средний размер HD. Sql запрос: Рисунок 53 - Задание №27 Результат: Рисунок 54 - Результат Исходный код: SELECT MAKER, AVG(HD) PRODUCT.MODEL=PC.MODEL FROM PRODUCT JOIN PC WHERE MAKER IN(SELECT MAKER FROM PRODUCT WHERE TYPE='printer') GROUP BY MAKER ON Задание №28 Используя таблицу Product, определить количество производителей, выпускающих по одной модели. Sql запрос: Рисунок 55 - Задание №28 Результат: Рисунок 56 - Результат Исходный код: SELECT COUNT(*) FROM (SELECT MAKER FROM PRODUCT GROUP BY MAKER HAVING COUNT(MODEL)=1) AS AVG Задание №29 В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o. Sql запрос: Рисунок 57 – Задание №29 Результат: Рисунок 58 – Результат Исходный код: SELECT I.point, I.date, inc, out FROM income_o I LEFT JOIN outcome_o O ON I.point = O.point AND I.date = O.date UNION SELECT O.point, O.date, inc, out FROM income_o I RIGHT JOIN outcome_o O ON I.point = O.point AND I.date = O.date Задание №30 В предположении, что приход и расход денег на каждом пункте приема фиксируется произвольное число раз (первичным ключом в таблицах является столбец code), требуется получить таблицу, в которой каждому пункту за каждую дату выполнения операций будет соответствовать одна строка. Вывод: point, date, суммарный расход пункта за день (out), суммарный приход пункта за день (inc). Отсутствующие значения считать неопределенными (NULL). Sql запрос: Рисунок 59 - Задание №30 Результат: Рисунок 60 – Результат Исходный код: SELECT point, date, SUM(sum_out), SUM(sum_inc) FROM(SELECT point, date, SUM(inc) as sum_inc, null as sum_out from Income Group by point, date Union select point, date, null as sum_inc, SUM(out) as sum_out from Outcome Group by point, date ) as IncOut group by point, date order by point Задание №31 Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну. Sql запрос: Рисунок 61 - Задание №31 Результат: Рисунок 62 - Результат Исходный код: SELECT class, country from Classes WGERE bore >= 16 Задание №32 Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных. Sql запрос: Рисунок 63 - Задание №32 Результат: Рисунок 64 - результат Исходный код: Select country, cast(avg((power(bore,3)/2)) as numeric(6,2)) as weight from (select country, classes.class, bore, name from classes left join ships on classes.class=ships.class union all select distinct country, class, bore, ship from classes t1 left join outcomes t2 on t1.class=t2.ship where ship=class and ship not in (select name from ships) ) a where name!='null' group by country Задание №33 Укажите корабли, потопленные в сражениях в Северной Атлантике (North Atlantic). Вывод: ship. Sql запрос: Рисунок 65 - Задание №33 Результат: Рисунок 66 – Результат Исходный код: Select ship from Outcomes where result = 'sunk' and battle = 'North Atlantic' group by ship Задание №34 По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду). Вывести названия кораблей. Sql запрос: Рисунок 67 - Задание №34 Результат: Рисунок 68 - Результат Исходный код: SELECT DISTINCT name FROM ships JOIN classes ON ships.class = classes.class WHERE displacement > 35000 AND launched >= 1922 AND type = 'bb' Задание №35 В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, Вывод: номер модели, тип модели. Sql запрос: Рисунок 69 - Задание №35 без учета регистра). Результат: Рисунок 70 - Результат Исходный код: SELECT model, type FROM product WHERE upper(model) NOT like '%[^A-Z]%' OR model not like '%[^0-9]%' Задание №36 Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes). Sql запрос: Рисунок 71 - Задание №36 Результат: Рисунок 72 - Результат Исходный код: Select name FROM ships WHERE class = name UNION SELECT ship FROM classes, outcomes WHERE outcomes.ship classes.class = Задание №37 Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes). Sql запрос: Рисунок 73 - Задание №37 Результат: Рисунок 74 - Результат Исходный код: SELECT class FROM(SELECT name,class FROM ships UNION SELECT class AS name,class FROM classes, outcomes WHERE classes.class=outcomes.ship) One group by class having count(One.name)=1 Задание №38 Найдите страны, имевшие когда-либо классы обычных боевых кораблей ('bb') и имевшие когда-либо классы крейсеров ('bc'). Sql запрос: Рисунок 75 - Задание №38 Результат: Рисунок 76 - Результат Исходный код: SELECT DISTINCT country FROM classes WHERE type='bb' intersect SELECT DISTINCT country FROM classes WHERE type='bc' Задание №39 Найдите корабли, `сохранившиеся для будущих сражений`; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой, произошедшей позже. Sql запрос: Рисунок 77 - Задание №39 Результат: Рисунок 78 - Результат Исходный код: SELECT DISTINCT B.ship FROM(select * FROM outcomes LEFT JOIN battles ON battle=name WHERE result='damaged') as B WHERE exists (SELECT ship FROM outcomes LEFT JOIN battles ON battle=name WHERE ship=B.ship AND B.date<date) Задание №40 Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа. Вывести: maker, type Sql запрос: Рисунок 79 - Задание № 40 Результат: Рисунок 80 - Результат Исходный код: SELECT maker, MAX(type) FROM product GROUP BY maker HAVING COUNT(DISTINCT type) = 1 AND COUNT(model) > 1 Задание №41 Для каждого производителя, у которого присутствуют модели хотя бы в одной из таблиц PC, Laptop или Printer, определить максимальную цену на его продукцию. Вывод: имя производителя, если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL, иначе максимальную цену. Sql запрос: Рисунок 81 - Задание №41 Результат: Рисунок 82 - Результат Исходный код: WITH D AS (SELECT model, price FROM PC UNION SELECT model, price FROM Laptop UNION SELECT model, price FROM Printer) SELECT DISTINCT P.maker, CASE WHEN MAX(CASE WHEN D.price IS NULL THEN 1 ELSE 0 END) = 0 THEN MAX(D.price) END FROM Product P RIGHT JOIN D ON P.model=D.model GROUP BY P.maker Задание №42 Найдите названия кораблей, потопленных в сражениях, и название сражения, в котором они были потоплены. Рисунок 83 - Задание №42 Результат: Рисунок 84 - Результат Исходный код: SELECT ship, battle FROM Outcomes WHERE result = 'sunk' Задание №43 Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду. Рисунок 85 - Задание №43 Результат: Рисунок 86 - Результат Исходный код: SELECT name FROM battles WHERE year(date) not in (SELECT launched FROM ships WHERE launched is not null) Задание №44 Найдите названия всех кораблей в базе данных, начинающихся с буквы R. Рисунок 87 - Задание №44 Результат: Рисунок 88 - Результат Исходный код: SELECT name FROM Ships WHERE name LIKE 'R%' UNION SELECT Ship FROM Outcomes WHERE Ship LIKE 'R%' Задание №45 Найдите названия всех кораблей в базе данных, состоящие из трех и более слов (например, King George V). Считать, что слова в названиях разделяются единичными пробелами, и нет концевых пробелов. Рисунок 89 - Задание №45 Результат: Рисунок 90 - Результат Исходный код: SELECt name FROM ships WHERE name like '% % %' UNION SELECT ship FROM outcomes WHERE ship like '% % %' Задание №46 Для каждого корабля, участвовавшего в сражении при Гвадалканале (Guadalcanal), вывести название, водоизмещение и число орудий. Рисунок 91 - Задание №46 Результат: Рисунок 92 - Результат Исходный код: SELECT o.ship, displacement, numGuns FROM (SELECT name AS ship, displacement, numGuns FROM Ships s JOIN Classes c ON c.class=s.class UNION SELECT class AS ship, displacement, numGuns FROM Classes c) AS a RIGHT JOIN Outcomes o ON o.ship=a.ship WHERE battle = 'Guadalcanal' Задание №47 Определить страны, которые потеряли в сражениях все свои корабли. Рисунок 93 - Задание №47 Результат: Рисунок 94 - Результат Исходный код: WITH T1 AS (SELECT COUNT(name) as co, country FROM (SELECT name, country FROM Classes INNER JOIN Ships ON Ships.class = Classes.class UNION SELECT ship, country FROM Classes INNER JOIN Outcomes Outcomes.ship = Classes.class) FR1 GROUP BY country ), ON T2 AS ( SELECT COUNT(name) as co, country FROM (SELECT name, country FROM Classes INNER JOIN Ships ON Ships.class = Classes.class WHERE name IN ( SELECT DISTINCT ship FROM Outcomes WHERE result LIKE 'sunk') UNION SELECT ship, country FROM Classes INNER JOIN Outcomes ON Outcomes.ship = Classes.class WHERE ship IN ( SELECT DISTINCT ship FROM Outcomes WHERE result LIKE 'sunk') ) FR2 GROUP BY country ) SELECT T1.country FROM T1 INNER JOIN T2 ON T1.co = t2.co and t1.country = t2.country Задание №48 Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении. Рисунок 95 - Задание №48 Результат: Рисунок 96 - Результат Исходный код: SELECT class as n from ships WHERE name in( SELECT ship FROM outcomes WHERE result='sunk') UNION SELECT ship as n from outcomes WHERE ship not in( SELECT name FROM ships) AND ship IN(SELECT class FROM classes) AND result='sunk' Задание №49 Найдите названия кораблей с орудиями калибра 16 дюймов (учесть корабли из таблицы Outcomes). Рисунок 97 - Задание №49 Результат: Рисунок 98 - Результат Исходный код: SELECT Ships.name FROM Classes JOIN Ships ON Classes.class = ships.class WHERE bore = 16 UNION SELECT Outcomes.ship FROM Outcomes JOIN Classes ON Classes.class = Outcomes.ship WHERE bore = 16 Задание №50 Найдите сражения, в которых участвовали корабли класса Kongo из таблицы Ships. Рисунок 99 - Задание №50 Результат: Рисунок 100 - Результат Исходный код: SELECT DISTINCT battle FROM outcomes WHERE ship IN ( SELECT name FROM ships WHERE class = 'kongo')