温习sql语句中JOIN的各种操作(SQL2005环境)

温习sql语句中JOIN的各种操作(SQL2005环境)

为了方便测试,先建二个基本表T_Employee(员工表),T_Region(地区表) Sql语句如下: CREATE TABLE [dbo].[T_Employee](  [ID] [int] NULL,  [Name] [nvarchar](50)  NULL,  [RegionID] [int] NULL ) ON [PRIMARY]

CREATE TABLE [dbo].[T_Region](  [ID] [int] NULL,  [Name] [nvarchar](50)  NULL ) ON [PRIMARY]

录入几条测试数据

T_Employee员工的测试数据:

ID Name RegionId 1 Jimmy 1 2 Rose 2 3 Tom 3 4 Mike 4 5 Unknown 9 6 Jessica 0 7 Mary -1 8 Janson 8 NULL ALLEmpty NULL NULL Empty1 3 NULL Empty2 -2 9 Emplty3 NULL

T_Region地区表的测试数据:

ID Name  1 湖北省 2 上海市 3 广东省 4 山西省 5 杭州市 6 江西省 NULL 空地区

以下是各种测试的语句以及查询结果 1.[JOIN]

select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e JOIN T_Region as r ON e.regionId=r.Id 查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 4 Mike 4 山西省 NULL Empty1 3 广东省

2.[INNER JOIN]

select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e INNER JOIN T_Region as r ON e.regionId=r.Id 查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 4 Mike 4 山西省 NULL Empty1 3 广东省 

与1.结果相同

3.[FULL JOIN]

select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e FULL JOIN T_Region as r ON e.regionId=r.Id

查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 4 Mike 4 山西省 5 Unknown NULL NULL 6 Jessica NULL NULL 7 Mary NULL NULL 8 Janson NULL NULL NULL ALLEmpty NULL NULL NULL Empty1 3 广东省 NULL Empty2 NULL NULL 9 Emplty3 NULL NULL NULL NULL 5 杭州市 NULL NULL 6 江西省 NULL NULL NULL 空地区

4.[FULL OUTER JOIN]

select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e FULL OUTER JOIN T_Region as r ON e.regionId=r.Id

查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 4 Mike 4 山西省 5 Unknown NULL NULL 6 Jessica NULL NULL 7 Mary NULL NULL 8 Janson NULL NULL NULL ALLEmpty NULL NULL NULL Empty1 3 广东省 NULL Empty2 NULL NULL 9 Emplty3 NULL NULL NULL NULL 5 杭州市 NULL NULL 6 江西省 NULL NULL NULL 空地区

与3.结果相同

4.[LEFT JOIN]

select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e LEFT JOIN T_Region as r ON e.regionId=r.Id 查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 4 Mike 4 山西省 5 Unknown NULL NULL 6 Jessica NULL NULL 7 Mary NULL NULL 8 Janson NULL NULL NULL ALLEmpty NULL NULL NULL Empty1 3 广东省 NULL Empty2 NULL NULL 9 Emplty3 NULL NULL

5.[LEFT OUTER JOIN] select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e LEFT OUTER JOIN T_Region as r ON e.regionId=r.Id 查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 4 Mike 4 山西省 5 Unknown NULL NULL 6 Jessica NULL NULL 7 Mary NULL NULL 8 Janson NULL NULL NULL ALLEmpty NULL NULL NULL Empty1 3 广东省 NULL Empty2 NULL NULL 9 Emplty3 NULL NULL

与4.结果相同 

6.[RIGHT JOIN]

select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e RIGHT JOIN T_Region as r ON e.regionId=r.Id

查询结果: EmpId EmpName RegionId RegionName  1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 NULL Empty1 3 广东省 4 Mike 4 山西省 NULL NULL 5 杭州市 NULL NULL 6 江西省 NULL NULL NULL 空地区

7.[RIGHT OUTER JOIN] select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e RIGHT OUTER JOIN T_Region as r ON e.regionId=r.Id

查询结果: EmpId EmpName RegionId RegionName  1 Jimmy 1 湖北省 2 Rose 2 上海市 3 Tom 3 广东省 NULL Empty1 3 广东省 4 Mike 4 山西省 NULL NULL 5 杭州市 NULL NULL 6 江西省 NULL NULL NULL 空地区 与6.结果相同

