设为首页 加入收藏

TOP

全面解析SQLSERVER的左右内连接(二)
2014-11-23 22:20:17 来源: 作者: 【 】 浏览:64
Tags:全面 解析 SQLSERVER 左右 连接
OM TABLE_ONE RIGHT JOIN TABLE_TWO
ON TABLE_ONE.ID=TABLE_TWO.ID;

1 张三 90
1 张三 95
1 张三 98
1 张三 99


--内连接
SELECT TABLE_ONE.ID,TABLE_ONE.NAME,TABLE_TWO.SCORE
FROM TABLE_ONE INNER JOIN TABLE_TWO
ON TABLE_ONE.ID=TABLE_TWO.ID;

1 张三 90
1 张三 95
1 张三 98
1 张三 99

4,下面就是极端的情况下,产生的是笛卡尔积。即两个表的记录数相乘个记录数。

truncate table BI.DBO.TABLE_ONE;
truncate table BI.DBO.TABLE_TWO;

INSERT INTO BI.DBO.TABLE_ONE VALUES(1,'张三');
INSERT INTO BI.DBO.TABLE_ONE VALUES(1,'李四');
INSERT INTO BI.DBO.TABLE_ONE VALUES(1,'王五');
INSERT INTO BI.DBO.TABLE_ONE VALUES(1,'刘六');
GO
INSERT INTO BI.DBO.TABLE_TWO VALUES(1,90);
INSERT INTO BI.DBO.TABLE_TWO VALUES(1,95);
INSERT INTO BI.DBO.TABLE_TWO VALUES(1,98);
INSERT INTO BI.DBO.TABLE_TWO VALUES(1,99);
GO

--左连接
SELECT TABLE_ONE.ID,TABLE_ONE.NAME,TABLE_TWO.SCORE
FROM TABLE_ONE LEFT JOIN TABLE_TWO
ON TABLE_ONE.ID=TABLE_TWO.ID;

--右连接
SELECT TABLE_ONE.ID,TABLE_ONE.NAME,TABLE_TWO.SCORE
FROM TABLE_ONE RIGHT JOIN TABLE_TWO
ON TABLE_ONE.ID=TABLE_TWO.ID;


--内连接
SELECT TABLE_ONE.ID,TABLE_ONE.NAME,TABLE_TWO.SCORE
FROM TABLE_ONE INNER JOIN TABLE_TWO
ON TABLE_ONE.ID=TABLE_TWO.ID;

1 张三 90
1 张三 95
1 张三 98
1 张三 99
1 李四 90
1 李四 95
1 李四 98
1 李四 99
1 王五 90
1 王五 95
1 王五 98
1 王五 99
1 刘六 90
1 刘六 95
1 刘六 98
1 刘六 99

在这种情况下得出的结果集都是14条记录。

结论: 无论左,右连接得到的结果集的记录数肯定是大于等于主表的记录数的,而内连接的结果集可以是小于,等于,大于连接的表的记录数的。

左,右还是内连接表的一个重要的用处:可以横行的扩展一个表,可以得到一个有更多属性的新的表。

UNION 可以纵向的增加一个表的记录行数。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sqlforxmlquerysample 下一篇sqlite3触发器的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: