1. 程式人生 > >MySQL練習4

MySQL練習4

來源於ZOO SQL, 整理關於表world的各種查詢:

1. Give the name and the per capita GDP for those countries with a population of at least 200 million. (per capita GDP is the GDP divided by the population GDP/population )
    select name, gdp / population from world where population > 200000000;
2. Show the name and population in millions for the countries of the continent 'South America'. Divide the population by 1000000 to get population in millions.     
    select name, population / 1000000 from world where continent = 'South America';
3. Show the name and population for France, Germany, Italy 
    select name, population from world where name in ('France', 'Germany', 'Italy');
4. Show the countries which have a name that includes the word 'United' 
    select name from world where name like '%United%';
5. Two ways to be big: A country is big if it has an area of more than 3 million sq km or it has a population of more than 250 million.
Show the countries that are big by area or big by population. Show name, population and area.
    select name from world where area > 3000000 or population > 250000000;
6. Exclusive OR (XOR). Show the countries that are big by area or big by population but not both. Show name, population and area.
    Australia has a big area but a small population, it should be included.
    Indonesia has a big population but a small area, it should be included.
    China has a big population and big area, it should be excluded.
    United Kingdom has a small population and a small area, it should be excluded.
    select name, population, area from world where (area > 3000000 and population <= 250000000) or (area <= 3000000 and population > 250000000);
7. how the name and population in millions and the GDP in billions for the countries of the continent 'South America'. Use the ROUND function to show the values to two decimal places.
For South America show population in millions and GDP in billions both to 2 decimal places.
Millions and billions
Divide by 1000000 (6 zeros) for millions. Divide by 1000000000 (9 zeros) for billions.
    select name, round(population / 1000000, 2), round(gdp / 1000000000, 2) from world where continent =  'South America';
8. Show the name and per-capita GDP for those countries with a GDP of at least one trillion (1000000000000; that is 12 zeros). Round this value to the nearest 1000.
Show per-capita GDP for the trillion dollar countries to the nearest $1000.
    select name, round(gdp / population, -3) from world where gdp > 1000000000000;
9. Greece has capital Athens.
Each of the strings 'Greece', and 'Athens' has 6 characters.
Show the name and capital where the name and the capital have the same number of characters.
    select name, capital from world where length(name) = length(capital);
10. The capital of Sweden is Stockholm. Both words start with the letter 'S'.
Show the name and the capital where the first letters of each match. Don't include countries where the name and the capital are the same word.
    select name, capital from world where left(name, 1) = left(capital, 1) and name != capital;
11. Equatorial Guinea and Dominican Republic have all of the vowels (a e i o u) in the name. They don't count because they have more than one word in the name.
Find the country that has all the vowels and no spaces in its name.
    SELECT name FROM world WHERE name not LIKE '% %' AND name LIKE '%a%' AND name LIKE '%e%' AND name LIKE '%i%' AND name LIKE '%o%' AND name LIKE '%u%';
12. Bahamas has three a - who else?
Find the countries that have three or more a in the name
    SELECT name FROM world WHERE length(name) - length(replace(lower(name), 'a', '')) >= 3;
13. The capital of Mexico is Mexico City. Show all the countries where the capital has the country together with the word "City".
Find the country where the capital is the country plus "City".
    SELECT name  FROM world WHERE concat(name, ' City') =  capital;
14. Find the capital and the name where the capital includes the name of the country.
    select capital, name from world where 0!= locate(name, capital);
15. Find the capital and the name where the capital is an extension of name of the country.
You should include Mexico City as it is longer than Mexico. You should not include Luxembourg as the capital is the same as the country. 
    select capital, name from world where 1 = locate(name, capital) and name != capital;
16. For Monaco-Ville the name is Monaco and the extension is -Ville.
Show the name and the extension where the capital is an extension of name of the country.
    select name, replace(capital, name, '') from world where 1 = locate(name, capital) and name != capital;
17. Germany (population 80 million) has the largest population of the countries in Europe. Austria (population 8.5 million) has 11% of the population of Germany.
Show the name and the population of each country in Europe. Show the population as a percentage of the population of Germany.
    select name, concat(round(population * 100 / (select population from world where name = 'Germany')), '%') from world where continent = 'Europe';
18. Which countries have a GDP greater than every country in Europe? [Give the name only.] (Some countries may have NULL gdp values) 
    select name from world where gdp > all(select gdp from world where continent = 'Europe' and gdp > 0);-- 在這個子查詢中,gdp可能為null,所以要加上gdp>0, 或者gdp is not null
19. List each continent and the name of the country that comes first alphabetically.
    select wo1.continent, wo1.name from world wo1 where wo1.name <= all(select wo2.name from world wo2 where wo1.continent = wo2.continent); -- 使用子查詢
20. Find the continents where all countries have a population <= 25000000. Then find the names of the countries associated with these continents. Show name, continent and population. 
    
select wo1.name, wo1.continent, wo1.population from world wo1 where wo1.continent in 
(
    select distinct wo2.continent from world wo2 where 25000000 >= all(select wo3.population from world wo3 where wo2.continent = wo3.continent) 
);
21. Some countries have populations more than three times that of any of their neighbours (in the same continent). Give the countries and continents.
    select wo1.name, wo1.continent from world wo1 where wo1.population > all(select wo2.population * 3 from world wo2 where wo1.continent = wo2.continent and wo1.name != wo2.name);