Mysql复习题

  • Post author:
  • Post category:mysql



1. 创建fuxi数据库;


create database fuxi;


2. 删除fuxi数据库;


drop database fuxi;


3. 显示所有数据库;


show databases;


4. 使用/进入 fuxi这个数据库;


use fuxi;


5. 显示fuxi数据库内的所有表;


show tables;


6. 创建没有约束条件的student表


create table student(

id int(11),

name varchar(12),

age int(11));


7. 创建有约束条件的student1表;(主键约束、非空约束)


create table student1(

id int(11) not null, //id 不能为空

name varchar(12),

age int(11),

primary key(id));//主键是id;


8. 创建多字段的约束条件student2表;(复合主键)


create table student2(

id int(11),

name varchar(12),

age int(11),

primary key(id,name) );


9. 创建外键约束 table1表;table2表;


create table table1(

id int(11),

name varchar(22),

location varchar(50),

primary key(id));

create table table2(

id int(11),

name varchar(22) not null,

deptld int (11),

primary key(id),

constraint table1_table2_1 foreign key(deptld) references table1(id));

解释:table2中有一个名为table1_table2_1的外键关联了table1和table2两个表,被外键约束修饰的字段为table2中的deptid,主键字段为table1中的id


10. 创建唯一约束unique; table3表;


被唯一约束修饰了的字段,表示该字段中的值唯一,不能有相同的值。

create table table3(

id int(11) unique,

name varchar(22),

location varchar(50),

primary key(id));


11. 创建默认约束 default ;table4表;默认name为admin


create table table4(

id int(11) unique,

name varchar(22) default ‘admin’,

location varchar(50),

primary key(id));


12. 自动增加 auto_increment table5表;


一个表只能一个字段使用auto_increment,并且使用这个约束的字段只能是整数类型

create table table5(

id int(11) primary key auto_increment,

name varchar(22) not null);


13. 查看创建table1的语句;


show create table table1;


14. 修改table1表名为table1gai;


alter table table1 rename to table1gai;


15. 修改表table1gai内的name字段为newname;


alter table table1gai change name newname int(22);


16. 修改表中的数据类型


alter table table2 modify id varchar(88);


17. 添加字段 table2里面的sex字段;


alter table tabale2 add sex varchar(11);


18. 删除字段 table2中sex字段;


alter table table2 drop sex;


19. 删除表的外键约束;


alter table table2 drop foreign key(id);




单表查询


进入db-student数据库:


use db-student;


20. 查询学生表里面的所有数据;


select * from student;


21. 查询所有学生的学、姓名、性别和出生日期


select sno,sname,ssex, sbirthday from student;


22. 查询所有学生的姓名和现在的年龄; 用age表示;


select sname,year(now())-year(sbirthday) age from student;


23. 查询前 3门课程的课号及课程名称。


select cno,cname from course order by cno limit 3;


24. 查询所有年龄大于18岁的女生的学号和姓名;


select sname,sno from student where year(now())-year(sbirthday)>18 and ssex=”女”;


25. 查询所有男生的信息。


select * from student where ssex=”男”


26. 查询电子商务专业的学生姓名、性别和出生日期;


select sname,ssex,sbirthday from student where speciality=“电子商务”;


27. 查询student表中的所有系名(不重复)。


select distinct sdept from student;


28. 查询成绩在80-90分之间的学生学号和课号。


select sno,cno from sc where degree between 80 and 90;

或:select sno,cno from sc where degree> 80 and degree<90;


29. 查询在1970年1月1日之前出生的男教师信息。


select * from teacher where year(tbirthday)<1970 and tsex=”男”;


30. 输出有成绩的学生学号,按学号升序排序,学号相同的按成绩降序排列。


select sno,degree from sc order by sno,degree desc;


31. 查询所有姓“刘”的学生信息。


select * from student where sname like “刘%”;


32. 查询所有不姓“张”也不姓“王”的同学信息。


select * from student where (sname not like “张%” and sname not lie “王%”);


33. 查询成绩为79分、89分、或99分的记录;


