Найдите классы в которые входит только один корабль из базы данных
Перейти к содержимому

Найдите классы в которые входит только один корабль из базы данных

  • автор:

Информация

djdoomer

arts

Никак не могу решить задачу по SQL. В общем, есть вот такая база:
https://prnt.sc/o9517c
Текст задания: Определить страны, которые потеряли в сражениях все свои корабли.
Верный ответ:
https://prnt.sc/o9528v
Есть еще проверочная база, с другими данными.
Мое решение дает верный ответ по текущей базе, но не проходит по проверочной.
SELECT DISTINCT classes.country
FROM classes JOIN outcomes
ON classes.class=outcomes.ship
WHERE classes.country IN (SELECT DISTINCT classes.country
FROM classes JOIN outcomes
ON classes.class=outcomes.ship
WHERE outcomes.result=’sunk’)
Подскажите, где я могу ошибаться?
Если что, это 47 задача отсюда http://sql-ex.ru/learn_exercises.php

Рекомендовано: skobkin-ru
01 Jul 2019

По-моему, в условии джойна как минимум, ты сравниваешь имя корабля с классом.

Там могут быть классы, которые не совпадают ни с одним именем корабля, а в одном классе могут быть корабли с разными именами, плюс еще мильен неудобных условий, например, один корабль мог ходить в бой много раз, но потопиться только в последнем.

Но я и сама не смогла, увидела, что как-то условий много, тестового материала мало, и бросила.

У меня тут тоже куча условий не учтена, а результат тестовая база выдает верный:

select distinct c.country from ( select o.ship tmp_ship_name, s.class tmp_class, o.battle, o.result from outcomes o left outer join ships s on o.ship = s.name union select o.ship tmp_ship_name, o.ship tmp_class, o.battle, o.result from outcomes o where o.ship not in (select distinct name from ships) ) u join classes c on u.tmp_ship_name = c.class where lower(u.result) not in ('ok', 'damaged')

Комментарий был отредактирован в 23:03:56 01.07.2019
02 Jul 2019

Я бы считал сумму кораблей классов страны и сумму потопленных кораблей этих классов.

Если корабля нет в ships — у него нет связи со страной, можно его не рассматривать. Корабль после потопленния второй раз не плывёт, значит опять же достаточно посчитать только потери с именами, имеющимися в таблице ships.

#mdsse/2 в ответ на /1
02 Jul 2019

Я тоже думала как-то так решить, но потом подумала, что в ships корабля может и не быть, но класс может называться по имени корабля, и связь со страной таким образом все равно есть.

#mdsse/3 в ответ на /2
02 Jul 2019

hildisvini, спасибо. Логику понял, но у меня почему-то твое решение все равно не проходит http://prntscr.com/o9gd1b

#mdsse/4 в ответ на /1
02 Jul 2019

hildisvini, вот в итоге какое у меня решение вышло

WITH out AS (SELECT * FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country FROM ships FULL JOIN classes ON ships.class = classes.class ) u ON outcomes.ship=u.s_class UNION SELECT * FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country FROM ships FULL JOIN classes ON ships.class = classes.class ) u ON outcomes.ship=u.s_name) SELECT fin.country FROM ( SELECT DISTINCT t.country, COUNT(t.name) AS num_ships FROM ( select distinct c.country, s.name from classes c inner join Ships s on s.class= c.class union select distinct c.country, o.ship from classes c inner join Outcomes o on o.ship= c.class) t GROUP BY t.country INTERSECT SELECT out.s_country, COUNT(out.ship) AS num_ships FROM out WHERE out.result='sunk' GROUP BY out.s_country) fin

#mdsse/5 в ответ на /1
02 Jul 2019

Круто! У меня терпения не хватило допилить.

Надо будет порешать там задачки, раз все равно зарегистрировалась

Решение задач по SQL

Знание SQL необходимо любому back-end разработчику, независимо от языка программирования. В данном выпуске продемонстрирован список вариантов решений задач популярного сайта sql-ex.ru.

Перед выполнением задач, необходимо понимать структуру sql запроса:

SELECT столбцы FROM таблица [WHERE условие_фильтрации_строк] [GROUP BY столбцы_для_группировки] [HAVING условие_фильтрации_групп] [ORDER BY столбцы_для_сортировки]

Оператор HAVING позволяет выполнить фильтрацию групп, то есть определяет, какие группы будут включены в выходной результат.

Использование HAVING во многом аналогично применению WHERE. Только если WHERE применяется для фильтрации строк, то HAVING — для фильтрации групп.

1. Найдите номер модели, скорость и размер жесткого диска для всех ПК стоимостью менее 500 дол. Вывести: model, speed и hd

select model, speed, hd from pc where 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

4. Найдите все записи таблицы Printer для цветных принтеров.

Select * from printer where color = ‘y’

5. Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x CD и цену менее 600 дол.

Select model, speed, hd from pc where (cd = ’12x’ or cd = ’24x’) and price < 600

6. Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска не менее 10 Гбайт, найти скорости таких ПК-блокнотов. Вывод: производитель, скорость.

Select distinct p.maker as maker, l.speed as speed from laptop l join product p on l.model = p.model where l.hd >= 10

7. Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа) производителя B (латинская буква).

Select distinct p.model, pc.price from product p join pc on p.model = pc.model where maker = ‘B’ union Select distinct p.model, l.price from product p join laptop l on p.model = l.model where maker = ‘B’ union Select distinct p.model, pr.price from product p join printer pr on p.model = pr.model where maker = ‘B’

8. Найдите производителя, выпускающего ПК, но не ПК-блокноты.

select maker from product where type = ‘pc’ except select maker from product where type = ‘laptop’ или select distinct maker from product where type = ‘pc’ and maker not in (SELECT maker from product where type = ‘laptop’)

9. Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker

Select distinct p.maker from product p join pc pc on p.model = pc.model where pc.speed >= ‘450’

10. Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price

SELECT DISTINCT model, price FROM printer where price = (SELECT MAX(price) FROM printer)

11. Найдите среднюю скорость ПК.

SELECT AVG(speed) FROM PC

12. Найдите среднюю скорость ПК-блокнотов, цена которых превышает 1000 дол.

Select AVG(speed) from laptop where price > ‘1000’

13. Найдите среднюю скорость ПК, выпущенных производителем A

Select avg(pc.speed) from pc join product p on pc.model = p.model where maker = ‘A’

14. Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.

Select s.class, s.name, c.country from classes c join ships s on c.class = s.class where numguns >= ’10’

15. Найдите размеры жестких дисков, совпадающих у двух и более PC. Вывести: HD

SELECT hd FROM PC group by hd having count(model) >= 2

16. Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, т.е. (i,j), но не (j,i), Порядок вывода: модель с большим номером, модель с меньшим номером, скорость и RAM.

SELECT DISTINCT A.model AS model, B.model AS model, A.speed As speed, A.ram As 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

18. Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price

Select distinct p.maker, pr.price from product p join printer pr on p.model = pr.model where pr.price = (SELECT MIN(price)
FROM printer where color = ‘y’) and pr.color = ‘y’

19. Для каждого производителя, имеющего модели в таблице Laptop, найдите средний размер экрана выпускаемых им ПК-блокнотов.
Вывести: maker, средний размер экрана.

Select p.maker, AVG(l.screen) from product p join laptop l on p.model = l.model group by p.maker

20. Найдите производителей, выпускающих по меньшей мере три различных модели ПК. Вывести: Maker, число моделей ПК.

Select maker, count(model) as Count_Model from product WHERE type = ‘pc’ group by maker having count(model) >= 3

21. Найдите максимальную цену ПК, выпускаемых каждым производителем, у которого есть модели в таблице PC.
Вывести: maker, максимальная цена.

Select p.maker, max(pc.price) as max_price from product p join pc pc on p.model = pc.model group by maker

22. Для каждого значения скорости ПК, превышающего 600 МГц, определите среднюю цену ПК с такой же скоростью. Вывести: speed, средняя цена.

