sqlserver关联查询的INNER JOIN使用写法
1、创建一个临时表,用于演示sqlserver语法中的INNER JOIN使用
IF OBJECT_ID('tempdb..#tmp1') IS NOT NULL DROP TABLE #tmp1;
CREATE TABLE #tmp1(
EName varchar(50), -- 姓名
EAddress varchar(200) -- 地址
);

2、创建另外一个临时表,用于演示sqlserver语法中的INNER JOIN使用
IF OBJECT_ID('tempdb..#tmp2') IS NOT NULL DROP TABLE #tmp2;
CREATE TABLE #tmp2(
EName varchar(50), -- 姓名
ETitle varchar(200) -- 头衔
);

3、往临时表中插入几行测试数据,其中包括插入Null值
insert into #tmp1(EName, EAddress) values('员工1', '中国北京');
insert into #tmp1(EName, EAddress) values('员工10', NULL);
insert into #tmp1(EName, EAddress) values('员工100', '法国巴黎');
insert into #tmp2(EName, ETitle) values('员工1', NULL);
insert into #tmp2(EName, ETitle) values('员工10', '职员');
insert into #tmp2(EName, ETitle) values('员工99', '经理');

4、查询临时表中的测试数据
select * from #tmp1;
select * from #tmp2;

5、使用INNER JOIN关联两张表,查询地址不为空的结果,这种写法其实是不推荐的
select *
from #tmp1 a
inner join #tmp2 b on b.EName = a.EName and a.EAddress IS NOT NULL

6、使用INNER JOIN关联两张表,查询地址不为空的结果,推荐写法,join子句中不要带过滤条件,仅含关联条件
select *
from #tmp1 a
inner join #tmp2 b on b.EName = a.EName
where a.EAddress IS NOT NULL

7、从上面两种写法的结果相同可以看出,使用inner join关联的情况,过滤语句写在join子句和where子句是一样的效果。 但是,其他关联,如left join条件写在两个地方的效果是不一样的
