T-SQL多表联接查询

多表联接

SQL SERVER是关系型数据库系统,在数据规范化的设计条件下,

要查询一份有意义的数据内容一般需要联接(JOIN)多个表,T-SQL

提供了联接语句,实现表的水平联接,结果会包含所有表的所有字

段,如果是需要垂直联接合并表,需要使用 Union,Except和

INTERSECT等命令,

1、水平联接

格式1

SELECT * FROM TABLE1,TABLE2 WHERE TABLE1.A = TABLE2.A

格式2

SELECT * FROM TABLE1 JOIN TABLET2 ON TABLE1.A = TABLE2.A

新版本一般是格式2,格式1是老板版的sql语句。两者都可以使用。

联接类型包括

内部联接(inner join)

外部联接(outer join)

交叉联接(cross join)

(1)、内部链接(inner join)

查询员工当年的销售总额度。

 

逻辑上,执行联接语句,会临时产生一个"联接表",通过笛卡尔积列出两个表所有的组合。

通过联接条件,筛选数据。

另外,所有行引用必须准确。如果多个表中有同名的列,必须加表名限定。同时为了简便,可以将表名起简单的别名。

(2)、外部联接(outer join)

外联接主要用于两个表不一定含有相同的数据的情况,如上面,如果新来的员工还没有订单,还没有销售额度,如果

利用内联接,就会数据不完整或者完美。外部联接就可以实现这个功能。

外部联接包含三种情况,

LEFT OUTER JOIN

RIGHT OUTER JOIN

FULL OUTER JOIN

一般会省去 outer,

left join,表示左边的基表数据完整行,

right join ,表示右边基表的数据完整行

full join ,表示两边所有的完整行。

 

full join 后面有具体应用在介绍

3、Cross join

略

除了上面经常使用联接,还有几种特殊的应用

4、表自身联接(self join)

如果需要查询的表时自身记录间的比较,需要用到self join。

例如,查找同一个城市的员工

 

以上的情况实际开发中会很少用。员工,主管同属于员工表,

但是员工一般会对应一个主管,这个经常用到。

 

查看今年与去年的订单的数量,并对比。如下图

 

主要关注红框的表示,其他部分,后面介绍。

posted on 2026-05-24 16:56  panpeng666  阅读(40)  评论(0)    收藏  举报

导航