Select speed, avg(price) from pc where speed > ‘600’ group by speed

23. Найдите производителей, которые производили бы как ПК
со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц. Вывести: Maker

Select p.maker from product p join pc pc on p.model = pc.model where pc.speed >= ‘750’ intersect Select p.maker from product p join laptop l on p.model = l.model where l.speed >= ‘750’

24. Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.

WITH all_model AS (
SELECT model, price FROM pc
UNION ALL
SELECT model, price FROM printer
UNION ALL
SELECT model, price FROM laptop )
SELECT distinct model
FROM all_model WHERE price = ALL ( SELECT max(price) FROM all_model)

25. Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker

select distinct p.maker from product p join pc on p.model = pc.model where pc.ram = (select min(ram) from pc) and pc.speed = (SELECT MAX(speed) FROM pc WHERE ram = (SELECT MIN(ram) FROM pc)) and p.maker in (SELECT maker FROM product WHERE type = ‘printer’)

26. Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена.

SELECT AVG(price) as Avg_price FROM (SELECT price
FROM PC WHERE model IN (SELECT model FROM product WHERE maker=’A’ AND type=’PC’) UNION ALL SELECT price
FROM Laptop
WHERE model IN (SELECT model FROM product WHERE maker=’A’ AND
type=’Laptop’)
) AS prods

27. Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры. Вывести: maker, средний размер HD.

SELECT p.maker, avg(pc.hd) from product p join pc pc on p.model = pc.model WHERE pc.model IN (SELECT model FROM pc) AND maker IN (
SELECT maker FROM product WHERE type=’printer’) group by maker или select p.maker, avg(pc.hd) as avg_hd from product p join pc on p.model = pc.model where p.maker in (select maker from product where type = ‘printer’) group by p.maker

28. Используя таблицу Product, определить количество производителей, выпускающих по одной модели.

select count(maker) as qty from (SELECT distinct maker
FROM product group by maker having count(model) = 1) AS prod или select distinct count(maker) as qty from product where maker in (Select maker from product group by maker having count(model) = 1)

29. В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.

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).

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 t
group by point, date order by point

31. Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну.

Select class, country from classes where bore >= ’16’

32. Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных.

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.

Select ship from outcomes where result = ‘sunk’ and battle = ‘North Atlantic’

34. По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду). Вывести названия кораблей.

Select distinct name from classes, ships where launched >=1922 and displacement>35000 and type=’bb’ and
ships.class = classes.class

35. В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).
Вывод: номер модели, тип модели.

Select model, type from product where model NOT LIKE ‘%[^0-9]%’ OR model NOT LIKE ‘%[^a-z]%’

36. Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes).

Select distinct c.class from classes c join outcomes o on c.class = o.ship
union
Select distinct c.class from classes c join ships s on c.class = s.class where s.class = s.name

37. Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes).

select class from (Select distinct c.class, o.ship as name from classes c join outcomes o on c.class = o.ship
union
Select distinct c.class,s.name from classes c join ships s on c.class = s.class) as main_class group by class having count(main_class.name) = 1

Select class from(select class, name from ships
union
select class, ship as name from outcomes join classes on classes.class = outcomes.ship) as A
group by class having count(A.name)=1

38. Найдите страны, имевшие когда-либо классы обычных боевых кораблей (‘bb’) и имевшие когда-либо классы крейсеров (‘bc’).

SELECT country FROM classes where type = ‘bb’
INTERSECT
SELECT country FROM classes where type = ‘bc’

39. Найдите корабли, `сохранившиеся для будущих сражений`; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой, произошедшей позже.

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.dateEXISTS (SELECT battles.date
FROM battles join outcomes on outcomes.battle = battles.name
WHERE battles.date > b.date and outcomes.ship = o.ship)

select distinct o.ship from outcomes o join battles b on o.battle = b.name where o.result = ‘damaged’ AND
EXISTS (SELECT battles.date
FROM battles join outcomes on outcomes.battle = battles.name
WHERE battles.date > b.date and outcomes.ship = o.ship)

40. Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа. Вывести: maker, type

select maker, type from product
where maker in (SELECT maker FROM
(SELECT maker, type FROM Product GROUP BY maker, type) Alias
group by maker having count(maker) = 1) group by maker, type having count(type)>1

SELECT distinct maker, max(type) as type
FROM product
GROUP BY maker
HAVING COUNT(distinct type) = 1 AND COUNT(model) > 1

41. Для каждого производителя, у которого присутствуют модели хотя бы в одной из таблиц PC, Laptop или Printer,
определить максимальную цену на его продукцию.
Вывод: имя производителя, если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL,
иначе максимальную цену.

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. Найдите названия кораблей, потопленных в сражениях, и название сражения, в котором они были потоплены.

Select ship, battle from outcomes where result = ‘sunk’

43. Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду.

select name from battles where DATEPART(yy, date) not in (select DATEPART(yy, date)
from battles join ships on DATEPART(yy, date)=launched)

SELECT distinct b.name
FROM Outcomes o right JOIN
battles b ON o.ship = b.name where DATEPART(yy, b.date) not in (select launched from ships)

44. Найдите названия всех кораблей в базе данных, начинающихся с буквы R.

Select name from ships where name like ‘R%’
union
Select ship from outcomes where ship like ‘R%’

45. Найдите названия всех кораблей в базе данных, состоящие из трех и более слов (например, King George V).
Считать, что слова в названиях разделяются единичными пробелами, и нет концевых пробелов.

Select name from ships where name like ‘% % %’
union
Select ship from outcomes where ship like ‘% % %’

46. Для каждого корабля, участвовавшего в сражении при Гвадалканале (Guadalcanal), вывести название, водоизмещение и число орудий.

SELECT DISTINCT ship, displacement, numguns
FROM classes LEFT JOIN ships ON classes.class=ships.class RIGHT JOIN outcomes ON classes.class=ship OR ships.name=ship
WHERE battle=’Guadalcanal’

47. Определить страны, которые потеряли в сражениях все свои корабли.

WITH out AS (SELECT *
FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country
FROM ships FULL JOIN classes
ON ships.class = classes.class
) u
ON outcomes.ship=u.s_class
UNION
SELECT *
FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country
FROM ships FULL JOIN classes
ON ships.class = classes.class
) u
ON outcomes.ship=u.s_name)

SELECT fin.country
FROM (
SELECT DISTINCT t.country, COUNT(t.name) AS num_ships
FROM (
select distinct c.country, s.name
from classes c
inner join Ships s on s.class= c.class
union
select distinct c.country, o.ship
from classes c
inner join Outcomes o on o.ship= c.class) t
GROUP BY t.country

SELECT out.s_country, COUNT(out.ship) AS num_ships
FROM out
WHERE out.result=’sunk’
GROUP BY out.s_country) fin

48. Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении.

select class
from classes t1 left join outcomes t2 on t1.class=t2.ship where result=’sunk’
union
select class
from ships left join outcomes on ships.name=outcomes.ship where result=’sunk’

49. Найдите названия кораблей с орудиями калибра 16 дюймов (учесть корабли из таблицы Outcomes).

select s.name from ships s join classes c on s.name=c.class or s.class = c.class where c.bore = 16
union
select o.ship from outcomes o join classes c on o.ship=c.class where c.bore = 16

50. Найдите сражения, в которых участвовали корабли класса Kongo из таблицы Ships.

Select distinct o.battle from ships s join outcomes o on s.name = o.ship where s.class = ‘kongo’

51. Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения (учесть корабли из таблицы Outcomes).

select NAME from(select name as NAME, displacement, numguns from ships inner join classes on ships.class = classes.class union select ship as NAME, displacement, numguns from outcomes inner join classes on outcomes.ship= classes.class) as d1 inner join (select displacement, max(numGuns) as numguns from ( select displacement, numguns from ships inner join classes on ships.class = classes.class union select displacement, numguns from outcomes inner join classes on outcomes.ship= classes.class) as f group by displacement) as d2 on d1.displacement=d2.displacement and d1.numguns =d2.numguns

