SQL常见面试题目(多表联查)

对原文章:https://blog.youkuaiyun.com/hou_miao/article/details/78854470,https://blog.youkuaiyun.com/crazygolf/article/details/38989461  进行整理

 

一.学生表(学生id,姓名,性别,分数)student(s_id,name,sex,score)
班级表(班级id,班级名称)class(c_id,c_name)
学生班级表(班级id,学生id)student_class(s_id,c_id)(考察三表联查)
1.查询一班得分在80分以上的学生。

答:select * from student s where score > 80 and s.s_id in (select sid from student_class where c_id=(select c_id from class where c_name='一班' )

2.查询所有班级的名称,和所有班中女生人数和女生的平均分

答:select c.c_name,女生人数=sum(s.s_id),女生平均分=avg(s.score) from student  inner join student_class sc on s.s_id = sc.s_id  and inner join class c on sc.c_id = s.c_id where s.sex='女'

二.一道SQL语句面试题,关于group by表内容:(考察group by 和 case when )
info 表
date result
2005-05-09 win
2005-05-09 lose
2005-05-09 lose
2005-05-09 lose
2005-05-10 win
2005-05-10 lose
2005-05-10 lose
如果要生成下列结果, 该如何写sql语句?
         win lose
2005-05-09 2 2
2005-05-10 1 2
答:select date,sum(case when result='win' then 1 else 0 end) as 'win' ,sum(case when result='lose' then 1 else o end)as 'lose' from info group by date

三.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值