Home >Database >Mysql Tutorial >数据库联合查询—小知识大攻略

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

WBOY
WBOYOriginal
2016-06-07 15:15:461228browse

无论是在学习耿老师视频,还是自考数据库原理,我们都接触到联合查询这部分,但在实践中并没有过多的去应用。现在做项目才真正认识到理论运用到实践的重要性。 一、概念 联合查询是根据每个表之间的逻辑关系从两个或多个表中检索数据 , 而这逻辑关系则是每个

       

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


一、概念


    联合查询是根据每个表之间的逻辑关系从两个或多个表中检索数据,而这逻辑关系则是每个表之间共同的列的关联性,这也是关系数据库查询的最主要的特征.  

      数据表的连接有:

     1、内连接

     2、外连接

  1)左连接(左边表不限制)

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

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

     3、交叉连接


二、实践


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

1:(学生管理表):

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


2:(学生信息表)

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


1、内连接

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

语句:

<span>方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.编号 </span>

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

结果:

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

 

2、外连接


  1)左连接(左边表不限制)

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

        语句:

<span>方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.编号
</span>


        结果:

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

 

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


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

语句:

<span>方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.编号
</span>


结果:

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

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


返回结果集包含T_ManageStudentT_StudentInfo所有匹配和不匹配的记录

语句:

<span>方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.编号 </span>

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


结果:

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

 3、交叉连接


情况1(无where):

       交叉连接将差生连接涉及的表的笛卡儿积,第一个表的行乘以第二个表的行等于笛卡儿积结果集的大小

情况2(有where):

       同内连接一样

       语句:

<span>select T_ManageStudent.编号 as 编号1,T_ManageStudent.姓名,

T_StudentInfo.编号 as 编号2 from T_ManageStudent cross join T_StudentInfo 
</span>

       结果:

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn