博主最新文章
|
||
|
||
日志正文
|
||
select查询中深入学习多表间的联合查询 在数据库应用程序中,几乎所以的查询语句中都需要使用多表之间的联合查询。 1、学生表Student 2、课程成绩表StuCourseScore 图2 从StuCourseScore表中可以看到,表中的StudentID是一个外键,对应Student表的主键StudentID。下面说明各种联合的使用方法和技巧。 1、内联接 说明:INNER关键字表示联接类型是内联接,JOIN表示建立联接,ON用来设置联接关系条件。 上述语名返回两个表中字段‘StudentID’相同的列的两个表的相关字段。结果如下图所示: 图3 不等联接较少使用,这里不作讨论。 (1)左外联接。结果集返回左表中所有符合where或having查询条件的行 SELECT StuCourseScore.StudentID, StuCourseScore.CourseID, Student.StudentName, Student.Sex, Student.ClassID, StuCourseScore.Score 图4 对比图3,从图4中可以看出,使用左外联接后,所有学生表的学生信息都查询出来了,但一些学生在右表中没有成绩,故其课程号和成绩都显示为NULL(不存在)。 SELECT Student.StudentID, Student.StudentName, Student.Sex, Student.ClassID, StuCourseScore.CourseID, StuCourseScore.Score
图5 从图4与图5可以看出:左右外联接的返回结果区别是:左外联接是左侧表的字段没有null值,如果右侧表的字段没有符合该列的,则右侧字段用null值填充,如果左侧有多个字段和右侧相关联,则重复左侧的列填充;右联接是和左联接相反。 没有where子句的交叉联接返回两表的笛卡尔积,即行数等于表1和表2的行数的乘积。 SELECT Student.StudentID, Student.StudentName, Student.Sex, Student.ClassID, StuCourseScore.CourseID, StuCourseScore.Score 返回结果集如下: 从上图可以看出,前n行(n为学生表的行数)的CourseID, Score都是相同的1052105、86,即为图2中第一行学生的课程代号和成绩,下一n行为图2中第2行学生的课程代号和成绩,依次类推。
|
||
评论 想第一时间抢沙发么?