这次有幸帮师姐进行考试系统的基础维护,说直接点就是对考试人员的管理,增删改查,最主要的还是查询学生,用来和老师所给的信息进行核对,最后再确定考试的人员,在查询的过程中就遇到了这样的一种情况: 在对english考试的人员进行核对的时候,为了方便查
这次有幸帮师姐进行考试系统的基础维护,说直接点就是对考试人员的管理,增删改查,最主要的还是查询学生,用来和老师所给的信息进行核对,最后再确定考试的人员,在查询的过程中就遇到了这样的一种情况:
在对english考试的人员进行核对的时候,为了方便查询,而建立的一个相关的视图,该视图所涉及到的表有:tb_student(学生基本信息),tb_executiveclass(涉及到所在的班级),tb_departmentname(所属专业),tb_collegename(所属学院),tb_english主要就是把学生基本信息以及所属的学院专业以及英语考试的相关信息来建立一个整体的信息表。对于信息的检查第一部分就是看看视图中的信息有没有和老师所给的英语信息表一一对应。
胡乱忙碌的半天,最后按照师姐的想法,先对表进行了右外连接,以学生英语分级信息为主,来进行了查询:
相关语句如下:
select distinct
dbo.tb_student.studentname, dbo.tb_student.studentcode, dbo.tb_student.sex, dbo.tb_executiveclass.executiveclassname, dbo.tb_department.departmentname,
dbo.tb_college.collegename, dbo.tb_grade.gradename, dbo.tb_english.englisfenji, dbo.tb_english.englishclass
from dbo.tbr_depcollegelink inner join
dbo.tb_department on dbo.tbr_depcollegelink.departmentid = dbo.tb_department.departmentid inner join
dbo.tb_college on dbo.tbr_depcollegelink.collegeid = dbo.tb_college.collegeid inner join
dbo.tbr_executiveclassdeplink on dbo.tb_department.departmentid = dbo.tbr_executiveclassdeplink.departmentid inner join
dbo.tbr_stuexecutiveclasslink inner join
dbo.tb_executiveclass on dbo.tbr_stuexecutiveclasslink.executiveclassid = dbo.tb_executiveclass.executiveclassid inner join
dbo.tb_student on dbo.tbr_stuexecutiveclasslink.studentid = dbo.tb_student.studentid on
dbo.tbr_executiveclassdeplink.executiveclassid = dbo.tb_executiveclass.executiveclassid inner join
dbo.tbr_executiveclassgradelink on dbo.tb_executiveclass.executiveclassid = dbo.tbr_executiveclassgradelink.executiveclassid inner join
dbo.tb_grade on dbo.tbr_executiveclassgradelink.gradeid = dbo.tb_grade.gradeid right outer join
dbo.tb_english on dbo.tb_student.studentcode = dbo.tb_english.studentcode
所出现的效果如下:
为什么会出现这种状况呢?其原因当然很简单,由于t_english表中的数据是自己按照老师所给的excel表格直接导入进去的,所以如果采用又外连接会出现其等同量的数据,可是由于某种原因,当初添加基本信息的时候忘记了此学生,又或者转专业只删除了而忘记把其添加进去了等等,从而导致基础学生表为空,所以才出现的如图的现象。
通过基本表的连接操作进行了简单的查询,然后再一对照,发现真的是这五条数据捣的鬼。哎!这次真的是帮了自己的大忙了
其实右外连接只是基本表中的一种连接类型,除此之外,数据表的连接类型分成:
1)内连接:是等值连接
2)外连接:看以什么信息为主,是表格a还是表格b,如果以表a信息为依据,那就使用左外连接,相反则使用右外连接。全外连接则是两个表都不加限制。
3)自然连接:连接发生在一张表内
下边通过举例来详细说明:
表tb_student和表tb_english
对于自然连接,一般使用在有公共属性的情况中,如果两个关系没有公共属性,那么自然连接则就转换成笛卡儿积来进行操作。
迪卡儿积:select dbo.tb_english.studentcode, dbo.tb_english.englisfenji, dbo.tb_student.studentcodes, dbo.tb_student.studentnamefrom dbo.tb_english cross join dbo.tb_student
显示效果:
内连接:select dbo.tb_english.studentcode, dbo.tb_english.englisfenji, dbo.tb_student.studentcodes, dbo.tb_student.studentnamefrom dbo.tb_english inner join dbo.tb_student on dbo.tb_english.studentcode = dbo.tb_student.studentcodes
左外连接:select dbo.tb_english.studentcode, dbo.tb_english.englisfenji, dbo.tb_student.studentcodes, dbo.tb_student.studentnamefrom dbo.tb_english left outer join dbo.tb_student on dbo.tb_english.studentcode = dbo.tb_student.studentcodes
右外连接:select dbo.tb_english.studentcode, dbo.tb_english.englisfenji, dbo.tb_student.studentcodes, dbo.tb_student.studentnamefrom dbo.tb_english right outer join dbo.tb_student on dbo.tb_english.studentcode = dbo.tb_student.studentcodes
全外连接:select dbo.tb_english.studentcode, dbo.tb_english.englisfenji, dbo.tb_student.studentcodes, dbo.tb_student.studentnamefrom dbo.tb_english full outer join dbo.tb_student on dbo.tb_english.studentcode = dbo.tb_student.studentcodes
总结:
这次对于基础信息的操作让自己对于sql查询等等熟悉了许多,对于实践检验知识的熟练程度,真的是一点都不假啊!虽然只是一些小小的知识点,但是通过这次基础信息维护,让自己更加明白了这些基础性的学习一定要扎实啊!这些知识看似简单,但是如果不了解,真的会使自己的查询效率大大降低啊!