很久没摸SQL语句了,最近在项目中用到了SQL,又捡起SQL中的内连接,左连接,右连接温习了一下,下面谈谈对它的理解。这个例子我是用SQL Server2008做的测试。
先看看一个简单的例子,有两个表TableA和TableB,两个表通过TableA的b_id列和TableB的id列连接。两个的表的如图
为做例子这两个表我添加了一些数据,如下图:
我们看到TableA和TableB有数据的交集,用红色的线条表示出了。下面我们就看看用内连接,左连接,右连接查询出的不同结果。
内连接:
select A.id, A.value, A.b_id, B.id,B.value
from sales.dbo.TableA A inner join sales.dbo.TableA B on A.b_id = B.id
或者写成下面这样,是等价的。
SELECT A.id, A.value, A.b_id, B.id,B.value
FROM sales.dbo.TableA A,sales.dbo.TableB B
where A.b_id = B.id
这是查询的结果:
我们可以看到查询出的结果就是连个表的交集部分。
下面左连接:
Select A.id, A.value, A.b_id, B.id, B.value
from sales.dbo.TableA A left outer join sales.dbo.TableB B on A.b_id = B.id
查询的结果:
我们看到查询维度是按照TableA进行的,结果集的行数和TableA的行数是一样的,每一行中,如果TableB有对应的值则显示,如果没有则为NULL。
再看看右连接:
Select A.id, A.value, A.b_id, B.id, B.value
from sales.dbo.TableA A right outer join sales.dbo.TableB B on A.b_id = B.id
查询结果:
我们看到查询维度是按照TableB进行的,结果集的行数和TableB的行数是一样的,每一行中,如果TableA有对应的值则显示,如果没有则为NULL。
所以内连接,左连接,右连接查询的结果用图来表示如下:
内连接的结果是蓝色C区域的部分,是两个table的数据的交集部分。
左连接是红色A区域的部分,是以TableA为维度,然后连接TableB的数据。
右连接是绿色B区域的部分,是以TableB为维度,然后连接TableA的数据。
需要说明的是,左连接和右连接的方向是相对的,我们可以这样理解:
<维度表> left outer join <事实表> on <条件>
<事实表> right outer join <维度表> on <条件>
所以
TableA left outer join TableB
和
TableB right outer join TableA
的含义是一样的,查询出的结果也是一样的。
以上是我SQL连接的个人理解,如果有不妥的地方或者大家有什么心得欢迎讨论!
- 大小: 6.9 KB
- 大小: 3.3 KB
- 大小: 5.2 KB
- 大小: 4.4 KB
- 大小: 14.7 KB
分享到:
相关推荐
本篇文章是对SQL中的四种连接-左外连接、右外连接、内连接、全连接进行了详细的分析介绍,需要的朋友参考下
本人自己试验,在过程中写的。...由于软件、程序时有更新,所以声明该文件适用于MyEclipse8.5与SQL Server 2008 R2的连接。驱动程序版本3.0. 文中有相关资源的下载网址
通过这外实例,可以快速理解如何用C#连接SQL数据库
详细安装步骤+个人理解
SQL Changeset 1 具体没有使用,因为他要连接VSS或者Team,按字面上的理解,应该是数据库变更通知. SQL Compare 数据库比较工具,这个是我最常用的工具,支持表,存储过程,函数,用户等的结构对比,并提供同步功能,有了它...
这里提供了java连接SqlServer数据库时所需要的jar包, 以及连接数据库的实例,这样大家就会很好的学习、与理解java与 sqlserver数据库的JDBC连接
全书可分为两部分,第一部分介绍了SQL语言不同寻常的使用技巧,带领读者从SQL常见技术,比如CASE表达式、自连接、HAVING子句、外连接、关联子查询、EXISTS……去探索新发现。这部分不仅穿插讲解了这些技巧背后的逻辑...
在SQLServer中,我们所常见的表与表之间的InnerJoin,OuterJoin都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为LoopJoin,MergeJoin,HashJoin这三种物理连接中的一种。理解这三种物理连接是...
jabc课件,让我们简单的理解什么是jdbc和一些库函数。让你有大体了解和认识。
java初学者很好的案例,连接Sql2000数据库,自带数据库,swing程序,很好理解。//创建ConnectionManager对象,连接数据库。并且返回连接字串
│ │ 2.1 日期概念理解中的一些测试.sql │ │ 2.2.4 CONVERT在日期转换中的使用示例.sql │ │ 2.3.3 SET DATEFORMAT对日期处理的影响.sql │ │ 2.3.4 SET LANGUAGE对日期处理的影响示例.sql │ │ 2.4.1 日期...
2. ASP与SQL数据库连接: dim conn set conn=server.createobject("ADODB.connection") con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 %> 建立...
,了解SQL语句的数据定义与数据更新功能,了解SQL语句的查询功能,掌握SQL中的数据定义语句的用法,熟练掌握SQL中的插入、修改和删除语句的操作,熟练掌握使用SQL语句进行数据库的简单查询、连接查询。 实验内容和...
在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理连接中的一种。理解这三种物理...
通过本次试验,掌握了如何用JDBC去连接一个数据库,以及数据库的工作原理,还有连接过程中容易出现的异常,掌握了通过ODBC去连接JDBC方法和过程,怎样设置数据源,同时加深了对java程序面向对象编程的理解。
这个问题测试考生对SQL连接的理解,这是关系数据库管理中的一个重要概念,以及他们将这些知识应用于实际情况的能力。
实现VB.net对sql server2008简单的增删改查。有图有代码,理解起来应该不难。第一次做项目 里面很多不足的地方,欢迎批评指正。
本资源为本人的课程实验报告,可用于学习基于SQL Server2008或SQL Server...实验3:数据库的统计查询、视图实验——掌握SQL Server 中的视图创建向导和图表创建向导的使用方法,加深对视图和SQL Server图表作用的理解。
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 其次,大家来看一些不错的sql...
《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》是Microsoft SQL Server 2008系列中的一本。书中全面深入地介绍了T-SQL的基本元素,以及SQL Server 2008中新增加的一些特性。主要包括SQL的基础理论、逻辑查询...