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

2016-01-29 15:57 13 1 收藏

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

【 tulaoshi.com - SQLServer 】

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

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

  表的别名:

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)

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

  爱丁堡公交线路,

  车站表:

  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'

来源:http://www.tulaoshi.com/n/20160129/1496862.html

延伸阅读
标签: Web开发
众所周知,网站制作涉及到了各个方面的知识,包括平面设计、HTML页面制作、CSS样式定义、客户端脚本编写(JavaScrfipt/VBScript)、服务器端脚本编写(Asp/Asp.Net/PHP/JSP)等诸多内容。本期笔者从最基础的讲起,着重介绍怎样制作一个简单的HTML网站,初步体会一下其中的乐趣。 1.这里笔者使用的网页制作工具是Dreamweaver。首先运行...
标签: Web开发
事件是用来通知使用控件的程序员,某件事情发生了,好让程序员可以相应的处理。事件在VB编程中比比皆是,例如,当鼠标点击控件事会发生Click事件,文本框内容改变了会发生Change事件,等等。但这儿要讲的不同于这些东西,也不同于InitProperties,ReadProperties,WriteProperties前面提到过的事件,那些是系统已经定义好了的。我们要做的是定义自...
前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理、DOS平台控制以及基于WIN32 API、控件和第三方类的串口编程。作为本系列文章的最后一次连载,本章将给出一个典型的应用实例:西门子短信服务模块TC35的串口控制。 1.短信控制终端 作为短信 (Short Message Service,SMS)一族,想必你有这样的体会:用手机编辑短信息十分不便...
随着计算机网络技术的突飞猛进,网络安全的问题已经日益突出地摆在各类用户的面前。仅从笔者掌握的资料表明,目前在互联网上大约有将近20%以上的用户曾经遭受过黑客的困扰。尽管黑客如此猖獗,但网络安全问题至今仍没有能够引起足够的重视,更多的用户认为网络安全问题离自己尚远,这一点从大约有40%以上的用户特别是企业级用户没有安装防火墙(...
Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载: (1)直接编译进Linux内核,随同Linux启动时加载; (2)编译成一个可加载和删除的模块,使用insmod加载(modprobe和insmod命令类似,但依赖于相关的配置文件),rmmod删除。这种方式控制了内核的大小,而模块一旦被插入内核,它就和内核其他部...

经验教程

465

收藏

14
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部