8.[CROSS JOIN] select  e.id as EmpId,  e.name as EmpName,  r.id as RegionId,  r.name as RegionName  from T_Employee as e CROSS JOIN T_Region as r 查询结果: EmpId EmpName RegionId RegionName 1 Jimmy 1 湖北省 2 Rose 1 湖北省 3 Tom 1 湖北省 4 Mike 1 湖北省 5 Unknown 1 湖北省 6 Jessica 1 湖北省 7 Mary 1 湖北省 8 Janson 1 湖北省 NULL ALLEmpty 1 湖北省 NULL Empty1 1 湖北省 NULL Empty2 1 湖北省 9 Emplty3 1 湖北省 1 Jimmy 2 上海市 2 Rose 2 上海市 3 Tom 2 上海市 4 Mike 2 上海市 5 Unknown 2 上海市 6 Jessica 2 上海市 7 Mary 2 上海市 8 Janson 2 上海市 NULL ALLEmpty 2 上海市 NULL Empty1 2 上海市 NULL Empty2 2 上海市 9 Emplty3 2 上海市 1 Jimmy 3 广东省 2 Rose 3 广东省 3 Tom 3 广东省 4 Mike 3 广东省 5 Unknown 3 广东省 6 Jessica 3 广东省 7 Mary 3 广东省 8 Janson 3 广东省 NULL ALLEmpty 3 广东省 NULL Empty1 3 广东省 NULL Empty2 3 广东省 9 Emplty3 3 广东省 1 Jimmy 4 山西省 2 Rose 4 山西省 3 Tom 4 山西省 4 Mike 4 山西省 5 Unknown 4 山西省 6 Jessica 4 山西省 7 Mary 4 山西省 8 Janson 4 山西省 NULL ALLEmpty 4 山西省 NULL Empty1 4 山西省 NULL Empty2 4 山西省 9 Emplty3 4 山西省 1 Jimmy 5 杭州市 2 Rose 5 杭州市 3 Tom 5 杭州市 4 Mike 5 杭州市 5 Unknown 5 杭州市 6 Jessica 5 杭州市 7 Mary 5 杭州市 8 Janson 5 杭州市 NULL ALLEmpty 5 杭州市 NULL Empty1 5 杭州市 NULL Empty2 5 杭州市 9 Emplty3 5 杭州市 1 Jimmy 6 江西省 2 Rose 6 江西省 3 Tom 6 江西省 4 Mike 6 江西省 5 Unknown 6 江西省 6 Jessica 6 江西省 7 Mary 6 江西省 8 Janson 6 江西省 NULL ALLEmpty 6 江西省 NULL Empty1 6 江西省 NULL Empty2 6 江西省 9 Emplty3 6 江西省 1 Jimmy NULL 空地区 2 Rose NULL 空地区 3 Tom NULL 空地区 4 Mike NULL 空地区 5 Unknown NULL 空地区 6 Jessica NULL 空地区 7 Mary NULL 空地区 8 Janson NULL 空地区 NULL ALLEmpty NULL 空地区 NULL Empty1 NULL 空地区 NULL Empty2 NULL 空地区 9 Emplty3 NULL 空地区 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端生活

MySQL(九)DQL之子查询

1558
来自专栏Java后端生活

MySQL(七)DQL之分组查询

1655
来自专栏测试开发架构之路

分分钟搞懂union与union all

SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的...

3479
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

33311
来自专栏你不就像风一样

Mysql字段名与保留字冲突导致的异常解决

822
来自专栏数据分析

[数据库基础]——图解JOIN

一、概要 JOIN对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种JOIN,还有很多人对这个理解也不是很透彻,这次就说说JOIN操作。 图片是很容易被...

3469
来自专栏Netkiller

PostgreSQL·账户表/余额表/消费储蓄表

本文节选自《Netkiller Architect 手札》 4.22.3. 账户表/余额表/消费储蓄表 此表适用于购物车等金钱来往账面等等。 -- Tabl...

3175
来自专栏Netkiller

PostgreSQL·国家地区表的设计

本文节选自《Netkiller Architect 手札》 4.22. PostgreSQL 所特有数据库设计 4.22.1. 国家地区表的设计 +-----...

3214
来自专栏个人随笔

MySQL高级查询

 高级查询     关键字书写顺序  关键字执行顺序 select:投影结果       1    5 from:定位到表             2   ...

7859
来自专栏测试开发架构之路

SQL语句之奇形怪状的冷门函数

lag() over() SELECT C.*,LAG(C.column,1) OVER(ORDER BY C.column) FROM Table C; 第...

2953

扫码关注云+社区

领取腾讯云代金券