当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 深入浅出SQL教程之SELECT语句的自连接

MSSQL
J2EE基础应用:J2EE中SQL语句自动构造方法
SQL Server asp.net 数据提供程序连接池
SQL Server的怪辟:异常与孤立事务
一个修改Oracle数据库用户密码的小诀窍
SQL和Oracle对数据库事务处理的差异性
SQL SERVER应用问题解答13例(三)
设置Proxy Server和SQL Server实现互联网上数据库的安全
SQL Server 7.0 入门(一)
SQL Server 7.0 入门(二)
SQL Server 7.0 入门(三)
SQL Server 7.0 入门(四)
SQL Server 7.0 入门(五)
SQL Server 7.0 入门(七)
SQL Server 7.0 入门(八)
SQL Server XML 和 Web 应用体系结构(一)8
SQL Server XML 和 Web 应用体系结构(二)
SQL Server同Exchange Server结合应用--SQL Mail2
使用SQL Server 7.0建立一个安全的数据库的最好方法是
分布式查询和分布式事务
在SQL Server的存储过程中调用Com组件

MSSQL 中的 深入浅出SQL教程之SELECT语句的自连接


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 94 ::
收藏到网摘: n/a

到目前为止,我们连接的都是两张不同的表,那么能不能对一张表进行自我连接呢?答案是肯定的。

  有没有必要对一张表进行自我连接呢?答案也是肯定的。

  表的别名:

  一张表可以自我连接。进行自连接时我们需要一个机制来区分一个表的两个实例。

  在FROM clause(子句)中我们可以给这个表取不同的别名, 然后在语句的其它需要使用到该别名的地方用dot(点)来连接该别名和字段名。

  我们在这里同样给出两个表来对自连接进行解释。

  爱丁堡公交线路,

  车站表:

  stops(id, name)

  公交线路表:

  route(num, company, pos, stop)

  一、对公交线路表route进行自连接。

SELECT * FROM route R1, route R2 WHERE R1.num=R2.num AND R1.company=R2.company

  我们route表用字段(num, company)来进行自连接. 结果是什么意思呢?

  你可以知道每条公交线路的任意两个可联通的车站。

  二、用stop字段来对route(公交线路表)进行自连接。

SELECT * FROM route R1, route R2 WHERE R1.stop=R2.stop;

  查询的结果就是共用同一车站的所有公交线。这个结果对换乘是不是很有意义呢。

  从这两个例子我们可以看出,自连接的语法结构很简单,但语意结果往往不是那么容易理解。就我们这里所列出的两个表,如果运用得当,能解决很多实际问题,例如,任意两个站点之间如何换乘。

SELECT R1.company, R1.num FROM route R1, route R2, stops S1, stops S2
WHERE R1.num=R2.num AND R1.company=R2.company AND R1.stop=S1.id AND R2.stop=S2.id
AND S1.name='Craiglockhart' AND S2.name='Tollcross'