52. Определить названия всех кораблей из таблицы Ships, которые могут быть линейным японским кораблем, имеющим число главных орудий не менее девяти, калибр орудий менее 19 дюймов и водоизмещение не более 65 тыс.тонн

select s.name from ships s join classes c on s.class = c.class where country = ‘japan’ and (numGuns >= ‘9’ or numGuns is null) and (bore < '19' or bore is null) and (displacement

53. Определите среднее число орудий для классов линейных кораблей. Получить результат с точностью до 2-х десятичных знаков.

Select CAST(AVG(numguns*1.0) AS NUMERIC(6,2)) as Avg_nmg from classes where type = ‘bb’

54. С точностью до 2-х десятичных знаков определите среднее число орудий всех линейных кораблей (учесть корабли из таблицы Outcomes).

select CAST(AVG(numguns*1.0) AS NUMERIC(6,2)) as AVG_nmg from (select ship, numguns, type from Outcomes join classes on ship = class
union
select name, numguns, type from ships s join classes c on c.class = s.class) as x where type = ‘bb’

55. Для каждого класса определите год, когда был спущен на воду первый корабль этого класса. Если год спуска на воду головного корабля неизвестен, определите минимальный год спуска на воду кораблей этого класса. Вывести: класс, год.

Select c.class, min(s.launched) from classes c left join ships s on c.class = s.class group by c.class

56. Для каждого класса определите число кораблей этого класса, потопленных в сражениях. Вывести: класс и число потопленных кораблей.

SELECT c.class, COUNT(s.ship)
FROM classes c
LEFT JOIN (SELECT o.ship, sh.class
FROM outcomes o
LEFT JOIN ships sh ON sh.name = o.ship
WHERE o.result = ‘sunk’) AS s ON s.class = c.class OR s.ship = c.class
GROUP BY c.class

Упражнения по SQL

SELECT (обучающий этап) задачи по SQL запросам 120 штук, DML 10 шт. Дистанционное обучение языку баз данных SQL. Интерактивные упражнения и тестирование по операторам SELECT,INSERT,UPDATE,DELETE языка SQL. SQL remote education. SQL statements exercises. Подзапросы, Соединение таблиц, Функции SQL, Введение в SQL, Скачать книги по SQL. Команды SQL,CREATE SEQUENCE,CREATE SYNONYM,CREATE USER,CREATE VIEW,Create Table,DROP,GRANT,INSERT,REVOKE,SET ROLE,SET TRANSACTION,SQL ALTER TABLE,SQL команды.

четверг, 16 апреля 2020 г.

Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes). SELECT c

Задание: 37 (Serge I: 2003-02-17)

.class
FROM classes c
LEFT JOIN (
SELECT class, name
FROM ships
UNION
SELECT ship, ship
FROM outcomes
) AS s ON s.class = c.class
GROUP BY c.class
HAVING COUNT(s.name) = 1

Популярные сообщения

  • SELECT (обучающий этап) задачи по SQL запросам
  • Найдите номера моделей и цены всех продуктов (любого типа), выпущенных производителем B (латинская буква).
  • Найдите пары моделей PC, имеющих одинаковые скорость и RAM.
  • Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price
  • В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).
  • Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM.
  • Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.
  • Найдите производителей, выпускающих по меньшей мере три различных модели ПК.
  • В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.
  • Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.

Команда SELECT

  • SQL Подзапросы
  • SQL Соединение таблиц
  • SQL Строки и выражения
  • Команда SELECT Раздел FROM
  • Команда SELECT Раздел GROUP BY
  • Команда SELECT Раздел HAVING
  • Команда SELECT Раздел ORDER BY
  • Команда SELECT Раздел WHERE

Команды SQL

Условия в SQL

Функции SQL

Основа SQL

  • Введение в SQL
  • Индексы ROWID в Oracle
  • Типы данных SQL
  • Типы привилегий

Меню SQL

Ссылки

Примеры

