温习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 空地区 
 
 
 

 

时间: 2024-08-24 23:47:49

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

SQL点滴2—重温sql语句中的join操作

原文:SQL点滴2-重温sql语句中的join操作 1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,RIGHT,一个表或视图也可以可以和它自身做JOIN操作.下面举例说明.下面所举的例子使用的表有Employee和Department,在这两个表中Department.DepartmentID是主键,Employee.DepartmentID是外键. 图1-Employee表 LastName De

在ASP中使用SQL语句之9:表单操作

语句 从某个页面表单中取出信息是ASP编程中常见的问题.但是,遍历通过表单传递的记录会花去多长时间呢?这取决于数据库的大小.简单的GUI界面都可能令循环遍历操作耗费太多的时间. 比方说,假设有个团队成员登录到GUI屏幕输入自己的名字姓氏和名字之间用点号连接:amy.cowen.这个值通过表单提交,她的当前项目列表就从数据库中取了出来并显示在屏幕上.为了快速地取出用户的记录以便显示在屏幕上,你可以编写以下代码. 假设HTML页面上包含以下代码:<FORM ACTION="login_post

sql语句中left join、inner join中的on与where的区别

原文:sql语句中left join.inner join中的on与where的区别 table a(id, type): id     type ---------------------------------- 1      1         2      1          3      2          table b(id, class): id    class --------------------------------- 1      1 2      2 sql语

MySQL SQL语句之join过滤注意事项

对于SQL语句的JOIN语句,大家并不陌生.关于其中的where语句中进行内容过滤还是在 On 语句中或者having进行过滤,这个是值得注意的. 案例:找出某段时间内注册的新用户,没有通过新手任务当中具体哪一步任务,统计 其中涉及到两张表 用户基础表:user_base,  user_id, 注册时间 created_at 任务表: user_id,task_id,task_status A 语句: select  min(b.task_id) life,task_status,  a.use

解析sql语句中left

以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下   table a(id, type): id     type ---------------------------------- 1      1         2      1          3      2          table b(id, class): id    class -------------------------------

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别  SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入

c++-如何利用C++来解析SQL语句中的select语句?

问题描述 如何利用C++来解析SQL语句中的select语句? SELECT * FROM stu WHERE ((Name = "Jack") AND ((Age > 18) OR (Height > 170))) 这是一条SQL语句,怎么用C++解析它,并从内存数据中输出结果?求大神给点思路即可.... 解决方案 你是要解析?还是要执行? 如果要执行SQL语句,需要学习ADO编程,可以百度一下vc ado编程. 解决方案二: 有c++和数据库对接的各种库的,mysql的

dedecms-织梦中标签里面的sql语句中arc是什么表?

问题描述 织梦中标签里面的sql语句中arc是什么表? 这是arclist标签中的一段. 这个arc是什么表,估计是dede_archives ,但是怎么能这样写的呢? $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart, tp.moresite,tp.siteurl,tp.sitepath $addfields

怎么在SQL语句中再加一个字段呀!

问题描述 怎么在SQL语句中再加一个字段呀! String sql = "select tab.nid,tab.tid,tab.pdate,tab.psysdate,tab.pprice,tab.prodname," + "tab.auditstatus,tab.pnumber,tab.zprice,tab.companyId,tab.sno,tab.soeno,tab.provname from " + "(select n.id nid,t.id ti