sqlserver关联查询的INNER JOIN使用写法

2025-10-10 13:23:04

1、创建一个临时表,用于演示sqlserver语法中的INNER JOIN使用

IF OBJECT_ID('tempdb..#tmp1') IS NOT NULL DROP TABLE #tmp1; 

CREATE TABLE #tmp1(

    EName varchar(50),          -- 姓名

    EAddress varchar(200)       -- 地址

);

sqlserver关联查询的INNER JOIN使用写法

2、创建另外一个临时表,用于演示sqlserver语法中的INNER JOIN使用

IF OBJECT_ID('tempdb..#tmp2') IS NOT NULL DROP TABLE #tmp2; 

CREATE TABLE #tmp2(

    EName varchar(50),          -- 姓名

    ETitle varchar(200)         -- 头衔

);

sqlserver关联查询的INNER JOIN使用写法

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', '经理');

sqlserver关联查询的INNER JOIN使用写法

4、查询临时表中的测试数据

select * from #tmp1;

select * from #tmp2;

sqlserver关联查询的INNER JOIN使用写法

5、使用INNER JOIN关联两张表,查询地址不为空的结果,这种写法其实是不推荐的

select * 

from #tmp1 a

inner join #tmp2 b on b.EName = a.EName and a.EAddress IS NOT NULL 

sqlserver关联查询的INNER JOIN使用写法

6、使用INNER JOIN关联两张表,查询地址不为空的结果,推荐写法,join子句中不要带过滤条件,仅含关联条件

select * 

from #tmp1 a

inner join #tmp2 b on b.EName = a.EName 

where a.EAddress IS NOT NULL 

sqlserver关联查询的INNER JOIN使用写法

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

sqlserver关联查询的INNER JOIN使用写法

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