嵌套查询

语法格式

  1. select 字段名列表 from 表名 where 字段名 运算符
  2. (select 字段名 from 表名 where 条件)

注意:外层的where的条件必须和内层的select查询的字段名一样,个数也一样
如:把攻击值小于平均攻击值的名字和攻击值显示出来(sanguo表)
我们可以分开来查,然后合并成一条语句
分析:查名字和攻击值,条件是攻击值小于平均攻击值;
第一步:先求平均值

  1. select avg(gongjizhi) from sanguo;
  2. 假设我们用avg记录查询出来的平均值

第二步:查找攻击值小于平均值的名字和攻击值

  1. select name, gongjizhi from sanguo where gongjizhi<avg;

第三步:将上边两条合并

  1. select name, gongjizhi from sanguo where gongjizhi<
  2. (select avg(gongjizhi) from sanguo);

在举个栗子:找出每个国家攻击力最高的英雄的名字和攻击值
第一步:按国家分组找出攻击最大的攻击值

  1. select max(gongjizhi) from sanguo
  2. group by country;

第二步:显示以上英雄的名字和攻击值

  1. select name, gongjizhi from sanguo where
  2. gongjizhi in (第一步的结果);

第三步:合并上两步

  1. select name, gongjizhi from sanguo
  2. where gongjizhi in
  3. (select max(gongjizhi) from sanguo
  4. grounp by country);

将第三步改进一下:

  1. select name, gongjizhi from sanguo
  2. where (country, gongjizhi) in
  3. (select country, max(gongjizhi) from sanguo
  4. group by country);

方法不止一种,当然有更优的写法,现在不涉及。