SQL ZOO我的答案2之SELECT from World

本文精选了一系列实用的SQL查询技巧,涵盖了从基本的国家名称和人口查询,到复杂的条件筛选和数据格式转换。通过具体示例,如找出人口超过2亿的国家、显示南美洲国家的详细经济数据、以及特殊条件下的大国定义等,展示了如何灵活运用SQL语句解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT from World

3、找出有至少200百萬(2億)人口的國家名稱,及人均國內生產總值。

      SELECT name,gdp/population FROM world WHERE population>200000000;

4、顯示'South America'南美洲大陸的國家名字和以百萬為單位人口數。

      SELECT name,population/1000000 FROM world WHERE continent = 'South America';

5、顯示法國,德國,意大利(France, Germany, Italy)的國家名稱和人口。

      SELECT name,population FROM world WHERE name IN('France','Germany','Italy');

6、包含單詞“United”為名稱的國家。

      SELECT name FROM world WHERE name LIKE '%United%';

7、為大國的兩種方式:如果它有3百萬平方公里以上的面積,或擁有250百萬(2.5億)以上人口。 展示大國的名稱,人口和面積

      SELECT name,population,area FROM world WHERE area>3000000 OR population>250000000;

8、美國、印度和中國(USA, India, China)是人口又大,同時面積又大的國家。排除這些國家。

      顯示以人口或面積為大國的國家,但不能同時兩者。顯示國家名稱,人口和面積。

      SELECT name,population,area FROM world WHERE name NOT IN ('United States', 'India', 'China') AND ((area > 3000000 AND population <= 50000000) OR (area <= 000000 AND population > 250000000));

      或者

      SELECT name,population,area FROM world WHERE (area>=3000000 OR population >=250000000) AND NOT name IN (SELECT name FROM world WHERE area>=3000000 AND population >=250000000);

9、對於南美顯示以百萬計人口,以十億計2位小數GDP。

      SELECT name, ROUND(population/1000000,2),ROUND(gdp/1000000000,2) FROM world WHERE continent = 'South America';

10、顯示萬億元國家的人均國內生產總值,四捨五入到最近的$ 1000。

      SELECT name,ROUND(gdp/population,-3)FROM world WHERE gdp>1000000000000;

11、Show the name - but substitute Australasia for Oceania - for countries beginning with N.

      SELECT name

      ,CASE WHEN continent='Oceania' THEN 'Australasia'

      ELSE continent

      END

      FROM world

      WHERE name LIKE 'N%';

12、Show the name and the continent - but substitute Eurasia for Europe and Asia; substitute America - for each country in North America or South America or Caribbean. Show countries beginning with A or B.

      SELECT name,

      CASE WHEN continent IN('Europe','Asia')

                 THEN 'Eurasia'

                 WHEN continent IN('North America','South America','Caribbean')

                 THEN 'America'

     ELSE continent END

      FROM world

      WHERE name LIKE 'A%' OR name LIKE 'B%';

13、Put the continents right...

Oceania becomes Australasia

Countries in Eurasia and Turkey go to Europe/Asia

Caribbean islands starting with 'B' go to North America, other Caribbean islands go to South America

Show the name, the original continent and the new continent of all countries.

      SELECT name,continent,

      CASE  WHEN continent = 'Oceania'

                  THEN 'Australasia'

                  WHEN continent IN ('Eurasia', 'Turkey')

                  THEN 'Europe/Asia'

                  WHEN continent = 'Caribbean' AND name LIKE 'B%'

                  THEN 'North America' 

                  WHEN continent = 'Caribbean' THEN 'South America'

                  ELSE continent

                  END

      FROM world

      ORDER BY name ASC;(按字母排序了)

或者

      SELECT name,continent,

      CASE WHEN continent IN ('Eurasia', 'Turkey')

                 THEN 'Europe/Asia'

                 WHEN continent = 'Oceania'

                THEN 'Australasia'

                 WHEN continent = 'Caribbean'

                THEN

                 CASE

                    WHEN name LIKE 'B%'

                    THEN 'North America'

                    ELSE 'South America'

                   END(叠加了,理解成if。。。else。。。)

      ELSE continent

      END

      FROM world

      ORDER BY name ASC;

      (此处ORDER BY name ASC是参考别人的)

### SQLZOO JOIN 练习解答 在处理数据库查询时,`JOIN` 是一种用于组合来自两个或多个表的数据的重要工具。对于 `LEFT JOIN` 和 `RIGHT JOIN` 的区别,在某些情况下,选择合适的连接方式可以极大地影响查询的结果集。 #### 左连接 (LEFT JOIN) 左连接返回左表中的所有记录以及右表中存在的匹配记录。如果右表中不存在匹配,则结果集中相应的列将包含 NULL 值[^1]。 ```sql SELECT A.column_name, B.column_name FROM TableA AS A LEFT JOIN TableB AS B ON A.common_field = B.common_field; ``` #### 右连接 (RIGHT JOIN) 右连接则相反,它会返回右表中的所有记录以及左表中存在的匹配记录。同样地,当左表缺少对应数据时,这些字段会被填充为 NULL。 ```sql SELECT A.column_name, B.column_name FROM TableA AS A RIGHT JOIN TableB AS B ON A.common_field = B.common_field; ``` 为了更好地理解如何应用这两种类型的联接操作,下面提供几个基于 SQLZOO 平台上的练习实例: ##### 示例 1: 查询世界人口超过五千五百万的国家及其所属大洲的人口总和 此问题可以通过执行内连接来解决,因为这里只需要考虑那些确实存在于两张表格内的条目;但是也可以通过其他形式的外键关联实现相同的功能。 ```sql SELECT continent, SUM(population) FROM world WHERE population > 55000000 GROUP BY continent; -- 或者使用 INNER JOIN 实现同样的效果 SELECT T1.continent, SUM(T2.population) FROM world AS T1 INNER JOIN world AS T2 ON T1.name = T2.name WHERE T2.population > 55000000 GROUP BY T1.continent; ``` ##### 示例 2: 列出欧洲各国首都名与所在国名 这个问题适合采用左连接的方式来进行求解,即使有些国家可能暂时还没有定义其首都城市也不会丢失该国的信息。 ```sql SELECT country.name, city.name FROM country LEFT JOIN city ON country.capital = city.id WHERE country.continent='Europe'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值