题解 | #浙江大学用户题目回答情况#

浙江大学用户题目回答情况

https://www.nowcoder.com/practice/55f3d94c3f4d47b69833b335867c06c1

select
    t1.device_id,
    qpd.question_id,
    qpd.result
from (
    select
      up.device_id
    from user_profile up
    where up.university = "浙江大学"
    ) as t1
left join question_practice_detail qpd on t1.device_id = qpd.device_id
order by qpd.question_id asc

因为涉及到SQL优化的问题, 所以具体列出来

方法一: 先用user_profile连接question_practice_detail然后再where进行过滤, 最后排序即可

1

2

3

4

5

6

7

8

select 

up.device_id,

qpd.question_id,

qpd.result

from user_profile up

left join question_practice_detail qpd on up.device_id=qpd.device_id

where university='浙江大学'

order by qpd.question_id asc

方法二: 先用where对表一进行过滤, 然后在连接question_practice_detail进行查询

1

2

3

4

5

6

7

8

9

10

11

select t1.device_id,

qpd.question_id,

qpd.result

from (

select 

up.device_id

from user_profile up

where up.university='浙江大学'

) t1

left join question_practice_detail qpd on t1.device_id=qpd.device_id

order by qpd.question_id asc

两种方法在执行层面上, 方法一先join, 在过滤查询, 当表一数据量大时, 查询效率会很慢;

方法二先降低表1的数据量, 再进行关联, 效率提升较大

但是注意: mysql自带的优化器会对方法一进行优化, 哪怕是按方法一提交的代码, 优化器也会先对表1过滤再关联查询. 

sql练习 文章被收录于专栏

记录练习过程

全部评论

相关推荐

MinGW_:直接投那个前端移动端就行,美团前端的岗位一直是叫这个名字的,哪怕是做内部系统只有网页没有移动端的组,招人的岗位也是这个名字
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务