首页 > 试题广场 >

关于下面的sql语句,描述正确的是有两张表Area和City

[单选题]
关于下面的sql语句,描述正确的是

有两张表AreaCity的数据分别为:
Area
ID Name
1 North
2 South
3 East
4 West

City
ID Name AreaID
1 北京 1
2 上海 2
3 广州 3
4 深圳 4

执行如下sql

select * from City left join Area on City.AreaID = Area.ID where Area.ID>0 group by Area.ID having count(Region)>0 order by count(Region) desc limit 1;



  • 该SQL执行会形成City和Area两表的笛卡尔积

  • 该语句执行顺序上,会先执行where再执行having再执行order by最后执行limit
  • 该语句执行顺序上,会先执行from,再执行join,再执行where
  • select * from City left join Area on City.AreaID = Area.ID 和select * from City inner join Area on City.AreaID = Area.ID这两条SQL语句执行的结果是不同的
(1)from 
(3) join 
(2) on 
(4) where 
(5)group by(开始使用select中的别名,后面的语句中都可以使用)
(6) avg,sum.... 
(7)having 
(8) select 
(9) distinct 
(10) order by 

从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。 
第一步:首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表 vt1(选择相对小的表做基础表) 
第二步:接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 
第三步:如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3
发表于 2022-01-24 11:12:34 回复(0)
C为什么不对?因为选项写的不是left join?
发表于 2021-07-19 13:16:48 回复(2)
不该是用from把表选出来再where吗?

发表于 2021-08-19 10:56:55 回复(0)
链接:https://www.nowcoder.com/questionTerminal/487f81072e8c42de95eeab0ca3a239c7?orderByHotValue=1&page=1&onlyReference=false
来源:牛客网
select * from City 
left join Area on City.AreaID = Area.ID 
where Area.ID>0 group by Area.ID having count(Region)>0
order by count(Region) desc 
limit 1;
发表于 2021-07-19 20:39:18 回复(0)