loading..
Русский    English
07:23
листать

Упражнение 121 стр. 2

Решение 3.5.2

Консоль
Выполнить
  1. SELECT name
  2. FROM Ships
  3. WHERE launched < 1941
  4. UNION
  5. SELECT ship
  6. FROM Outcomes, Battles
  7. WHERE name = battle AND
  8.       DATEPART(YEAR, date) < 1941
  9. UNION
  10. SELECT ship
  11. FROM Outcomes
  12. WHERE ship IN (SELECT class
  13.                FROM Ships
  14.                WHERE launched < 1941
  15.                );

Решение 3.5.2 учитывает:

  1. Корабли из таблицы Ships c известным годом спуска на воду до 1941 года.
  2. Корабли, которые принимали участие в сражениях до 1941 года (естественно, такие корабли должны были быть спущены на воду до сражения, в котором они принимали участие).
  3. Корабли из таблицы Outcomes, имена которых совпадает с именем класса какого-нибудь корабля из Ships, спущенного на воду до 1941 года.

Следует заметить, что возможные дубликаты устраняются использованием объединения посредством UNION.

Последний вариант учитывает и те случаи, когда головной корабль принимал участие в сражениях только после 1941 года, так как более ранние сражения учтены предыдущим запросом. Осталось выяснить, зачем это нужно. Ответ на этот вопрос следует искать в «висящих» головных кораблях. Итак, корабль из Outcomes, имя которого совпадает с именем одного из классов (головной корабль), отсутствует в таблице Ships или присутствует, но с неизвестным годом спуска на воду. Пусть в таблице Ships есть корабль того же класса с известным годом спуска на воду. Если этот год окажется меньше 1941, то головной корабль следует включать в результирующий набор наряду с упомянутым кораблем. Это следует из того факта, что головной корабль — это первый корабль в своем классе и, следовательно, должен был быть спущен на воду не позднее любого другого корабля своего класса.

Bookmark and Share
Страницы: 1 2 3 4
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100