Информация
Никак не могу решить задачу по 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.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)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.Пожалуйста, не используйте программу, если вы не понимаете ее назначения.
Если наше приложение окажется для вас полезным, поставьте нам оценку
- ▼апреля (121)