Архив блога

  • ▼2020 (121)
    • ▼апреля (121)
      • Для авиакомпаний, самолеты которой выполнили хотя .
      • Сгруппировать все окраски по дням, месяцам и годам.
      • Выборы Директора музея ПФАН проводятся только в ви.
      • Задание: 117 (Serge I: 2013-11-29) По таблице Cla.
      • Считая, что каждая окраска длится ровно секунду, о.
      • Рассмотрим равнобочные трапеции, в каждую из котор.
      • Определить имена разных пассажиров, которым чаще д.
      • Сколько каждой краски понадобится, чтобы докрасить.
      • Какое максимальное количество черных квадратов мож.
      • Найти НЕ белые и НЕ черные квадраты, которые окраш.
      • Определить имена разных пассажиров, когда-либо лет.
      • Вывести: 1. Названия всех квадратов черного или б.
      • Реставрация экспонатов секции «Треугольники» музея.
      • Для пятого по счету пассажира из числа вылетевших .
      • Пусть v1, v2, v3, v4, . представляет последовате.
      • Статистики Алиса, Белла, Вика и Галина нумеруют ст.
      • Для каждого класса крейсеров, число орудий которог.
      • Выбрать три наименьших и три наибольших номера рей.
      • Определить имена разных пассажиров, которые летали.
      • Таблица Printer сортируется по возрастанию поля code.
      • Написать запрос, который выводит все операции прих.
      • Рассматриваются только таблицы Income_o и Outcome_.
      • Вывести список ПК, для каждого из которых результа.
      • Отобрать из таблицы Laptop те строки, для которых .
      • При условии, что баллончики с красной краской испо.
      • На основании информации из таблицы Pass_in_Trip, д.
      • Для семи последовательных дней, начиная от минимал.
      • Для каждой компании, перевозившей пассажиров, подс.
      • Выбрать все белые квадраты, которые окрашивались т.
      • Используя таблицу Product, определить количество п.
      • Вывести все строки из таблицы Product, кроме трех .
      • Найти производителей, у которых больше всего модел.
      • Среди тех, кто пользуется услугами только одной ко.
      • Считая, что пункт самого первого вылета пассажира .
      • Для каждого производителя перечислить в алфавитном.
      • Найти производителей, которые выпускают только при.
      • Для каждой компании подсчитать количество перевезе.
      • Определить названия всех кораблей из таблицы Ships.
      • В наборе записей из таблицы PC, отсортированном по.
      • Из таблицы Outcome получить все записи за тот меся.
      • Найти производителей компьютерной техники, у котор.
      • Определить пассажиров, которые больше других време.
      • Для каждого сражения определить первый и последний.
      • Определить дни, когда было выполнено максимальное .
      • Определить время, проведенное в полетах, для пасса.
      • Для каждого корабля из таблицы Ships указать назва.
      • Вывести классы всех кораблей России (Russia). Если.
      • Для каждой страны определить сражения, в которых н.
      • Среди тех, кто пользуется услугами только какой-ни.
      • Найти тех производителей ПК, все модели ПК которых.
      • Укажите сражения, в которых участвовало по меньшей.
      • По таблицам Income и Outcome для каждого пункта пр.
      • Найти количество маршрутов, которые обслуживаются .
      • Найти количество маршрутов, которые обслуживаются .
      • Для всех дней в интервале с 01/04/2003 по 07/04/20.
      • Пронумеровать уникальные пары из Pro.
      • Используя таблицы Income и Outcome, для каждого пу.
      • Определить имена разных пассажиров, когда-либо лет.
      • Посчитать остаток денежных средств на всех пунктах.
      • Посчитать остаток денежных средств на всех пунктах.
      • Посчитать остаток денежных средств на начало дня 1.
      • Посчитать остаток денежных средств на каждом пункт.
      • Для каждого типа продукции и каждого производителя.
      • Для классов, имеющих потери в виде потопленных кор.
      • Для каждого класса определите число кораблей этого.
      • Для каждого класса определите год, когда был спуще.
      • С точностью до 2-х десятичных знаков определите ср.
      • Определите среднее число орудий для классов линейн.
      • Определить названия всех кораблей из таблицы Ships.
      • Найдите названия кораблей, имеющих наибольшее числ.
      • Найдите сражения, в которых участвовали корабли кл.
      • Найдите названия кораблей с орудиями калибра 16 дю.
      • Найдите классы кораблей, в которых хотя бы один ко.
      • Пронумеровать строки из таблицы Product в следующе.
      • Для каждого корабля, участвовавшего в сражении при.
      • Найдите названия всех кораблей в базе данных, сост.
      • Найдите названия всех кораблей в базе данных, начи.
      • Укажите сражения, которые произошли в годы, не сов.
      • Найдите названия кораблей, потопленных в сражениях.
      • Для ПК с максимальным кодом из таблицы PC вывести .
      • Найдите класс, имя и страну для кораблей из таблиц.
      • Найдите класс, имя и страну для кораблей из таблиц.
      • Найдите корабли, «сохранившиеся для будущих сражен.
      • Найдите страны, имевшие когда-либо классы обычных .
      • Найдите классы, в которые входит только один кораб.
      • Перечислите названия головных кораблей, имеющихся .
      • В таблице Product найти модели, которые состоят то.
      • По Вашингтонскому международному договору от начал.
      • Укажите корабли, потопленные в сражениях в Северно.
      • Одной из характеристик корабля является половина к.
      • Для классов кораблей, калибр орудий которых не мен.
      • В предположении, что приход и расход денег на кажд.
      • В предположении, что приход и расход денег на кажд.
      • Найдите средний размер диска ПК (одно значение для.
      • Найдите средний размер диска ПК каждого из тех про.
      • Найдите среднюю цену ПК и ПК-блокнотов, выпущенных.
      • Найдите производителей принтеров, которые производ.
      • Перечислите номера моделей любых типов, имеющих са.
      • Найдите производителей, которые производили бы как.
      • Для каждого значения скорости ПК, превышающего 600.
      • ►2019 (130)
        • ►апреля (18)
        • ►марта (2)
        • ►февраля (22)
        • ►января (88)
        • ►2018 (2)
          • ►декабря (2)
          • ►2017 (22)
            • ►февраля (22)
            • 12 идей
            • 21 ошибка программиста PHP
            • Абстрактные классы БД
            • Азбука MySQL
            • База данных Компьютерная фирма
            • база sql server
            • Безопасный и удобный поиск в mySQL
            • Введение в SQL
            • Введение в SQLite
            • Вложенные запросы SQL
            • Внешние объединения SQL
            • Время выполнения SQL запросов
            • Вступление в PHP и MySQL
            • господа!
            • Задания для самостоятельной работы
            • Знакомство с WinBinder
            • Индексы ROWID в Oracle
            • Интервью Расмуса Лердорфа для SitePoint
            • Использование в запросе нескольких источников записей
            • Использование ключевых слов SOME | ANY и ALL с предикатами сравнения
            • Использование mysqli
            • Использование PEAR для доступа к базе данных
            • Как вывести по N строк из каждой группы?
            • Как выводить в запросе все столбцы кроме одного
            • Как добавить новый столбец в таблицу между существующими столбцами?
            • Как объединить данные из двух столбцов в один без использования UNION и JOIN?
            • Как подсчитать накопительный итог?
            • как получать пассивный доход
            • Как решать задачи на SQL
            • Как удалить дубликаты строк из таблицы?
            • Как удалить дубликаты строк при наличии первичного ключа?
            • Как установить шрифт в Windows и macOS
            • Код ошибки: 1062. Дублируемая запись ‘PRIMARY’
            • Команда SELECT Раздел FROM
            • Команда SELECT Раздел GROUP BY
            • Команда SELECT Раздел HAVING
            • Команда SELECT Раздел ORDER BY
            • Команда SELECT Раздел WHERE
            • Команды DML
            • Конвертация баз MySQL в dBase
            • Конвертация базы данных из DBASE в MySQL
            • которые должен знать каждый программист
            • Краткое вступление в SQLite
            • Ловля ошибки в PHP
            • не перечисляя их?
            • Обработка запросов к БД при помощи PEAR::XML
            • Оператор выбора SELECT
            • Оператор SELECT
            • Оператор UPDATE
            • Операторы манипулирования данными SQL
            • Операторы модификации данных
            • Оптимальное использование MySQL
            • Оптимизация запросов в MySQL
            • Оптимизация программ на PHP
            • Оптимизация работы с MySQL
            • Основные команды SQL
            • Основы SQL на примере задачи
            • Основы SQL на примере задачи и Решение
            • ОШИБКА 1044 (42000): доступ запрещен для пользователя ‘@’ localhost ‘в базу данных’ db ‘
            • Ошибка 1067 при попытке запустить MySQL
            • Переименование столбцов и вычисления в результирующем наборе
            • Пишем PHP код
            • Получение итоговых значений
            • Постреляционная СУБД Postgres95
            • Построение таблиц «Один-к-разным»
            • Предикаты (часть I)
            • Преобразование типов
            • Приложение 1. Описание учебных баз данных
            • Применение агрегатных функций и вложенных запросов в операторе выбора
            • Проектирование Интернет-приложений
            • Работа с базами данных. Начало
            • Работа с БД. Анализ логов
            • Работа с MySQL
            • Работа с MySQL: Подробнее
            • Работа с MySQL. Деревья
            • Работа с MySQL. Новостная лента для странички
            • Работа с NULL-значениями
            • Работа с Oracle в PHP
            • Работа с SQLite
            • Разбиваем большие запросы на страницы
            • Рекурсивные SQL запросы
            • Связи таблиц в MySQL
            • Скачать книги по SQL
            • Структура SQL
            • Структурированный язык запросов SQL
            • Тест знаний SQL — Основы
            • Типы данных SQL
            • Типы данных SQL /89
            • Типы привилегий
            • Тонкая настройка MySQL
            • Традиционные операции над множествами и оператор SELECT
            • устойчивый к ошибкам
            • Функции работы со строками в MS SQL SERVER 2005
            • Функции Transact-SQL для обработки даты/времени
            • Функция SQL FIRST ()
            • Хороший стиль программирования
            • Хранение древовидных структур в Базах данных
            • часть 1
            • язык sql
            • Як встановити або видалити шрифт у Windows
            • Active Directory Sync
            • ADODB – русская документация
            • CHECK
            • CREATE SEQUENCE
            • CREATE SYNONYM
            • Create Table
            • CREATE USER
            • CREATE VIEW
            • DML
            • DROP
            • FOREIGN KEY
            • GRANT
            • INSERT
            • ms sql
            • MySQL для начинающих
            • MySQL и оптимизация
            • MySQL Administrator
            • MySQL error 1045
            • MySQL error 1054 и как с ней бороться
            • MySQL error 1064
            • MySQL error 1093 и 1235
            • MySQL. Установка. Настройка. Использование
            • Oracle и PHP — это очень просто!
            • PHP против ASP — В примерах
            • PostgreSQL 8.3.0
            • PostgreSQL версии 8.0
            • PRIMARY KEY
            • REVOKE
            • SELECT (обучающий этап) задачи по SQL запросам
            • SET ROLE
            • SET TRANSACTION
            • SQL — запросы и их обработка с помощью PHP
            • SQL — запросы PHP
            • sql 2008
            • sql запрос
            • SQL команды
            • SQL Подзапросы
            • SQL Соединение таблиц
            • SQL Строки и выражения
            • SQL ALTER TABLE
            • SQL And & Or
            • SQL AVG
            • SQL COUNT
            • SQL DELETE
            • SQL SELECT
            • SQL UNION
            • SQL UPDATE
            • UNIQUE
            • WinBinder. Создание форм
            • XQuery и виртуализация

            Задание: 5

            Текст задания:
            Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x CD и цену менее 600 дол.
            Решение :

            SELECT model, speed, hd
            FROM pc
            WHERE cd IN (’12x’, ’24x’) AND price < 600;

            Задание: 6

            Текст задания:
            Укажите производителя и скорость для тех ПК-блокнотов, которые имеют жесткий диск объемом не менее 10 Гбайт.
            Решение :

            SELECT maker, speed
            FROM product INNER JOIN laptop ON Product.model = Laptop.model
            WHERE laptop.hd >=10;

            Задание: 7

            Текст задания:
            Найдите номера моделей и цены всех продуктов (любого типа), выпущенных производителем B (латинская буква).
            Решение :

            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

            Текст задания:
            Найдите производителя, выпускающего ПК, но не ПК-блокноты.
            Решение :

            SELECT DISTINCT maker
            FROM product
            WHERE type = ‘PC’
            EXCEPT
            SELECT DISTINCT maker
            FROM product
            WHERE type= ‘Laptop’;
            Анализ плана выполнения запроса:
            Стоимость: 0.020371463149786.
            Количество операций: 5.

            Задание: 9

            Текст задания:
            Найдите производителей ПК с процессором не менее 450 Мгц. Вывести : Maker.
            Решение :

            SELECT DISTINCT maker
            FROM product JOIN pc ON product.model=pc.model
            WHERE pc.speed>=450;

            Задание: 10

            Текст задания:
            Найдите принтеры, имеющие самую высокую цену. Вывести : model, price.
            Решение :

            SELECT model, price
            FROM printer
            WHERE price =
            (
            SELECT MAX(price) FROM printer
            );

            Задание: 11

            Текст задания:
            Найдите среднюю скорость ПК.
            Решение :

            SELECT AVG(speed)
            FROM pc;

            Задание: 12

            Текст задания:
            Найдите среднюю скорость ПК-блокнотов, цена которых превышает 1000 дол.
            Решение :

            SELECT AVG(speed)
            FROM laptop
            WHERE price>1000;

            Задание: 13

            Текст задания:
            Найдите среднюю скорость ПК, выпущенных производителем A.
            Решение :

            SELECT AVG(speed)
            FROM pc LEFT JOIN product ON product.model=pc.model
            WHERE product.maker=’A’;

            Задание: 14

            Текст задания:
            Для каждого значения скорости найдите среднюю стоимость ПК с такой же скоростью процессора.
            Вывести: скорость, средняя цена.
            Решение:

            SELECT speed, AVG(price)
            FROM pc
            GROUP BY speed;

            Задание: 15

            Текст задания:
            Найдите размеры жестких дисков, совпадающих у двух и более PC.
            Вывести : HD.
            Решение :

            SELECT hd
            FROM pc
            GROUP BY hd
            HAVING count(hd)>1;

            Задание: 16

            Текст задания:
            Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, т.е. (i,j), но не (j,i).
            Порядок вывода: модель с большим номером, модель с меньшим номером, скорость и RAM.
            Решение :

            SELECT distinct pc1.model, pc2.model, pc1.speed, pc1.ram
            FROM pc AS pc1, pc AS pc2
            WHERE pc1.model>pc2.model AND pc1.speed=pc2.speed AND pc1.ram=pc2.ram;

            Задание: 17

            Текст задания:
            Найдите модели ПК-блокнотов, скорость которых меньше скорости любого из ПК.
            Вывести : type, model, speed.
            Решение :

            SELECT DISTINCT product.type, laptop.model, laptop.speed
            FROM laptop, product
            WHERE speed <
            (
            SELECT MIN(speed) FROM pc
            )
            AND product.type=’Laptop’;

            Задание: 18

            Текст задания:
            Найдите производителей самых дешевых цветных принтеров.
            Вывести : maker, price.
            Решение :

            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

            Текст задания:
            Для каждого производителя найдите средний размер экрана выпускаемых им ПК-блокнотов.
            Вывести : maker, средний размер экрана .
            Решение :

            SELECT maker, AVG(screen)
            FROM product JOIN laptop ON product.model=laptop.model
            GROUP BY maker;

            Задание: 20

            Текст задания:
            Найдите производителей, выпускающих по меньшей мере три различных модели ПК.
            Вывести : Maker, число моделей .
            Решение :

            SELECT maker, COUNT(model)
            FROM product
            WHERE type=’pc’
            GROUP BY maker
            HAVING COUNT(model)>=3;

            Задание: 21

            Текст задания:
            Найдите максимальную цену ПК, выпускаемых каждым производителем.
            Вывести : maker, максимальная цена .
            Решение :

            SELECT maker, MAX(price)
            FROM product JOIN pc ON product.model=pc.model
            GROUP BY maker;

            Задание: 22

            Текст задания:
            Для каждого значения скорости ПК, превышающего 600 МГц, определите среднюю цену ПК с такой же скоростью.
            Вывести: speed, средняя цена.
            Решение :

            SELECT speed, AVG(price)
            FROM pc WHERE speed>600
            GROUP BY speed;

            Задание: 23

            Текст задания:
            Найдите производителей, которые производили бы как ПК со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц.
            Вывести : Maker.
            Решение :

            SELECT DISTINCT maker
            FROM product t1 JOIN pc t2 ON t1.model=t2.model
            WHERE speed>=750 AND maker IN
            (
            SELECT maker
            FROM product t1 JOIN laptop t2 ON t1.model=t2.model
            WHERE speed>=750
            );

            Задание: 24

            Текст задания:
            Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.
            Решение :

            SELECT model
            FROM (
            SELECT model, price
            FROM pc
            UNION
            SELECT model, price
            FROM Laptop
            UNION
            SELECT model, price
            FROM Printer
            ) t1
            WHERE price = (
            SELECT MAX(price)
            FROM (
            SELECT price
            FROM pc
            UNION
            SELECT price
            FROM Laptop
            UNION
            SELECT price
            FROM Printer
            ) t2
            );

            Задание: 25

            Текст задания:
            Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM.
            Вывести: Maker.
            Решение :

            SELECT DISTINCT maker
            FROM product
            WHERE model IN (
            SELECT model
            FROM pc
            WHERE ram = (
            SELECT MIN(ram)
            FROM pc
            )
            AND speed = (
            SELECT MAX(speed)
            FROM pc
            WHERE ram = (
            SELECT MIN(ram)
            FROM pc
            )
            )
            )
            AND
            maker IN (
            SELECT maker
            FROM product
            WHERE type=’printer’
            );

            Задание: 26

            Текст задания:
            Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква).
            Вывести : одна общая средняя цена .
            Решение :

            SELECT AVG(price)
            FROM (
            SELECT code, price, pc.model, ram, hd
            FROM pc
            WHERE model IN (
            SELECT model
            FROM product
            WHERE maker=’a’
            )
            UNION
            SELECT code, price, laptop.model, ram, hd
            FROM laptop
            WHERE model IN (
            SELECT model
            FROM product
            WHERE maker=’a’
            )
            ) a;

            Задание: 27

            Текст задания:
            Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры.
            Вывести : maker, средний размер HD.
            Решение :

            SELECT maker, AVG(hd)
            FROM product t1 JOIN pc t2 ON t1.model=t2.model
            WHERE maker IN (
            SELECT maker
            FROM product
            WHERE type=’printer’
            )
            GROUP BY maker;

            Задание: 28

            Текст задания:
            Найдите средний размер диска ПК (одно значение для всех) тех производителей, которые выпускают и принтеры.
            Вывести : средний размер HD.
            Решение :

            SELECT AVG(hd)
            FROM product t1 JOIN pc t2 ON t1.model=t2.model
            WHERE maker IN (
            SELECT maker
            FROM product
            WHERE type=’printer’
            );

            Задание: 29

            Текст задания:
            В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.
            Решение :

            SELECT t1.point, t1.date, inc, `out`
            FROM income_o t1 LEFT JOIN outcome_o t2 USING(point,date)
            UNION
            SELECT t2.point, t2.date, inc, `out`
            FROM income_o t1 RIGHT JOIN outcome_o t2 USING(point,date);

            Задание: 30

            Текст задания:
            В предположении, что приход и расход денег на каждом пункте приема фиксируется произвольное число раз (первичным ключом в таблицах является столбец code), требуется получить таблицу, в которой каждому пункту за каждую дату выполнения операций будет соответствовать одна строка.
            Вывод: point, date, суммарный расход пункта за день (out), суммарный приход пункта за день (inc). Отсутствующие значения считать неопределенными (NULL).
            Решение :

            SELECT t1.point, t1.date, `out`, inc
            FROM (
            SELECT point, date, SUM(inc) AS inc
            FROM income
            GROUP BY point, date
            ) t1 LEFT JOIN (
            SELECT point, date, SUM(`out`) AS `out`
            FROM outcome
            GROUP BY point, date
            ) t2
            USING(point,date)
            UNION
            SELECT t2.point, t2.date, `out`, inc
            FROM (
            SELECT point, date, SUM(inc) AS inc FROM income
            GROUP BY point, date
            ) t1 RIGHT JOIN (
            SELECT point, date, SUM(`out`) AS `out`
            FROM outcome
            GROUP BY point, date) t2
            USING(point,date);

            Задание: 31

            Текст задания:
            Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну.
            Решение :

            SELECT class, country
            FROM classes
            WHERE bore>=16;

            Задание: 32

            Текст задания:
            Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных.
            Решение :

            Select country, round(avg((pow(bore,3)/2)),2) as weight
            from
            (select country, class, bore, name from classes left join ships using(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.
            Решение :

            Select ship
            from Outcomes
            where battle = ‘North Atlantic’ and result=’sunk’;

            Задание: 34

            Текст задания:
            По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду).
            Вывести названия кораблей .
            Решение :

            Select name
            from classes left join ships using(class)
            where launched>=1922 and displacement>35000 and type=’bb’;

            Задание: 35

            Текст задания:
            В таблице Product найти модели, у которых первый символ представляет собой четную цифру, а последний – нечетную.
            При этом первый символ должен быть меньше последнего.
            Вывод: номер модели, тип модели, произведение первой и последней цифр в номере модели.
            Решение :

            SELECT model, type, LEFT(model,1)*RIGHT(model,1)
            FROM product
            WHERE
            LEFT(model,1) IN (2,4,6,8)
            AND RIGHT(model,1) IN (1,3,5,7,9)
            AND LEFT(model,1) < RIGHT(model,1);

            Задание: 36

            Текст задания:
            Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes).
            Решение :

            Select distinct name from (
            select name from ships
            union
            select ship from outcomes
            ) t1
            where name in (select class from classes);

            Задание: 37

            Текст задания:
            Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes).
            Решение :

            select class
            from
            (select class, count(name) as cnt
            from
            (select class, name from classes left join ships using(class)
            union all
            select distinct class, ship
            from classes t1 left join outcomes t2 on t1.class=t2.ship
            where ship not in (select name from ships) ) a
            where name!=’null’
            group by class) b
            where cnt=1;

            Задание: 38

            Текст задания:
            Найдите страны, имевшие когда-либо классы обычных боевых кораблей (‘bb’) и имевшие когда-либо классы крейсеров (‘bc’).
            Решение :

            select distinct country
            from classes
            where type=’bb’ and country in
            (
            select country
            from classes
            where type=’bc’
            );

            Задание: 39

            Текст задания:
            Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes).
            Решение :

            SELECT DISTINCT ship
            FROM outcomes o1
            LEFT JOIN Battles b1 ON b1.name=o1.battle
            WHERE result = ‘damaged’
            and ship IN(
            SELECT ship
            FROM outcomes o2
            LEFT JOIN Battles b2 ON b2.name=o2.battle
            WHERE o2.ship=o1.ship
            and b2.date > b1.date
            );

            Задание: 40

            Текст задания:
            Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.
            Решение :

            SELECT class, name, country
            FROM classes LEFT JOIN ships USING(class)
            WHERE numguns>=10 AND name!=’null’;

            Задание: 41

            Текст задания:
            Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.
            Решение :

            SELECT ‘cd’, cd
            FROM `pc`
            WHERE code=(SELECT MAX(code) FROM `pc`)
            UNION
            SELECT ‘hd’, hd
            FROM `pc`
            WHERE code=(SELECT MAX(code) FROM `pc`)
            UNION
            SELECT ‘model’, model
            FROM `pc`
            WHERE code=(SELECT MAX(code) FROM `pc`)
            UNION
            SELECT ‘price’, price
            FROM `pc`
            WHERE code=(SELECT MAX(code) FROM `pc`)
            UNION
            SELECT ‘ram’, ram
            FROM `pc`
            WHERE code=(SELECT MAX(code) FROM `pc`)
            UNION
            SELECT ‘speed’, speed
            FROM `pc`
            WHERE code=(SELECT MAX(code) FROM `pc`);

            Задание: 42

            Текст задания:
            Найдите названия кораблей, потопленных в сражениях, и название сражения, в котором они были потоплены.
            Решение :

            SELECT ship, battle
            FROM outcomes
            WHERE result=’sunk’;

            Задание: 43

            Текст задания:
            Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду.
            Решение :

            SELECT name
            FROM battles
            WHERE YEAR(date) NOT IN
            (
            SELECT launched
            FROM ships
            WHERE launched!=’null’
            );

            Задание: 44

            Текст задания:
            Найдите названия всех кораблей в базе данных, начинающихся с буквы R.
            Решение :

            SELECT *
            FROM
            (
            SELECT name
            FROM ships
            UNION
            SELECT ship
            FROM outcomes
            ) a
            WHERE name LIKE ‘R%’;

            Задание: 45

            Текст задания:
            Найдите названия всех кораблей в базе данных, состоящие из трех и более слов (например, King George V).
            Считать, что слова в названиях разделяются единичными пробелами, и нет концевых пробелов.
            Решение :

            SELECT *
            FROM
            (
            SELECT name
            FROM ships
            UNION
            SELECT ship
            FROM outcomes
            ) a
            WHERE name LIKE ‘% % %’;

            Задание: 46

            Текст задания:
            Укажите названия, водоизмещение и число орудий кораблей, участвовавших в сражении при Гвадалканале (Guadalcanal).
            Решение :

            SELECT DISTINCT ship, displacement, numguns
            FROM classes LEFT JOIN ships ON classes.class=ships.class RIGHT JOIN outcomes ON classes.class=ship OR ships.name=ship
            WHERE battle=’Guadalcanal’;

            Задание: 47

            Текст задания:
            Пронумеровать строки из таблицы Product в следующем порядке: имя производителя в порядке убывания числа производимых им моделей (при одинаковом числе моделей имя производителя в алфавитном порядке по возрастанию), номер модели (по возрастанию).
            Вывод: номер в соответствии с заданным порядком, имя производителя (maker), модель (model).
            Решение :

            SELECT count(*), t2.maker, t2.model
            FROM(
            SELECT maker, model, c
            FROM Product
            JOIN (
            SELECT count(model) c, maker m
            FROM product
            GROUP BY maker
            ) t
            ON maker = m) t2
            JOIN
            (SELECT maker, model, c
            FROM Product
            JOIN (
            SELECT count(model) c, maker m
            FROM product
            GROUP BY maker
            ) t1
            ON maker = m) t3
            ON t3.c>t2.c OR (t3.c=t2.c AND (t3.maker <="t2.model)))GROUP BY t2.maker, t2.model;

            Задание: 48

            Текст задания:
            Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении.
            Решение :

            select class
            from classes t1 left join outcomes t2 on t1.class=t2.ship where result=’sunk’
            union
            select class
            from ships left join outcomes on ships.name=outcomes.ship where result=’sunk’

            Задание: 49

            Текст задания:
            Найдите названия кораблей с орудиями калибра 16 дюймов (учесть корабли из таблицы Outcomes)..
            Решение :

            Select name
            from classes left join ships using(class)
            where bore=16 and name!=’null’
            union
            select ship
            from outcomes t1 right join classes t2 on t1.ship=t2.class where ship=class and bore=16

            Задание: 50

            Текст задания:
            Найдите сражения, в которых участвовали корабли класса Kongo из таблицы Ships.
            Решение :

            Select battle
            from outcomes where ship in
            (select name from classes left join ships using(class) where class=’Kongo’)

            Задание: 51

            Текст задания:
            Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения (учесть корабли из таблицы Outcomes).
            Решение :

            SELECT name
            FROM (SELECT O.ship AS name, numGuns, displacement
            FROM Outcomes O INNER JOIN
            Classes C ON O.ship = C.class AND
            O.ship NOT IN (SELECT name
            FROM Ships
            )
            UNION
            SELECT S.name AS name, numGuns, displacement
            FROM Ships S INNER JOIN
            Classes C ON S.class = C.class
            ) OS INNER JOIN
            (SELECT MAX(numGuns) AS MaxNumGuns, displacement
            FROM Outcomes O INNER JOIN
            Classes C ON O.ship = C.class AND
            O.ship NOT IN (SELECT name
            FROM Ships
            )
            GROUP BY displacement
            UNION
            SELECT MAX(numGuns) AS MaxNumGuns, displacement
            FROM Ships S INNER JOIN
            Classes C ON S.class = C.class
            GROUP BY displacement
            ) GD ON OS.numGuns = GD.MaxNumGuns AND
            OS.displacement = GD.displacement;

            Задание: 52

            Текст задания:
            Определить названия всех кораблей из таблицы Ships, которые могут быть линейным японским кораблем,
            имеющим число главных орудий не менее девяти, калибр орудий менее 19 дюймов и водоизмещение не более 65 тыс.тонн.
            Решение :

            Select name
            from classes t1 left join ships t2 using(class)
            where country=’japan’ and (numguns>=9 or numguns is NULL) and (bore

            Задание: 53

            Текст задания:
            Определите среднее число орудий для классов линейных кораблей.
            Получить результат с точностью до 2-х десятичных знаков.
            Решение:

            select round(avg(numGuns),2)
            from classes where type=’bb’;

            Задание: 54

            Текст задания:
            С точностью до 2-х десятичных знаков определите среднее число орудий всех линейных кораблей (учесть корабли из таблицы Outcomes).
            Решение :

            select round(avg(numguns),2)
            from (
            Select numguns, name
            from classes left join ships using(class)
            where type=’bb’ and name!=’null’ and class!=’null’
            union all
            select distinct numguns, ship
            from classes left join outcomes on classes.class=outcomes.ship
            where ship not in (select name from ships) and class!=’null’ and type=’bb’ )a;

            Задание: 55

            Текст задания:
            Для каждого класса определите год, когда был спущен на воду первый корабль этого класса. Если год спуска на воду головного корабля неизвестен, определите минимальный год спуска на воду кораблей этого класса.
            Вывести : класс , год .
            Решение :

            select class, min(launched)
            from classes left join ships using(class)
            group by class;

            Задание: 56

            Текст задания:
            Для каждого класса определите число кораблей этого класса, потопленных в сражении.
            Вывести : класс и число потопленных кораблей .
            Решение :

            SELECT class, IF(c,c,0)
            FROM (SELECT class FROM classes) x2 LEFT JOIN
            (
            SELECT class, COUNT(*) c FROM (
            SELECT class, result FROM
            classes LEFT JOIN outcomes ON classes.class=outcomes.ship
            WHERE result=’sunk’
            UNION ALL
            SELECT class
            FROM ships LEFT JOIN outcomes ON ships.name=outcomes.ship
            WHERE result=’sunk’ AND ships.name NOT IN
            (
            SELECT class
            FROM classes LEFT JOIN outcomes ON classes.class=outcomes.ship
            WHERE result=’sunk’
            )
            ) x1
            group by class
            ) c1
            using(class)

            Задание: 57

            Текст задания:
            Для классов, имеющих потери в виде потопленных кораблей и не менее 3 кораблей в базе данных, вывести имя класса и число потопленных кораблей.
            Решение :

            SELECT class, COUNT(result) AS sunk
            FROM (
            SELECT class, result
            FROM Ships LEFT JOIN
            Outcomes ON ship=name AND
            result = ‘sunk’ AND
            not(name=class)
            union all
            SELECT distinct class, result
            FROM Classes
            JOIN Outcomes
            ON and result=’sunk’
            ) T
            GROUP BY class
            HAVING COUNT(class) > 2 AND
            COUNT(result) > 0

            Задание: 58

            Текст задания:
            Для каждого типа продукции и каждого производителя из таблицы Product c точностью до двух десятичных знаков найти процентное отношение числа моделей данного типа данного производителя к общему числу моделей этого производителя.
            Вывод: maker, type, процентное отношение числа моделей данного типа к общему числу моделей производителя.
            СУБД : MSSQL.
            Решение :

            SELECT m, t,
            CAST(100.0*cc/cc1 AS NUMERIC(5,2))
            from
            (SELECT m, t, sum(c) cc from
            (SELECT distinct maker m, ‘PC’ t, 0 c from product
            union all
            SELECT distinct maker, ‘Laptop’, 0 from product
            union all
            SELECT distinct maker, ‘Printer’, 0 from product
            union all
            SELECT maker, type, count(*) from product
            group by maker, type) as tt
            group by m, t) tt1
            JOIN (
            SELECT maker, count(*) cc1 from product group by maker
            ) tt2
            ON m=maker

            Задание: 59

            Текст задания:
            Посчитать остаток денежных средств на каждом пункте приема для базы данных с отчетностью не чаще одного раза в день.
            Вывод : пункт , остаток .
            СУБД : MSSQL.
            Решение :

            SELECT c1, c2-
            (CASE
            WHEN o2 is null THEN 0
            ELSE o2
            END)
            from
            (SELECT point c1, sum(inc) c2 FROM income_o
            group by point) as t1
            left join
            (SELECT point o1, sum(out) o2 FROM outcome_o
            group by point) as t2
            on c1=o1

            Задание: 60

            Текст задания:
            Посчитать остаток денежных средств на начало дня 15/04/01 на каждом пункте приема для базы данных с отчетностью не чаще одного раза в день.
            Вывод: пункт, остаток.
            Замечание. Не учитывать пункты, информации о которых нет до указанной даты.
            СУБД : MSSQL.
            Решение :

            SELECT c1, c2-
            (CASE
            WHEN o2 is null THEN 0
            ELSE o2
            END)
            from
            (SELECT point c1, sum(inc) c2 FROM income_o
            where date group by point) as t1
            left join
            (SELECT point o1, sum(out) o2 FROM outcome_o
            where date group by point) as t2
            on c1=o1

            Задание: 61

            Текст задания:
            Посчитать остаток денежных средств на всех пунктах приема для базы данных с отчетностью не чаще одного раза в день.
            СУБД : MSSQL.
            Решение :

            SELECT sum(inc)-(SELECT sum(out) FROM Outcome_o) FROM Income_o

            Задание: 62

            Текст задания:
            Посчитать остаток денежных средств на всех пунктах приема на начало дня 15/04/01 для базы данных с отчетностью не чаще одного раза в день.
            СУБД : MSSQL.
            Решение :

            SELECT
            (SELECT sum(inc) FROM Income_o WHERE date <'2001-04-15')

            (SELECT sum(out) FROM Outcome_o WHERE date <'2001-04-15')
            AS remain

            Задание: 63

            Текст задания:
            Определить имена разных пассажиров, когда-либо летевших на одном и том же месте более одного раза.
            Решение :

            SELECT name FROM Passenger
            WHERE ID_psg in
            (SELECT ID_psg FROM Pass_in_trip
            GROUP BY place, ID_psg
            HAVING count(*)>1)

            Задание: 64

            Текст задания:
            Используя таблицы Income и Outcome, для каждого пункта приема определить дни, когда был приход, но не было расхода и наоборот.
            Вывод: пункт, дата, тип операции (inc/out), денежная сумма за день.
            СУБД: MSSQL.
            Решение :

            SELECT i1.point, i1.date, ‘inc’, sum(inc) FROM Income,
            (SELECT point, date FROM Income
            EXCEPT
            SELECT Income.point, Income.date FROM Income
            JOIN Outcome ON (Income.point=Outcome.point) AND
            (Income.date=Outcome.date)
            ) AS i1
            WHERE i1.point=Income.point AND i1.date=Income.date
            GROUP BY i1.point, i1.date
            UNION
            SELECT o1.point, o1.date, ‘out’, sum(out) FROM Outcome,
            (SELECT point, date FROM Outcome
            EXCEPT
            SELECT Income.point, Income.date FROM Income
            JOIN Outcome ON (Income.point=Outcome.point) AND
            (Income.date=Outcome.date)
            ) AS o1
            WHERE o1.point=Outcome.point AND o1.date=Outcome.date
            GROUP BY o1.point, o1.date

            Задание: 65

            Текст задания:
            Пронумеровать уникальные пары из Product, упорядочив их следующим образом:
            — имя производителя (maker) по возрастанию;
            — тип продукта (type) в порядке PC, Laptop, Printer.
            Если некий производитель выпускает несколько типов продукции, то выводить его имя только в первой строке;
            остальные строки для ЭТОГО производителя должны содержать пустую строку символов (»).
            СУБД : MSSQL.
            Решение :

            SELECT row_number() over(ORDER BY maker,s),t, type FROM
            (SELECT maker,type,
            CASE
            WHEN type=’PC’
            THEN 0
            WHEN type=’Laptop’
            THEN 1
            ELSE 2
            END AS s,
            CASE
            WHEN type=’Laptop’ AND (maker in (SELECT maker FROM Product WHERE
            type=’PC’))
            THEN »
            WHEN type=’Printer’ AND ((maker in (SELECT maker FROM Product WHERE
            type=’PC’)) OR (maker in (SELECT maker FROM Product WHERE
            type=’Laptop’)))
            THEN »
            ELSE maker
            END AS t
            FROM Product
            GROUP BY maker,type) AS t1
            ORDER BY maker, s

            Задание: 66

            Текст задания:
            Для всех дней в интервале с 01/04/03 по 07/04/03 определить число рейсов из Rostov.
            Вывод : дата , количество рейсов .
            СУБД : MSSQL.
            Решение :

            SELECT date, max(c) FROM
            (SELECT date,count(*) AS c FROM Trip,
            (SELECT trip_no,date FROM Pass_in_trip WHERE date>=’2003-04-01′ AND date WHERE Trip.trip_no=t1.trip_no AND town_from=’Rostov’
            GROUP BY date
            UNION ALL
            SELECT ‘2003-04-01’,0
            UNION ALL
            SELECT ‘2003-04-02’,0
            UNION ALL
            SELECT ‘2003-04-03’,0
            UNION ALL
            SELECT ‘2003-04-04’,0
            UNION ALL
            SELECT ‘2003-04-05’,0
            UNION ALL
            SELECT ‘2003-04-06’,0
            UNION ALL
            SELECT ‘2003-04-07’,0) AS t2
            GROUP BY date

            Задание: 67

            Текст задания:
            Найти количество маршрутов, которые обслуживаются наибольшим числом рейсов.
            Замечания.
            1) A – B и B – A считать РАЗНЫМИ маршрутами.
            2) Использовать только таблицу Trip.
            СУБД : MSSQL.
            Решение :

            select count(*) from
            (SELECT TOP 1 WITH TIES count(*) c, town_from, town_to from trip
            group by town_from, town_to
            order by c desc) as t

            Задание: 68

            Текст задания:
            Найти количество маршрутов, которые обслуживаются наибольшим числом рейсов.
            Замечания.
            1) A – B и B – A считать ОДНИМ И ТЕМ ЖЕ маршрутом.
            2) Использовать только таблицу Trip.
            СУБД : MSSQL.
            Решение :

            select count(*) from (
            select TOP 1 WITH TIES sum(c) cc, c1, c2 from (
            SELECT count(*) c, town_from c1, town_to c2 from trip
            where town_from>=town_to
            group by town_from, town_to
            union all
            SELECT count(*) c,town_to, town_from from trip
            where town_to>town_from
            group by town_from, town_to
            ) as t
            group by c1,c2
            order by cc desc
            ) as tt

            Задание: 72

            Текст задания:
            Среди тех, кто пользуется услугами только какой-нибудь одной компании, определить имена разных пассажиров, летавших чаще других.
            Вывести : имя пассажира и число полетов .
            СУБД : MSSQL.
            Решение :

            select TOP 1 WITH TIES name, c3 from passenger
            join
            (select c1, max(c3) c3 from
            (
            select pass_in_trip.ID_psg c1, Trip.ID_comp c2, count(*) c3 from pass_in_trip
            join trip on trip.trip_no=pass_in_trip.trip_no
            group by pass_in_trip.ID_psg, Trip.ID_comp
            ) as t
            group by c1
            having count(*)=1) as tt
            on ID_psg=c1
            order by c3 desc

            Задание: 92

            Текст задания:
            Выбрать все белые квадраты, которые окрашивались только из баллончиков,
            пустых к настоящему времени.
            Вывести имя квадрата .
            СУБД :
            Решение :

            SELECT Q_NAME FROM utQ
            WHERE Q_ID in
            (SELECT B_Q_ID FROM utB
            WHERE B_V_ID IN
            (SELECT V_ID FROM utV, utB
            WHERE V_ID=B_V_ID
            GROUP BY V_ID
            HAVING sum(B_VOL)=255)
            GROUP BY B_Q_ID
            HAVING sum(B_VOL)=255*3)

            Get it on Google Play

            Rainbow Circles для Twitter
            Rainbow Circles. Нескучная радуга для TwitterAnother fun rainbow interaction circle generator for Twitter!

            ��Rainbow Circles — This is a program for generating your social circle on Twitter Find your best friends on Twitter Create your own Twitter social circle and post it. How do I post a circle on Twitter? — On the main screen of the application, enter your Twitter username, you can also specify the name of another user; — Click on the «Generate» button; — If the user exists, as well as there is access to the Internet, the program will start collecting information on the specified user: user activity history, likes, reply, retweets The program does not require Twitter authorization! — Official Twitter API is used — Note: This tool is not directly related to the Twitter service. Please do not use the program if you do not understand its purpose.
            Еще один нескучный генератор радужного круга взаимодействия для твиттер!

            ��RainbowCircles — Это программа для генерации вашего круг общения в социальной сети Twitter
            Найдите своих лучших друзей в Twitter
            Создайте свой собственный круг общения в Twitter и опубликуйте его.

            Как опубликовать круг взаимодействия в Twitter?
            — На главном экране приложения укажите свой никнейм пользователя из сети Twitter, также можно указать имя другого пользователя;
            — Нажмите на кнопку «Generate»;
            — Если пользователь существует, а так же есть доступ к сети интернет, программа начнет собирать информацию по указанному пользователю:
            историю пользовательской активности, лайки, reply, ретвиты

            Программа не требует авторизации в Twitter!

            — Используются официальный Twitter API
            — Внимание: этот инструмент не имеет прямого отношения к сервису Twitter.

            Пожалуйста, не используйте программу, если вы не понимаете ее назначения.
            Если наше приложение окажется для вас полезным, поставьте нам оценку ����������

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *