SQL 基础面试题☆☆☆排序删除创建临时表等等

Posted 平凡加班狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 基础面试题☆☆☆排序删除创建临时表等等相关的知识,希望对你有一定的参考价值。

SQL 基础语法面试题

表设计如下:

域名数据型态字段说明备注
ClassVarchar班级PK
NoVarchar学生学号PK
NameVarchar学生姓名
Managervarchar是否为班干部 Y: 是 N:不是
域名数据型态字段说明备注
ClassVarchar班级PK
NoVarchar学生学号PK
MathsFloat数学成绩
ChineseFloat语文成绩
EnglishFloat英文成绩

1.列出所有班级的班干部的成绩数据, 格式如下: 班级, 学生学号, 学生姓名, 数学成绩, 语文成绩, 英文成绩, 总分(total), 并按总分从高到低排序

答:
我先整这么一些数据,方便测试

第1题的答案就渐渐浮出水面了
在公司里面其实还需要我们快速,所以不仅仅是这样慢慢分析完就完了,还得慢慢熟能生巧
列出所有班级的班干部的成绩数据, 格式如下: 班级, 学生学号, 学生姓名, 数学成绩, 语文成绩, 英文成绩, 总分(total), 并按总分从高到低排序

注意排序的时候默认是asc 即从低到高

2.新增一名同学的基本资料 (Student)字段数据==> Class: A1; No : 0004 ; Name: 陈晨; Manager : N


3.更新学生成绩资料文件 (Grade) 将班级为1班, 学号为0002和0003的两位同学的英文成绩(English)更新为 87.5(以一SQL语法列出)



【加深】:假设 grade表里面没有班级号(Class),需要联合另外一张student表才能查询出来对应的数据
加深后,这道题是重点,因为我想了半天没想出来怎么写,其实是思路混乱了,其实还是很简单,先查出来


上图这个就是思路混乱的结果,想复杂了,其实很简单
我们最后更新的还是grade这个成绩表,只是我们前面查询的那段sql改一下而已,
后面更新语句的骨架是没变的,甚至可以说后面这个更新语句根本没变


最终结果:

猜测是不能在 in 后面 的括号里面还有where等查询
临时表可以解决这个问题 或者,一段一段来写,不要一起执行也可以
我们用一下临时表来解决这个问题

4.删除学生基本资料文件(Student)中所有姓陈的同学数据(例: 陈晨, 陈峰等都是属于此范围)

mysql删除语句:

1delete删除一行:delete from student where id=12delete删除多行:delete from student where in (1,2,3)33、删除表的所有数据:delete from student,请使用不带where子句的delete语句


解决办法,创建临时表

5.列出学生成绩资料(Grade) 条件: 班级为1班且学号大于0002 或 班级为2班且学号大于0003 (以一SQL语法列出)

完整代码如下:

select * from student s ,Grade g WHERE s.`No`=g.`No` and s.Manager="Y"

select * from student s ,Grade g WHERE s.`No`=g.`No` and s.Manager="Y"


select * from student s ,Grade g WHERE s.`No`=g.`No` and s.Manager="Y" and s.`Name`='李亮'

select sum(g.Maths,g.English,g.Chinese) from student s ,Grade g WHERE s.`No`=g.`No` and s.Manager="Y" and s.`Name`='李亮'

-- 第1题:列出所有班级的班干部的成绩数据, 格式如下: 班级, 学生学号, 学生姓名, 数学成绩, 语文成绩, 英文成绩, 总分(total), 并按总分从高到低排序
select  s.class'班级',
				s.`No`'学生学号',
				s.`Name` '学生姓名',
				g.Maths '数学成绩',
				g.Chinese'语文成绩',
				g.English '英语成绩',
			  g.Maths+g.English+g.Chinese as '总分' 
from student s ,Grade g WHERE s.`No`=g.`No` and s.Manager="Y" 
ORDER BY 总分 

-- 2.新增一名同学的基本资料 (Student)字段数据==> Class: A1;  No : 0004 ;   Name: 陈晨;    Manager : N
SELECT * FROM student
insert into student(cLASS,No,Name,ManageR) VALUES("A1","0007","陈晨","N")

-- ## 3.更新学生成绩资料文件 (Grade) 将班级为1班, 学号为0002和0003的两位同学的英文成绩(English)更新为 87.5(以一SQL语法列出)
select  DISTINCT * from student s ,grade g 
where s.`No`=g.`No` and g.Class= '1班' 
and (g.`No` = '0002' or g.`No`='0003')

update (select  DISTINCT * from student s ,grade g 
where s.`No`=g.`No` and g.Class= '1班' 
and (g.`No` = '0002' or g.`No`='0003')) as t
set  t.English==87


-- ## 4.删除学生基本资料文件(Student)中所有姓陈的同学数据(例: 陈晨, 陈峰等都是属于此范围)

delete from student s
where s.`Name` in 
(select s1.Name FROM student s1  where s1.`Name` like '陈%' )

-- 解决办法:创建临时表
create table tmp as (select s1.Name FROM student s1  where s1.`Name` like '陈%' )

delete from student
where Name in
(select * from tmp)

drop table IF EXISTS tmp


--- ## 5.列出学生成绩资料(Grade) 条件: 班级为1班且学号大于0002 或 班级为2班且学号大于0003 (以一SQL语法列出)

select * from grade g 
where (g.Class='1班' and g.`No`>'0002')
or(g.Class='2班' and g.`No`>'0003')





























以上是关于SQL 基础面试题☆☆☆排序删除创建临时表等等的主要内容,如果未能解决你的问题,请参考以下文章

显式删除临时表或让SQL Server处理它

SQL怎么创建一个临时表

Hive面试题

面试题:合并两个已排序的单链表而不创建新节点

面试题

事务特性(4道面试题)