码迷,mamicode.com
首页 > 数据库 > 详细

SQL JOIN

时间:2014-08-25 17:04:44      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:视图   join   sql   inner join   outer join   

    在机房收费系统个人重构的时候,很多的功能都需要根据数据库中的一个表中的信息,去查询另一个表中相匹配的信息,我们用到了视图,但是你有没有注意到下面的SQL语句呢?(SELECT...FROM...JOIN...ON...),接下来我们就一起来了解SQL中的JOIN.

   bubuko.com,布布扣

  

1、什么是JOIN?


   Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接、外联接和交叉联接等,Join用于根据两个或者多个表中的列之间的关系,从这些表中查询数据。

 bubuko.com,布布扣

 

2、怎么使用JOIN?


 新建两张表作为例子,表如下

bubuko.com,布布扣     bubuko.com,布布扣

 

●INNER JOIN


  SQL语句

<span style="color:#333333;">select * from T_NumA </span><span style="color:#ff0000;">inner join</span><span style="color:#333333;"> T_NumB </span><span style="color:#ff0000;">on</span><span style="color:#333333;"> T_NumA .aID =T_NumB .bID </span>
  结果如下

  bubuko.com,布布扣                     bubuko.com,布布扣

  运行的结果是得到两个表之间的交集。用右边的图可以看出,Inner join符合交换律:“A inner join B”,“B inner join A”一样。


 ●OUTER JOIN

 1)、LEFT(OUTER)JOIN和RIGHT(OUTER)JOIN

   SQL语句   

<span style="color:#333333;">select * from T_NumA </span><span style="color:#ff0000;">left outer join</span><span style="color:#333333;"> T_NumB on T_NumA .aID =T_NumB .bID </span>


<span style="color: rgb(51, 51, 51); ">select * from T_NumA </span><span style="color:#ff0000;">right outer join</span><span style="color:#333333;"> T_NumB on T_NumA .aID =T_NumB .bID 
</span>
  

运行结果

  LEFT:

  bubuko.com,布布扣                    bubuko.com,布布扣

  运行的结果:产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

  RIGHT:

  bubuko.com,布布扣       

  从运行的结果一眼就可以看出来,该联接产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

  

 2)、FULL(OUTER)JOIN

  SQL语句

<span style="color:#555555;">select * from T_NumA </span><span style="color:#ff0000;">full outer join</span><span style="color:#555555;"> T_NumB on T_NumA .aID =T_NumB .bID 
</span>
 运行结果:

 bubuko.com,布布扣                   bubuko.com,布布扣

 

 由结果可知:该联接产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。


 ●CROSS JOIN

 SQL语句

<span style="color:#555555;">select * from T_NumA </span><span style="color:#ff0000;">cross join</span><span style="color:#555555;"> T_NumB </span>
运行结果:

 bubuko.com,布布扣

 由运行结果可知:交叉联接运行的结果就是咱们在数据库系统原理中学的笛卡尔积(Cartesian Product),产生一个6*6=36行记录的结果集。


3、结束语

 本文章所讲的联接语句都是将不同表的列进行纵向拼接,因为在做机房收费系统个人重构的时候,只涉及到纵向拼接表的查询,有纵向,那么肯定也有横向,横向拼接也有多种方式:Not in,Union和Intersect,这里只做简单介绍,Not in是去两个结果集的差集。Union是两个集合的并集,会自动删除重复的记录,也可以用Union All来保留所有记录行。Intersect是两个集合的交集,即同时存在于两个集合中的记录。

 如果有什么不妥的地方,欢迎各位博友斧正!!!

  

  


      

   

SQL JOIN

标签:视图   join   sql   inner join   outer join   

原文地址:http://blog.csdn.net/zlts000/article/details/38779605

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!