SQLZOO - 嵌套SELECT笔记

本次教程,关于「SELECT 」之中的 「SELECT 」,是更复杂的查询语句。

示例的数据表World:

  1. 查询:人口比俄罗斯多的国家
world(name, continent, area, population, gdp)

示例

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

答案:

SELECT name FROM world
  WHERE population >
     (SELECT population FROM world
      WHERE name='Russia')
  1. 查询:人均 GDP比英国高的欧洲国家

示例——无

答案

SELECT name
FROM world
WHERE continent='Europe'
AND gdp/population >
        (SELECT gdp/population FROM world
        WHERE name='United Kingdom' )
  1. 查询: 阿根廷和澳大利亚的邻国们

按照上述 2 个国家所在的大洲,选择筛选国家,并依据国名的按照英文字母排序

答案

SELECT name,continent
FROM world
WHERE continent=
        (SELECT continent FROM world
        WHERE name='Argentina' 
         )
OR continent=
        (SELECT continent FROM world
        WHERE name='Australia' 
         )
ORDER BY name ASC;
  1. 查询: 人口数量介于加拿大与波兰之间的国家

答案

SELECT name,population
FROM world
WHERE population>
        (SELECT population FROM world
        WHERE name='Canada' 
         )
AND population<
        (SELECT population FROM world
        WHERE name='Poland' 
         )
  1. 查询: 欧洲其他国家的人口,达到德国人口(欧洲人口最多)的百分之几?

答案

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

ALL子句

查询例子:世界上人口最大的国家是?

SELECT name
  FROM world
 WHERE population >= ALL(SELECT population
                           FROM world
                          WHERE population>0)

因为有些国家的人口数据是 null,所欲需要子查询语句population>0

  1. 查询: 欧洲之外的哪些国家,GDP 指数超过欧洲所有的国家?

答案

SELECT name
FROM world
WHERE continent!='Europe'
AND gdp >= ALL(SELECT gdp
                           FROM world
                           WHERE gdp>0
                           AND continent='Europe' )
  1. 查询: 每个大洲板块,面积最大的国家名称是?

示例

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

答案

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

上述查询语句,使用了correlated or synchronized 语句

  1. 查询: 每个大洲,按照字母排序的第一个国家是?

示例——无

答案

SELECT continent, name
FROM world x
WHERE name= 
(SELECT name FROM world y
WHERE y.continent=x.continent
ORDER BY name ASC LIMIT 1)

注意:LIMIT 1子句

  1. 查询: 哪个大洲里,所有国家的人口总数都小于25000000?

示例——无

答案

SELECT name, continent, population 
FROM world x
WHERE NOT EXISTS (                 
   SELECT *
   FROM world y
   WHERE y.continent = x.continent 
   AND y.population > 25000000     
   );

注意:LIMIT 1子句

  1. 查询: 哪些国家的人口比同一大洲的所有国家的人口的三倍以上?

示例——无

答案

SELECT name, continent
FROM world AS x
WHERE population/3 > ALL (
  SELECT y.population
  FROM world AS y
  WHERE x.continent = y.continent
  AND x.name != y.name);

注意:LIMIT 1子句

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,472评论 0 4
  • 实践: 1.技能框架-思维导图 2.清单-规划好时间 3.操作-习题的方式 4.文档-历史,部署,功能介绍,基本管...
    格局_2f35阅读 259评论 0 0
  • 关系型数据库和SQL SQL语言的三个部分DML:Data Manipulation Language,数据操纵语...
    Awey阅读 2,095评论 0 13
  • MySQL高级SQL操作 数据新增多数据插入蠕虫复制主键冲突 查询数据查询选项别名数据源where子句group ...
    Ly3911阅读 831评论 0 0
  • 此篇续接上篇时光社《菜根谭》书评会 一 的内容。【调皮】 杨扬: 菜根谭读后感 时光社吴凡 简书作者 2019-0...
    杨扬_ef6a阅读 513评论 0 2

友情链接更多精彩内容