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  阅读(33)  评论(0)    收藏  举报

导航