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 OB亭盍誓叭JECT_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泌驾台佐39;, '中国北京');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 ainner join #tmp2 b on b.EName = a.EName and a.EAddress IS NOT NULL
6、使用INNER JOIN关联两张表,查询地址不为空的结果,推荐写法,join子句中不要带过滤条件,仅含关联条件select *from #tmp1 ainner join #tmp2 b on b.EName = a.ENamewhere a.EAddress IS NOT NULL
7、从上面两种写法的结果相同可以看出,使用inner join关联的情况,过滤语句写在join子句和where子句是一样的效果。 但是,其他关联,如left join条件写在两个地方的效果是不一样的