在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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) --顾客公司 ) --Initial Customers INSERT INTO Customers VALUES('SXN-DD-01','赵武','A') INSERT INTO Customers VALUES('SXN-DD-02','刘杨','B') INSERT INTO Customers VALUES('SXN-DD-03','张永为','C') INSERT INTO Customers VALUES('SXN-DD-04','李龙飞','D') INSERT INTO Customers VALUES('SXN-FF-01','邓华','E') INSERT INTO Customers VALUES('SXN-HH-01','张涛明','F') 查询结果为: 创建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 小结
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 小结
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 小结
7问题答案 Q1:KEY CREATE TABLE Digits ( digit int not null primary key ) --Initial testing data for Digits INSERT INTO Digits VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9) --Query SELECT D3.digit*100+D2.digit*10+D1.digit+1 AS n FROM Digits AS D1 CROSS JOIN Digits AS D2 CROSS JOIN Digits AS D3 ORDER BY n 8参考文献 【01】Microsoft SqlServer 2008技术内幕:T-SQL语言基础 【02】Microsoft SqlServer 2008技术内幕:T-SQL查询 总结 以上所述是小编给大家介绍的SqlServer 表连接教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对极客世界网站的支持! |
请发表评论