基本表的数据操作
一.实验内容、步骤以及结果
1.针对SPJ_MNG数据库和Student数据库,用SQL语句插入实验一中所列的示例数据。
可以单条语句插入也可多条语句插入
1.针对Student数据库,在图形用户界面中对表中的数据进行更新。(5分)
(1)修改S表的任意一条数据。
(2)删除S表的任意一条数据。
Ps:直接用图形化界面在二.2中有说明
2.针对SPJ_MNG数据库,用SQL语句完成下面的数据更新。
(1)把全部红色零件的颜色改为蓝色。
(2)由S5供给J4的零件P6改为由S3供应,请做必要的修改。
(3)从供应商表中删除S2的记录,并从供应情况表中删除相应记录。
(4)请将(S2,J6,P4,200)插入供应情况表SPJ。
(1)
(2)
(3)
(4)
3.针对SPJ_MNG数据库,用SQL语句完成下面的数据查询。
(1)找出所有供应商的姓名和所在城市。
(2)求供应工程J1零件P1的供应商号码。
(3)找出使用供应商S1或者S2所供应零件的工程号码。
(4)求供应工程J1零件为红色的供应商号码。
(5)查询每个供应商号码以及其供应零件的总个数。
(6)求每个供应商号码,供应商名以及所供应零件的种类数量。
(7)找出使用上海供应商的零件的工程名称。
(8)求没有使用天津供应商生产的红色零件的工程号码。
(9)求至少使用了供应商S1所供应的全部零件的工程号。
(10)查询这样的工程:供给该工程的零件P1的平均供应量大于供给工程J1的任何一种零件的最大供应量。
(1)
(2)
(3)
(4)
结果为空是因为之前有操作把所有红改为蓝
再修改进行验证
(5)
(6)
(7)
(8)
(9)
(10)
4.针对Student数据库用SQL语句完成下面的数据查询。
(1)查询每个学生已经获得的学分的总分(成绩及格表示获得该门课的学分),并按照所获学分由高到低的顺序输出学号,姓名,所获学分。
(2)查询这样的学生姓名:该学生选修了全部课程并且其中一门课在90分以上。
(1)
(2)
5.针对Student数据库用至少三种不同的SQL语句进行查询:查询选修了课程名为“数据库”的学生学号和姓名,然后自己设计实验,用数据比较分析三种查询的效率,并分析原因。
说明:查询性能验证最好在10W以上的数据条件下进行测试。构造10W以上的数据可以自行编程插入数据或者用导入导出方式实现。
三种方式:
select ID,name from student
where ID in
(
select distinct ID from takes
where course_id in
(
select course_id from course
where title = 'Graphics'
)
);
select ID,name from student
where ID in
(
select takes.id from takes,course
wheretakes.course_id = course.course_id
and title = 'Graphics'
)
select student.ID,name fromstudent,course,takes
where title = 'Graphics'
and student.id = takes.id
and course.course_id = takes.course_id;
表面上看三种查询方式耗时相同,这是由于当前数据数据较少,并未体现出三种查询方式的区别
实际上应当第一种查询效率最高,第三种最低
第一种查询使用两层嵌套,每个嵌套中进行一次遍历进行比较,每次便利的范围都在一步步缩小,数据量有了明显的减少
第二种查询使用一层嵌套,遍历行增多,效率降低
第三中查询需要遍历所有行,效率最低
所以嵌套次数越多查询效率越高,因为连接两个表后再查询,相较于在表中直接查询效率更低
二.实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)
除了标题内容以外,该部分内容中还可以写对于实验的一些感受,建议,意见等。
1.在SPJ表中插入数据时报错:
1062 Error ‘Duplicate entry‘S1’for key ‘spj.PRIMARY’
这是主键值重复,主键设置不合理,将SNO,PNO,JNO都设为主键,解决问题
2.在针对Student数据库,在图形用户界面中对表中的数据进行更新中,我发现spj_mng表中可以邮件单击删除行或者用表旁边带减号的图标进行删除,然而student表中右击并不能选中delete row,后来发现是之前用命令行建表时留下的垃圾操作,因为表中并没有设置主键,所以无法直接对表进行更改,只能通过命令行(可能是平台的某些规定)
设置主键后看到表旁出现带减号图标
删除后记得刷新就可以看到结果了
3.在导入university数据库中遇到报错Error Code: 1239. Incorrect foreign key definition for ‘foreign keywithout name’
在外键reference后添加列名即可解决
参考链接: