黄智勇 发表于 2018-10-21 13:10:16

SQL 中的JOIN两表或者多表连接问题

  SQL数据库中的表连接
  含义:连接即是把两个表或者两个以上的表信息放置在一个结果集中
  分类:
  1.内部连接
  2.外部连接
  3.完全连接
  4.交叉连接
  内部连接是连接类型中最普通的一种,与大多数连接一样,内部连接根据一个或几个相同的字段将记录匹配在一起,但是内部连接仅仅返回那些存在的字段匹配的记录。
http://common.cnblogs.com/images/copycode.gif
Use northwindselect products.*,suppliers.supplierid from products inner  
join suppliers on products.supplierid=suppliers.supplierid
  

  

  
use pubsselect a.au_lname+', '+a.au_fname as author,t.title from authors a
  
join titleauthor ta on a.au_id=ta.au_id join titles t on t.title_id=ta.title_id
http://common.cnblogs.com/images/copycode.gif
  外部连接时必需跟上左侧连接还是右侧连接。
Use pubsselect discounttype,discount,s.stor_name from discounts d  
left outer join stores s on d.stor_id=s.stor_idselect discounttype,discount,s.stor_name from discounts d
  
right join stores s on d.stor_id=s.stor_id
  完全连接是将join两侧的数据全部匹配,并返回所有记录。
Use pubsselect discounttype,discount,s.stor_name from discounts d  
full join stores s on d.stor_id=s.stor_id
  交叉连接不使用on运算符,而将join左侧的所有记录与另一侧的所有记录连接,返回的是join两侧表记录的笛卡尔积。(总数据条数为左侧表内数据条数乘以右侧表数据条数之积)
Use pubsselect discounttype,discount,s.stor_name from discounts d  
cross join stores s
  上边只是把定义和简单的例子列举,下边用一个通俗简单的例子说明join连接中两表或者两表以上的数据连接获取到的数据集的情况
  准备工作,先建立三张数据表,TABLEA,TABLEB,TABLEC,TABLEA表中有B,C表中的ID代码如下
http://common.cnblogs.com/images/copycode.gif
//TABLEA表有B,C表中的两个ID,BID,CID] IDENTITY(,= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS=http://common.cnblogs.com/images/copycode.gif
http://common.cnblogs.com/images/copycode.gif
//TABLEB表] IDENTITY(,= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS=http://common.cnblogs.com/images/copycode.gif
http://common.cnblogs.com/images/copycode.gif
//TABLEC表] IDENTITY(,= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS=http://common.cnblogs.com/images/copycode.gif
http://common.cnblogs.com/images/copycode.gif
//TABLEA表数据添加后1    A    1    12    A    6    2//TABLEB表数据添加后id    name1    B2    B3    B4    B5    B//TABLECid    Cname1    C2    C3    C4    C5    Chttp://common.cnblogs.com/images/copycode.gif
  两表连接时
  一、Inner join on 连接
  代码:SELECT * FROM TABLEB B INNER JOIN TABLEA A ON B.ID=A.BID
  结果:id name id A Bid Cid
  1   B   1 A1   1
  分析:匹配后的结果只显示符合ON后条件的结果集,不符合则不显示
  二、Outer join on (外连接)
  1、左连接
  代码:SELECT * FROM TABLEB B LEFT OUTER JOIN TABLEA A ON B.ID=A.BID
  结果:
id    name    id    A    Bid    Cid1    B    1    A    1    12    B    NULL    NULL    NULL    NULL3    B    NULL    NULL    NULL    NULL4    B    NULL    NULL    NULL    NULL5    B    NULL    NULL    NULL    NULL  分析:外左连接时左侧为需要显示全部信息的表,右侧把没有匹配ON条件的地方全部补为NULL
  2、右连接
  代码:(待续)


页: [1]
查看完整版本: SQL 中的JOIN两表或者多表连接问题