您的位置:首页 > 数据库

数据库联合查询—小知识大攻略

2014-03-27 22:07 134 查看
无论是在学习耿老师视频,还是自考数据库原理,我们都接触到联合查询这部分,但在实践中并没有过多的去应用。现在做项目才真正认识到理论运用到实践的重要性。

一、概念

联合查询是根据每个表之间的逻辑关系从两个或多个表中检索数据,而这逻辑关系则是每个表之间共同的列的关联性,这也是关系数据库查询的最主要的特征.
数据表的连接有:
1、内连接
2、外连接
(1)左连接(左边表不限制)
(2)右连接(右边表不限制)
(3)全外连接(不受限制)
3、交叉连接

二、实践

建立两张表,一张学生管理表(T_ManageStudent)和学生信息表(T_StudentInfo)

表1:(学生管理表):



表2:(学生信息表)



1、内连接

两表进行比较,满足连接条件的组合起来作为结果

语句:

方1:
   select dbo.T_ManageStudent.编号 as 编号1,dbo.T_ManageStudent.姓名,
   dbo.T_StudentInfo.编号 as 编号2,dbo.T_StudentInfo.职务
   from T_ManageStudent inner join T_StudentInfo  on 
   T_ManageStudent.编号=T_StudentInfo.编号

方2:
   select a.编号 as 编号1,a.姓名,b.编号 as 编号2,b.职务
   from T_ManageStudent as a inner join T_StudentInfo as b on 
   a.编号=b.编号


结果:




2、外连接

(1)左连接(左边表不限制)
返回结果集包含T_ManageStudent中所有记录,不仅仅是连接字段匹配的记录。如果T_ManageStudent中某条记录在T_StudentInfo中没有匹配记录,则结果集相应记录有关T_StudentInfo部分为NULL值
语句:

方1:
   select dbo.T_ManageStudent.编号 as 编号1,dbo.T_ManageStudent.姓名,
   dbo.T_StudentInfo.编号 as 编号2,dbo.T_StudentInfo.职务 from
   T_ManageStudent left join T_StudentInfo  on T_ManageStudent.编号=T_StudentInfo.编号 
方2:
    select a.编号 as 编号1,a.姓名,b.编号 as 编号2,b.职务
    from T_ManageStudent as a left join T_StudentInfo as b on a.编号=b.编号


结果:




(2)右连接(右边表不限制)

返回结果集包含T_StudentInfo中所有记录,不仅仅是连接字段匹配的记录。如果T_StudentInfot中某条记录在T_ManageStudent中没有匹配记录,则结果集相应记录有关T_ManageStudent部分为NULL值
语句:

方1:
   select dbo.T_ManageStudent.编号 as 编号1,dbo.T_ManageStudent.姓名,
   dbo.T_StudentInfo.编号 as 编号2,dbo.T_StudentInfo.职务 from
   T_ManageStudent right join T_StudentInfo  on T_ManageStudent.编号=T_StudentInfo.编号 
方2:
   select a.编号 as 编号1,a.姓名,b.编号 as 编号2,b.职务
   from T_ManageStudent as a right join T_StudentInfo as b on a.编号=b.编号


结果:



(3)全外连接(不受限制)

返回结果集包含T_ManageStudent和T_StudentInfo所有匹配和不匹配的记录
语句:

方1:
   select dbo.T_ManageStudent.编号 as 编号1,dbo.T_ManageStudent.姓名,
   dbo.T_StudentInfo.编号 as 编号2,dbo.T_StudentInfo.职务 from
   T_ManageStudent full join T_StudentInfo  on T_ManageStudent.编号=T_StudentInfo.编号

方2:
  select a.编号 as 编号1,a.姓名,b.编号 as 编号2,b.职务
  from T_ManageStudent as a full join T_StudentInfo as b on a.编号=b.编号


结果:



3、交叉连接

情况1(无where):
交叉连接将差生连接涉及的表的笛卡儿积,第一个表的行乘以第二个表的行等于笛卡儿积结果集的大小
情况2(有where):
同内连接一样
语句:

select T_ManageStudent.编号 as 编号1,T_ManageStudent.姓名,

T_StudentInfo.编号 as 编号2 from T_ManageStudent cross join T_StudentInfo


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: