设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer表连接怎么运用?四种连接实例详解

发布时间:2022-03-03 14:06 所属栏目:116 来源:互联网
导读:
导读:SqlServer 表连接是学习Sql数据库要掌握的一个内容,因此这篇文章就给大家分享一下SQL表连接的使用,文本有SQL表连接问题示例以及解决办法,具有一定的参考价值,需要的朋友可以看看。 1.2 本篇文章内容概要 1.3 本篇文章内容概括 在SQL语句中,关于表连接,
       SqlServer 表连接是学习Sql数据库要掌握的一个内容,因此这篇文章就给大家分享一下SQL表连接的使用,文本有SQL表连接问题示例以及解决办法,具有一定的参考价值,需要的朋友可以看看。
 
       1.2 本篇文章内容概要
 
 
       1.3 本篇文章内容概括
 
       在SQL语句中,关于表连接,若按照表的数量来划分,可以划分为单表连接、两表连接和两表以上连接,在本篇文章中,主要讲解两表连接,其他多表连接原理一样。
 
       1.4 本章测试样表和Sql
 
       业务场景:有两张表,分为为顾客表Customers和顾客订单表Orders,SQL语句分别如下:
 
       创建Customes并初始化
 
--CREATE TABLE Customers
CREATE TABLE Customers
(
  CustID VARCHAR(50) NOT NULL, --顾客ID
  CustName VARCHAR(50),--顾客姓名
  CustCompany VARCHAR(50) --顾客公司
)
 
       创建Order表并初始化
 
CREATE TABLE Orders
(
 CustID VARCHAR(50) NOT NULL, --顾客ID
 OrdetID VARCHAR(50) --订单ID
)
 
--Initial Orders
 
INSERT INTO Orders VALUES('SXN-DD-01','SCCCCFFFFFSSOX002')
INSERT INTO Orders VALUES('SXN-DD-02','SCCCCFFFFFSSOX0X2')
INSERT INTO Orders VALUES('SXN-DD-03','')
INSERT INTO Orders VALUES('SXN-DD-04','')
INSERT INTO Orders VALUES('SXN-DD-05','SCCCCFFFFFSSOX0H2')
INSERT INTO Orders VALUES('SXN-DD-06','')
       查询结果为:
 
 
 
       2 问题引入
 
       Q1:写一个查询,生成从1到1000的整数序列。
 
       3 交叉连接
 
       3.1 SQL示例及示例结果
 
 SELECT C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
FROM Customers AS C
CROSS JOIN Orders AS O
       结果:
 
 
 
       3.2 示例结果分析
 
       交叉连接使用关键字CROSS JOIN进行查询,查询的结果为笛卡儿积,从如上结果可以看出,查询出的结果共有36行数据,因为Customers表和Orders表分别有6条记录,6X6=36;
 
       3.3 小结
 
a.在逻辑上,交叉连接是一种最简单的联接;
b.交叉连接只实现一个逻辑处理步骤―――笛卡儿积;
c.操作:对输入的两个表进行操作,把它们连接起来,生成两者的笛卡儿积,
 
即将一个输入表的每行与另一个表的所以行进行匹配,如果一个表有m行,
 
而另一个表有n行,将得到m x n行的接果集;
d.结构:
  SELECT  tb1.tb1ConumName,tb2.tb2ConumName
  FROM table1 AS tb1
  CROSS JOIN table2 AS tb2
e.交叉连接使用的关键字:CROSS JOIN ;
f.交叉连接生成的接果集是一个虚拟表,虚拟表中的各列直接源于参与连接的两个表;
 
       4 内连接
 
       4.1 SQL示例及示例结果
 
SELECT C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
 FROM Customers AS C
 INNER JOIN Orders AS O
 ON C.CustID=O.CustID
结果:
 
 
 
       4.2 示例结果分析
 
       内连接在交叉连接的基础上外加过滤条件ON,如上例子中用Customers.CustID=Orders.CustID作为过滤条件,结果显而易见。
 
       4.3 小结
 
内联接规则为笛卡尔积+用户谓词过滤:它首先像交叉连接一样,对两个输入表进行笛卡尔积运算,然后根据用户指定的谓词对结果进行过滤;
 
       5 外连接
 
       5.1 SQL示例及示例结果(只分析左外部连接,因为右连接和全连接原理也是一样的)
 
SELECT C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
 FROM Customers AS C
 LEFT OUTER JOIN Orders AS O
 ON C.CustID=O.CustID
       结果:
 
 
 
       5.2 示例结果分析
 
如上以Cutomers表作为左保留表,连接右表Orders列CustID缺少SXN-FF-01和SXN-HH-01,为了以左保留表为基准,用NULL占位符来填充。
 
       5.3 小结
 
a.外连接:笛卡儿积+ON过滤+外部行;
b.在外连接中,要把一个表标记为“保留的”表,可以在表名之间使用关键字LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN,其中OUTER关键字是可选的。LEFT关键字表示左边表的行是保留的,RIGHT关键字表示右边表的行是保留的,而FULL关键字则表示左右两边表的行都是保留的;
 
c.外连接的第三个逻辑查询处理步骤就是要识别保留表中按照ON条件在另一个表找不到与之匹配的那些行,再把这些行添加到连接的前两个步骤生成的结果中。对于来自连接的非保留表的那些列,追加的外不行中的这些列则用NULL作为占位符;
 
       6自连接
 
       6.1 SQL示例及示例结果
 
SELECT C1.CustID AS C1CustID,C1.CustName AS C1CustName,C1.CustCompany AS C1CustCompany,C2.CustID,C2.CustName,C2.CustCompany
 FROM Customers AS C1
 JOIN Customers AS C2
 ON C1.CustID=C2.CustID
       结果:
 
 
 
       6.2 示例结果分析
 
       如上例子为自连接在内连接中的运用,在其他连接中的运用就不举例子了,比较简单。
 
       6.3 小结
 
a.自连接为单个表取不同的别名,通过别名来连接;
b.自连接可以用于其它连接;
b.自连接可以看作交叉连接、内连接、外连接等连接的一个特例;
 
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读