For the first:
You must share the work. Step one, find neighbors for the country. This should be an automatic connection:
SELECT * FROM bbc country INNER JOIN bbc neighbours ON country.region = neighbours.region AND country.name != neighbours.name
Do not forget to exclude your own country from your neighbors!
Secondly, you can calculate how many neighbors for the country have the right population:
sum(CASE WHEN country.population > neighbours.population * 3 THEN 1 ELSE 0 END) (Group by country !)
Compare with the results, and you're done!
SELECT countryName FROM ( SELECT sum(CASE WHEN country.population > neighbours.population * 3 THEN 1 ELSE 0 END) as okNeighbours, count(*) as totalNeighbours country.name as countryName FROM bbc country INNER JOIN bbc neighbours ON country.region = neighbours.region AND country.name != neighbours.name GROUP BY country.name ) WHERE totalNeighbours = okNeighbours
For the second:
SELECT name, region, population FROM bbc WHERE region IN ( SELECT region FROM bbc GROUP BY region HAVING SUM(CASE WHEN population >= 25000000 THEN 1 ELSE 0 END) = 0 )
source share