select * from sc where degree=89 or degree=79 or degree=99;

或:select * from sc where degree in(89,79,99);


34. 查询名字中第二个字是“小”字的男生的学生姓名和地址;


select sname,saddress from student where ssex=”男” and sname like ”_小%”;


35. 查询计算机工程系和软件工程系的学生信息;


select * from student where sdept in(“计算机工程系”,“软件工程系”);


36. 统计有多少同学选了课;


select count(DISTNCT sno) 选修总人数 from sc;


37. 统计各门课程的平均成绩,输出课程号和平均成绩;


select cno,AVG(degree) avg from sc GROUP BY cno ORDER BY avg(degree);


38. 查询平均成绩大于等于85分的学生的学号和平均成绩;


select sno,AVG(degree) avg from sc GROUP BY sno HAVING avg(degree);


39. 查询选修1号课程的学生最高分数;


select max(degree) from sc where cno=”1”;


40. 查询选修了三门课以上课程的学生学号;


select sno from sc group by sno having count(*)>3;



多表查询


41. 查询信息工程系女学生的学生学号、姓名及考试成绩;


select x.sno,sname,degree from student x,sc where sdept=” 信息工程系” and ssex=”女” and x.sno=sc.sno;


42. 查询“李勇”同学所选课程的成绩。(不考虑重名)


select degree from sc,student x where x.sname=”李勇” and sc.sno=x.sno;


43. 查询“李新”老师所授课程的课程名称


select x.cname from course x,teacher y,teaching z where x.cno=z.cno and y.tno=z.tno and y.tname=”李新”;


44. 查询女教师所授课的课程号及课程名称;


select course.cno,course.cname from teaching,teacher,course where teacher.tno=teaching.tno and teacher.tsex=”女” and course.cno=teaching.cno;


45. 查询至少选修一门课程的女学生姓名


select x.sname from student x,sc y where x.ssex=”女” and x.sno=y.sno group by x.sno having count(cno)>=1;


46. 查询姓“王”的学生所学的课程名称;


select x.cname from course x,student y,sc z where y.sname like “王%” and y.sno=z.sno and z.cno=x.cno;


47. 查询选修“数据库”课程且成绩再80-90分之间的学生学号及成绩;


select sno,degree from sc,course x where cname=”数据库” and degree between 80 and 90 and sc.cno=x.cno;


48. 查询课程成绩及格的男同学的学生信息及课程号与成绩;


select x.

,cno,degree from student x,sc y where degree >=60 and ssex=”男” and x.sno=y.sno;


49. 查询选修“c04” 课程的学生的平均年龄;


select avg(year(now())-year(sbirthday)) age from student x, sc where sc.cno=”c04” and sc.sno=x.sno;


50. 查询学习课程名为“数学”的学生学号和姓名。


select x.sno,x.sname from student x,sc,course y where x.sno=sc.sno and sc.cno=y.cno and y.cname=”数学”;


51. 查询“钱军“教师任课的课程号,选修其课程的学生的学号和成绩、姓名;


select a.tno,y.sno,degree,x.sname from student x,sc y,teaching a,teacher b where b.tname=”钱军” and a.tno=b.tno and a.cno=y.cno and x.sno=y.sno;


52. 查询再第3学期所开课程的课程名称及成绩;


select cname,degree from sc,course a,teaching b where b.cterm=3 and b.cno=a.cno and sc.cno=a.cno;


53. 查询”c02”号课程不及格的学生信息;


select a.

from student a,sc where sc.cno=”c02” and degree<60 and a.sno=sc.sno;


54. 查询信息工程系成绩再90分以上的学生姓名、性别和课程名称


select a.sname,a.ssex,b.cname from student a,course b,sc where sdept=” 信息工程系” and a.sno=sc.sno and degree>90 and sc.cno=b.cno;


55. 查询同时选修了“c04“和”c02”课程的学生姓名和成绩;


select student.sname,a.degree,b.degree from sc a, sc b,student where student.sno=a.sno and student.sno=b.sno and a.sno=b.sno and a.cno=”c04” and b.cno=”c02”;


