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 可以纵向的增加一个表的记录行数。