select s.name, c.country, o.battle 
-- each ship, its country, and the battle it was sunk in
from Ships s, Outcomes o, Classes c
where o.result = 'sunk'
and o.ship = s.name
and c.class = s.class;

select s1.name, s2.name, c1.country, s1.launched
-- each case of two ships from the same country launched the same year
from Ships s1, Ships s2, Classes c1, Classes c2
where s1.class = c1.class
and s2.class = c2.class
and c1.country = c2.country
and s1.launched = s2.launched
and s1.name < s2.name;

select s.name, c.country
-- each ship and its country, for which we have no record of the ship being sunk
from Ships s, Classes c
where s.class = c.class
and s.name not in (select o.ship from Outcomes o where o.result = 'sunk');

select s.name, c.country
-- each ship and its country, for which we have no record of the ship being sunk
from Ships s, Classes c
where s.class = c.class
and not exists
(select * from Outcomes o where o.result = 'sunk' and o.ship = s.name);

select s.name
-- each ship launched the latest year
from Ships s
where s.launched = (select max(s2.launched) from Ships s2);

select s.name
-- each ship launched the latest year
from Ships s
where s.launched >= ALL (select s2.launched from Ships s2);

select s.name
-- each ship launched the latest year
from Ships s
where NOT (s.launched < ANY (select s2.launched from Ships s2));

(select s.name from Ships s)
union -- all ships mentioned in either table
(select o.ship AS name from Outcomes o);

select *
-- information about outcomes completed, to the extent possible, with ship info
from Outcomes o LEFT OUTER JOIN Ships s
	ON o.ship = s.name;