博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据分析sql面试必会6题经典_SQL面试经典50题(二)——6-10题解析
阅读量:6622 次
发布时间:2019-06-25

本文共 1673 字,大约阅读时间需要 5 分钟。

5e63baf2ed1eecf1f989025110f0d510.png

今天的问题如下:

  • 查询"李"姓老师的数量
  • 查询学过"张三"老师授课的同学的信息
  • 查询没学过"张三"老师授课的同学的信息
  • 查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
  • 查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

【问题6. 查询"李"姓老师的数量】

这道题很简单,不涉及多表连接,只需从Teacher表中查询,李姓老师即t_name中第一个字是李的数据,我们使用like语句即可做到

代码:

select count(1) from Teacherwhere t_name like '李%';

【问题7. 查询学过"张三"老师授课的同学的信息】

  • 将张三老师上过的课的c_id查询出来,作为子查询,查询的方法可以用join,也可以使用我下面的方法
  • student没有c_id字段,不能直接和子查询关联,所以需要先和score关联,这里使用join
  • 设定筛选条件,及c_id属于子查询范围内的,这里我使用in

代码:

select s.* from Student s join Score scon s.s_id = sc.s_idwhere sc.c_id in(select c_id from Teacher t , Course cwhere t.t_id = c.t_idand t_name = '张三');

【问题8. 查询没学过"张三"老师授课的同学的信息】

这道题有个思维上的陷阱,就是直接把上题的in改为not in,这样是不行的,因为一名学生可以选择多门课程,比如01同学选了张三的课也可能选了李四,使用not in一样会查询出来他,因此我们需要把范围扩大,即把学号不在上一题学号中的学生信息提取出来

代码:

select * from Student where s_id not in(select s.s_id from Student s join Score scon s.s_id = sc.s_idwhere sc.c_id in(select c_id from Teacher t , Course cwhere t.t_id = c.t_idand t_name = '张三') );

【题目9. 查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息】

这道题我的方法不是最简单的,但是我的代码改到第10题的代码只要加一个单词,所以看过这两道题的题目后,我觉得使用如下思路:

  • 查询出上过01课的s_id(使用join),作为第一个子查询
  • 查询出上过02课的s_id(使用join),作为第一个子查询
  • 查询同时在两个子查询都出现的s_id,逻辑判断用and,判断语句用where…in…

代码:

select * from Studentwhere s_id in(select s.s_idfrom Student s join Score scon s.s_id = sc.s_idwhere c_id = '01' )and s_id in(select s.s_idfrom Student s join Score scon s.s_id = sc.s_idwhere c_id = '02' ) ;

【题目10. 查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息】

这道题只需要把第9题第三步的where…in… and…in改为where…in… and…not in即可

代码:

select * from Studentwhere s_id in(select s.s_idfrom Student s join Score scon s.s_id = sc.s_idwhere c_id = '01' )and s_id not in(select s.s_idfrom Student s join Score scon s.s_id = sc.s_idwhere c_id = '02' ) ;

以上,欢迎指正

转载地址:http://skcpo.baihongyu.com/

你可能感兴趣的文章
Java NIO(七)Selector
查看>>
死磕 java同步系列之synchronized解析
查看>>
MirrorSwipeLayout:自定义Layout,仿MIUI滑动返回(已开源)
查看>>
前端面试
查看>>
在MAC上查看自定义的ttf字体图标对应的Unicode编码
查看>>
小程序开发总结
查看>>
重绘与回流
查看>>
kettle变量使用
查看>>
win10系统设置webp文件默认用照片查看器打开的两种方法
查看>>
使用阿里云发送邮件
查看>>
【神器】vscode常用插件与配置
查看>>
Tomcat监听器设计思路
查看>>
react native 入门之javascript
查看>>
各大官网的隐藏彩蛋,我感觉自己打开了新世界的大门...
查看>>
UIScrollView中使用AutoLayout
查看>>
Redux中间件 结合网络上的资料一些个人理解(我好菜,菜出翔,看大佬的分享依旧看不懂)...
查看>>
BeeHive - iOS模块化之路
查看>>
ESlint对于团队开发的重要性
查看>>
今天来给大家分享一个实际又有用的微信发长视频和语音的小功能。
查看>>
vue 提取ip地址并且配置eslintrc
查看>>