56. 查询与“张华“ 同一个系的同学姓名;


select sname from student where sdept in(select sdept from student where sname=”张华”) and sname <>“张华“;


57. 查询学号比“刘晨“ 同学大,而出生日期比他小的学生姓名;


select sname from student where(sno>(select sno from student where sname=”刘晨”)) and (sbirthday>(select sbirthday from student where sname=”刘晨”));


58. 查询出生日期大于所有女同学出生日期的男同学的姓名及系别;


select sname,sdept from student where(sbirthday<all(select sbirthday from student where ssex=”女”)) and ssex=”男”;


59. 查询成绩比该课程平均成绩高的学生的学号及成绩;


select sno,degree from sc x where degree>=(select avg(degree)avg from sc y where x.cno=y.cno);


60. 查询不讲授“c01“课的教师姓名;


select tname from teacher x where not exists (select * from teaching y where x.tno=y.tno and cno=”c01”);


61. 查询没有选修“c02“课程的学生学号及姓名


select x.sno,sname from student x where not exists(select * from sc y where x.sno=y.sno and cno=”c02”);


62. 查询一下哪门课没有人选(用子查询)


select course.cname from course where not exists(select * from sc where sc.cno=course.cno);


63. 查询选修了“数据库“课程的学生学号、姓名及系别;


select sname,sno,sdept from student x where x.sno in(select sc.sno from sc where exists(select * from course where course.cname=”数据库” and sc.cno=course.cno));


64. 查询“c02“号课程不及格的学生信息;


select * from student x where x.sno=(select y.sno from sc y where cno=”c02” and degree<60);


65. 查询只被一名学生选修的课程的课程号、课程名;


select cno,cname from course a where cno in(select cno from sc b where a.cno=b.cno group by b.cno having count(b.cno)=1);



数据更新


66. 向 student 表中插入记录(“20050203”,“张静”,“1981-3-21”,“女”,“CS”,“电子商务”)


insert into student (sno,sname,sbirthday,ssex,sdept,speciality)

values (“20050203”,“张静”,“1981-3-21”,“女”,“CS”,“电子商务”);


67. 插入学号为“20050302”、姓名为“李四”的学生信息


insert into student(sno,sname) values (“20050302”,“李四”);


68. 把计算机系的学生记录保存到表TS中(TS表已存在,表结构与Student表相同)


create table ts like student;

insert into ts select * from student where sdept=“计算机系”


69. 将学号为“20050202”的学生姓名改为“张华”,系别改为“CS”,专业改为“多媒体技术”


update student set sname=“张华”,sdept=“CS”,speciality=“多媒体技术” where sno=“20050202”;


70. 将“李勇”同学的专业改为“计算机信息管理”


update student set sdept=“计算机信息管理” where sname=“李勇”;


71. 将“20050201”学生选修“C03”号课程的成绩改为该课的平均成绩


update sc set degree=(select * from (select avg(degree) from sc a where a.cno=“C03”) b) where sno=“20050201” and cno=“C03”;


72. 把成绩低于总平均成绩的女同学的成绩提高5%


update sc set degree = degree*(1+0.05) where sc.sno in(select * from (select sc.sno from sc,student a where degree<all (select avg(degree) from sc group by cno) and a.ssex=“女” and a.sno=sc.sno) b);


73. 把选修了“数据库”课程而成绩不及格的学生的成绩全改为空值(NULL)


update sc b set degree=null where degree<60 and b.cno in(select * from (select a.cno from course a where a.cname=“数据库”) c);


74. 删除学号为“20050302”的学生记录


delete from student where sno=“20050302”;


75. 删除“计算机系”所有学生的选课记录


delete from sc where “计算机系” = (select sdept from student a where a.sno=sc.sno);


76. 删除SC表中尚无成绩的选课记录


delete from sc where degree is null;


77. 把“张晨”同学的成绩全部删除


delete from sc where sc.sno in (select * from (select b.sno from student b where b.sname=“张晨”) c);



版权声明:本文为zhangpen130原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。