SQL 基础面试题☆☆☆排序删除创建临时表等等
Posted 平凡加班狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 基础面试题☆☆☆排序删除创建临时表等等相关的知识,希望对你有一定的参考价值。
SQL 基础语法面试题
文章目录
- SQL 基础语法面试题
- 表设计如下:
- 1.列出所有班级的班干部的成绩数据, 格式如下: 班级, 学生学号, 学生姓名, 数学成绩, 语文成绩, 英文成绩, 总分(total), 并按总分从高到低排序
- 2.新增一名同学的基本资料 (Student)字段数据==> Class: A1; No : 0004 ; Name: 陈晨; Manager : N
- 3.更新学生成绩资料文件 (Grade) 将班级为1班, 学号为0002和0003的两位同学的英文成绩(English)更新为 87.5(以一SQL语法列出)
- 4.删除学生基本资料文件(Student)中所有姓陈的同学数据(例: 陈晨, 陈峰等都是属于此范围)
- 5.列出学生成绩资料(Grade) 条件: 班级为1班且学号大于0002 或 班级为2班且学号大于0003 (以一SQL语法列出)
表设计如下:
域名 | 数据型态 | 字段说明 | 备注 |
---|---|---|---|
Class | Varchar | 班级 | PK |
No | Varchar | 学生学号 | PK |
Name | Varchar | 学生姓名 | |
Manager | varchar | 是否为班干部 Y: 是 N:不是 |
域名 | 数据型态 | 字段说明 | 备注 |
---|---|---|---|
Class | Varchar | 班级 | PK |
No | Varchar | 学生学号 | PK |
Maths | Float | 数学成绩 | |
Chinese | Float | 语文成绩 | |
English | Float | 英文成绩 |
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删除语句:
1、delete删除一行:delete from student where id=1。
2、delete删除多行:delete from student where in (1,2,3)3。
3、删除表的所有数据: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 基础面试题☆☆☆排序删除创建临时表等等的主要内容,如果未能解决你的问题,请参考以下文章