这次有幸帮师姐进行考试系统的基础维护,说直接点就是对考试人员的管理,增删改查,最基本的还是查询学生,用来和老师所给的信息进行核对,最后再确定考试的人员,在查询的过程中就遇到了这种一种情况:
在对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
所出现的效果例如以下:
为什么会出现这样的状况呢?其原因当然非常easy,因为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.StudentName FROM dbo.TB_English CROSS JOIN dbo.TB_Student
显示效果:
内连接:
SELECT dbo.TB_English.studentCode, dbo.TB_English.englisfenji, dbo.TB_Student.StudentCodes, dbo.TB_Student.StudentName FROM dbo.TB_English <span style="color:#ff0000;">INNER JOIN</span> 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.StudentName FROM dbo.TB_English<span style="color:#ff0000;"> LEFT OUTER JOIN</span> 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.StudentName FROM dbo.TB_English <span style="color:#ff0000;">RIGHT OUTER JOIN</span> 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.StudentName FROM dbo.TB_English <span style="color:#ff0000;">FULL OUTER JOIN</span> dbo.TB_Student ON dbo.TB_English.studentCode = dbo.TB_Student.StudentCodes
总结:
这次对于基础信息的操作让自己对于SQL查询等等熟悉了很多,对于实践检验知识的熟练程度,真的是一点都不假啊!尽管仅仅是一些小小的知识点,可是通过这次基础信息维护,让自己更加明确了这些基础性的学习一定要扎实啊!这些知识看似简单,可是假设不了解,真的会使自己的查询效率大大减少啊!