一.简答:(5 * 6 = 30)
1.SQL语句分类:
DQL:数据查询语言
DML:数据操作语言
DDL:数据定义语言
DCL:数据控制语言
TPL:事物处理语言
CCL:指针控制语言
2.MYSQL有哪些数据类型:
Int
Char
Varchar
Float
Data
datatime
3.什么是事务:
事物是由一组DML语句执行,这组DML语句要么全部执行,要么全部放弃执行
4.事务有哪几个特性,并简要概括:
原子性、一致性、持续性、隔离性
5.简要阐述使用索引的目的及索引的特点:
目的:提高查询速度
特点:占用磁盘空间,提高查询速度
6.索引的分类:
普通索引
唯一索引
主键索引(主键索引都是唯一索引)
二.大题:(5*14=70)
根据如下四张表回答以下问题:
表一:student(学生表),其中,s_id:学生ID,s_name:学生姓名,s_birth:生日,s_sex:学生性别
表中数据如下:
表二:course(课程表),其中,c_id:课程ID,c_name:课程名称,t_id:教师ID
表中数据如下:
表三:teacher(教师表),其中,t_id:教师ID,t_name:教师名字
表中数据如下:
表四:score(成绩表),其中,s_id:学生ID,c_id:课程ID,s_score:学生成绩
表中数据如下:
问题1. 查询姓‘李’老师的数量
select COUNT(t_name) from teacher where t_name like “李%”;
问题2. 查询每门课程被选修的学生数,要求显示课程ID及其学生数量
select c.c_id,count(*) from course c LEFT JOIN score s ON c.c_id=s.c_id GROUP BY c_id;
问题3. 查询男生、女生人数,要求显示性别及其人数
select s_sex,COUNT(S_sex) from student GROUP BY s_sex;
问题4. 查询名字中含有‘风’字的学生所有信息
select * from student where s_name like “%风%”;
问题5. 查询1990年出生的所有学生信息
select * from student where s_birth like “1990%”;
问题6. 查询至少选修两门课程的学生学号及学生选修的课程数量
select s1.s_id,COUNT(s2.c_id) from student s1 left join score s2 on s1.s_id = s2.s_id GROUP BY s1.s_id having count(s2.c_id)>1;
问题7. 查询每个学生不及格的课程,要求显示学生ID,课程ID,课程名字及分数
select s1.s_id,s2.c_id,c.c_name,s2.s_score from student s1 LEFT JOIN score s2 on s1.s_id=s2.s_id left join course c on c.c_id=s2.c_id WHERE s2.s_score<60;
问题8. 查询课程编号为01且课程成绩在70分以上的学生姓名及成绩
select s1.s_name,s2.s_score from student s1 left join score s2 on s1.s_id=s2.s_id where s2.c_id = 01 and s2.s_score>70;
问题9. 查询课程名称为‘数学’,且分数低于60分的学生姓名和分数
select s1.s_name,s2.s_score from student s1 LEFT JOIN score s2 on s1.s_id=s2.s_id left join course c on c.c_id=s2.c_id where c.c_name=“数学” and s2.s_score<60;
问题10. 查询学过编号为‘01’的课程,但是没学过编号为‘02’课程的学生信息
select s_id,s_name
from Student
where s_id in
(select s_id from Score where c_id = ‘01’)
and s_id not in
(select s_id from Score where c_id = ‘02’)
问题11. 查询平均成绩大于等于60分同学的学生编号,学生姓名和平均成绩
select a.s_id as 学号, s_name as 姓名, avg(b.s_score) as 平均分
from Student a join Score b on a.s_id=b.s_id
group by a.s_id,s_name
having avg(b.s_score) >60;
问题12. 查询没学过‘张三’老师课的所有学生信息
select *
from Student
where s_id not in
(select s_id from Score join Course on Score.c_id = Course.c_id
join Teacher on Course.t_id = Teacher.t_id
where t_name = ‘张三’);
问题14. 查询‘01’课程比‘02’课程成绩低的学生信息及分数
select * from student s1 left join score s2 on s1.s_id=s2.s_id LEFT JOIN score s3 on s1.s_id = s3.s_id where s2.c_id=“01” and s3.c_id=“02” and s2.s_score < s3.s_score;