其他分享
首页 > 其他分享> > 3.4.10整合多表一同查询

3.4.10整合多表一同查询

作者:互联网

使用连接查询多表

基本思想

是将关联表的主键值与外键值进行匹配比对,从中检索。

例如,例3-36中的“计算机学院”的教师名单查询,可以采用连接查询方式处理,其查询SQL语句如下。

SELECT TeacherID, TeacherName, TeacherTitle
FROM Teacher, College
WHERE Teacher.CollegeID=College.CollegeID AND College.CollegeName=’计算机学院’
ORDER BY TeacherID;

这个语句执行后,其查询操作结果与上例子查询方式的结果相同。

连接查询与子查询

连接查询、子查询可以实现相同功能

区别:当 SQL 查询所输出的信息来自多个表, SELECT子查询就不能满足要求,这时必须采用连接查询实现处理。

【例】在选课管理系统数据库中,我们希望得到各个学院的教师人数信息。这时需要采用连接查询方法,实现两表关联查询

SELECT College.CollegeName AS 学院名称, COUNT(Teacher.CollegeID) AS 教师人数
FROM Teacher, College
WHERE Teacher.CollegeID=College.CollegeID
GROUP BY College.CollegeName
ORDER BY College.CollegeName DESC;

简化表名

在多表连接查询中,可以使用 AS 关键词给表名赋予一个简单名称

【例】在选课管理系统数据库中,我们希望得到各个学院的教师信息。使用AS关键词,给Teacher--A,给College--B。

SELECT B.CollegeName AS 学院名称, A.TeacherID AS 编号, A.TeacherName AS 姓名, A.TeacherGender AS
性别, A.TeacherTitle AS 职称
FROM Teacher AS A, College AS B
WHERE A.CollegeID=B.CollegeID
ORDER BY B.CollegeName, A.TeacherID;

JOIN…ON连接

在SQL中,实现多表关联查询。

格式

SELECT <目标列>[,<目标列>…]
FROM <表名1> JOIN <表名2> ON <连接条件>;

【例】在上例的SQL查询语句,可以使用JOIN…ON关键词语句方式重新编写如下。

SELECT B.CollegeName AS 学院名称, A.TeacherID AS 编号, A.TeacherName AS 姓名,A.TeacherGender AS 性别, A.TeacherTitle AS 职称
FROM Teacher AS A JOIN College AS B
ON A.CollegeID=B.CollegeID
ORDER BY B.CollegeName, A.TeacherID;

该语句也可以实现多表查询

SELECT <目标列>[,<目标列>…]
FROM <表名1> JOIN <表名2> ON <连接条件1> JOIN <表名3> ON <连接条件2>;

【例3-40】在选课管理系统数据库中,我们希望查询课表信息。实现4表关联数据查询

SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师姓名, P.CourseRoom AS 地点, P.CourseTime AS 时间, S.CollegeName AS 开课学院
FROM Course AS C JOIN Plan AS P ON C.CourseID=P.CourseID JOIN Teacher AS T ON
P.TeacherID=T.TeacherID
JOIN College AS S ON S.CollegeID=T.CollegeID
ORDER BY P.CoursePlanID;

1.内连接

在以上JOIN…ON连接查询中,只有关联表相关字段的列值满足等值连接条件时,才从这些关联表中提取数据组合成新的结果集

【例】在选课管理系统数据库中,我们希望查询所有开设课程的学生选课情况。

SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师, COUNT(R.CoursePlanID) AS选课人数
FROM Course AS C JOIN Plan AS P
ON C.CourseID=P.CourseID
JOIN Teacher AS T ON P.TeacherID=T.TeacherID
JOIN Register AS R ON P.CoursePlanID=R.CoursePlanID
GROUP BY C.CourseName, T.TeacherName;

在上面的内连接查询中,只能找出有学生注册的课程名称和选课人数,但不能找出没有学生注册的课程名称和选课人数。

2.外连接

有时候我们也希望输出那些不满足连接条件的元组数据。

【例+】在选课管理系统数据库中,我们希望查询所有开设课程的学生选课情况,但要包含没有学生选课的课

SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师, COUNT(R.CoursePlanID) AS选课人数
FROM Course AS C JOIN Plan AS P
ON C.CourseID=P.CourseID
JOIN Teacher AS T ON P.TeacherID=T.TeacherID
LEFT JOIN Register AS R ON P.CoursePlanID=R.CoursePlanID
GROUP BY C.CourseName, T.TeacherName;

标签:10,JOIN,选课,查询,3.4,College,TeacherID,多表,Teacher
来源: https://www.cnblogs.com/tupo/p/16079729.html