SQL ZOO我的答案4之子查詢

4、找出哪些國家的人口是高於歐洲每一國的人口。

     留意,我們是找高於歐洲每一個單一國家的人口,不是歐洲各國合計的全部總人口。

       SELECT name FROM world WHERE population > ALL (SELECT population FROM world WHERE continent='Europe')

1、列出每個國家的名字 name,當中人口 population 是高於俄羅斯'Russia'的人口。

      SELECT name FROM world WHERE population > (SELECT population FROM world WHERE name='Russia')

2、列出歐州每國家的人均GDP,當中人均GDP要高於英國'United Kingdom'的數值。

      SELECT name FROM world  WHERE continent='Europe' AND gdp/population>(SELECT gdp/population FROM world WHERE name='United Kingdom') 

3、在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序

       SELECT name, continent FROM world WHERE continent IN(SELECT continent FROM world WHERE name IN('Argentina','Australia')) ORDER BY name

4、哪一個國家的人口比加拿大Canada的多,但比波蘭Poland的少?列出國家名字name和人口population 。

      SELECT name, population FROM world WHERE population >(SELECT population FROM world WHERE name ='Canada') AND population <(SELECT population FROM world WHERE name ='Poland')

5、Germany德國(人口8000萬),在Europe歐洲國家的人口最多。Austria奧地利(人口850萬)擁有德國總人口的11%。

      顯示歐洲的國家名稱name和每個國家的人口population。以德國的人口的百分比作人口顯示。

      小數位數

      您可以使用函數ROUND 刪除小數。

      百分號 %

      您可以使用函數 CONCAT 增加的百分比符號。

      SELECT name, CONCAT (ROUND(population/(SELECT population FROM world WHERE name='Germany')*100),'%') FROM world WHERE continent='Europe'

6、哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDPNULL,沒有填入資料的。)

      SELECT name FROM world WHERE gdp>ALL(SELECT gdp FROM world WHERE continent ='Europe' AND gdp>0)

7、在每一個州中找出最大面積的國家,列出洲份 continent, 國家名字 name 及面積 area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)

      SELECT continent, name, area FROM world x WHERE area >= ALL (SELECT area FROM world y WHERE y.continent=x.continent AND area >0);

      (理解成两个嵌套的for循环,y.continent=x.continent保证两个比较的对象在同一个洲份,也就是说对同一个洲份的进行一轮操作)

8、列出洲份名稱,和每個洲份中國家名字按字母順序是排首位的國家名。(即每洲只有列一國)

      SELECT continent,name FROM world x WHERE x.name=(SELECT y.name FROM world y WHERE     y.continent=x.continent ORDER BY name LIMIT 1); 直接在子查询里面取每个洲里国家名字的字母排序最小的一个国家名字

      LIMIT用法:sql语句根据条件查询指定数量的数据

      SELECT * form 表名 WHERE 条件 limit m,n; //检索m+1到m+n条数据

      SELECT * form 表名 WHERE 条件 limit m,-1; //检索m+1到最后一条数据

      SELECT * form 表名 WHERE 条件 limit x; //检索前x条数据                              

      或者

      SELECT continent,name FROM world a WHERE name <= ALL(SELECT name from world b WHERE a.continent = b.continent ) ;从外部取名字的字母排序最小的国家

9、找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字namecontinent 洲份和population人口。

      SELECT name,continent,population FROM world x WHERE 25000000>=ALL(SELECT population FROM world y WHERE y.continent=x.continent AND population>0);

10、有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent。

      SELECT name,continent FROM world x WHERE x.population / 3 >= ALL(SELECT population FROM world y WHERE y.continent = x.continent AND population >0 AND y.name != x.name );符合条件的国家它的人口不会满足题目要求,所以要去掉,此处若不带y.name != x.name 条件,得不到任何结果

     (一般遇到“所有”,考虑ALL,想办法将ALL放到子查询前。注意:有些情况需要去除某条件为空,或者外查询和子查询重复的情况)

 

1、紅十字國際委員會 (International Committee of the Red Cross) 曾多次獲得和平獎。 試找出與紅十字國際委員會同年得獎的文學獎(Literature)得獎者和年份。

      SELECT winner,yr FROM nobel where yr IN (SELECT yr FROM nobel WHERE  winner = 'International Committee of the Red Cross' AND subject='Peace') AND subject='Literature';

2、日本物理學家益川敏英 (Toshihide Maskawa) 曾獲得物理獎。同年還有兩位日本人一同獲得物理獎。試列出這2位日本人的名稱。

      SELECT winner FROM nobel WHERE subject='Physics' AND yr IN (SELECT yr FROM nobel WHERE winner = 'Toshihide Maskawa'  AND subject='Physics') AND winner!='Toshihide Maskawa' 

3、首次頒發的經濟獎 (Economics)的得獎者是誰?

      SELECT winner FROM nobel WHERE yr <=ALL(SELECT yr FROM nobel WHERE subject='Economics') AND subject='Economics'

      或者
      SELECT winner FROM nobel where yr= (SELECT yr FROM nobel WHERE subject='Economics' ORDER BY yr LIMIT 1) AND subject='Economics'

4、哪幾年頒發了物理獎,但沒有頒發化學獎?

      SELECT DISTINCT(a.yr) FROM nobel a where 'Physics' IN (SELECT subject FROM nobel b WHERE a.yr=b.yr) AND 'Chemistry' NOT IN (SELECT subject FROM nobel b WHERE a.yr=b.yr);

      或者

      SELECT DISTINCT yr FROM nobel WHERE subject='Physics' AND yr NOT IN(SELECT yr FROM nobel where subject='Chemistry')

5、哪幾年的得獎者人數多於12人呢? 列出得獎人數多於12人的年份,獎項和得獎者。

      SELECT * FROM nobel WHERE yr in(SELECT yr FROM nobel GROUP BY yr HAVING COUNT(winner)>12);

      (SELECT "栏位1", SUM("栏位2") FROM "表格名" GROUP BY "栏位1";  不能查别的,只能查找GROUP BY 的栏位

where肯定在group by 之前。where后的条件表达式里不允许使用聚合函数,因为select语句执行在where之后,而having可以。  )

6、哪些得獎者獲獎多於1次呢?他們是哪一年獲得哪項獎項呢? 列出他們的名字,獲獎年份及獎項。先按名字,再按年份順序排序。

      SELECT winner,yr,subject FROM nobel WHERE winner IN (SELECT winner FROM nobel GROUP BY winner HAVING COUNT(winner)>1) ORDER BY winner,yr;

猜你喜欢

转载自blog.csdn.net/JaneHuang1/article/details/83149547