sqlserver数据库在查询过滤的时候,经常需要关联其他的表联合查询,当需要同时满足两张表的结果的时候,就可以使用INNERJOIN查询了
方法/步骤
1、创建一个临时表,用于演示sqlserver语法中的INNERJOIN使用IFOBJECT_ID('tempdb..#tmp1')ISNOTNULLDROPTABLE#tmp1;CREATETABLE#tmp1(ENamevarchar(50),--姓名EAddressvarchar(200)--地址);
2、创建另外一个临时表,用于演示sqlserver语法中的INNERJOIN使用IFOB亭盍誓叭JECT_ID('tempdb..#tmp2'像粜杵泳)ISNOTNULLDROPTABLE#tmp2;CREATETABLE#tmp2(ENamevarchar(50),--姓名ETitlevarchar(200)--头衔);
3、往临时表中插入几行测试数据,其中包辖艮鲔鸣括插入Null值insertinto#tmp1(EName,EAddress)values('员工1泌驾台佐39;,'中国北京');insertinto#tmp1(EName,EAddress)values('员工10',NULL);insertinto#tmp1(EName,EAddress)values('员工100','法国巴黎');insertinto#tmp2(EName,ETitle)values('员工1',NULL);insertinto#tmp2(EName,ETitle)values('员工10','职员');insertinto#tmp2(EName,ETitle)values('员工99','经理');
4、查询临时表中的测试数据select*from#tmp1;select*from#tmp2;
5、使用INNERJOIN关联两张表,查询地址不为空的结果,这种写法其实是不推荐的select*from#tmp1ainnerjoin#tmp2bonb.EName=a.ENameanda.EAddressISNOTNULL
6、使用INNERJOIN关联两张表,查询地址不为空的结果,推荐写法,join子句中不要带过滤条件,仅含关联条件select*from#tmp1ainnerjoin#tmp2bonb.EName=a.ENamewherea.EAddressISNOTNULL
7、从上面两种写法的结果相同可以看出,使用innerjoin关联的情况,过滤语句写在join子句和where子句是一样的效果。但是,其他关联,如leftjoin条件写在两个地方的效果是不一样的