详解数据库多表连接查询的实现方法

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table [ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city
(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或 LEFT OUTER JOIN;RIGHT JOIN 或 RIGHT OUTER JOIN;FULL JOIN 或 FULL OUTER JOIN。
(1)左向外联接:左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
(2)右向外联接:右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(3)完整外部联接:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。
如下面使用左外连接将论坛内容和作者信息连接起来:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
SELECT a.*,b.* FROM city as a FULL OUTER JOIN user as b ON a.username=b.username
(三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
SELECT type,pub_name FROM titles CROSS JOIN publishers ORDER BY type
如有疑问请留言或者到本站社区交流讨论,希望通过本文能帮助到大家,谢谢大家对本站的支持!
# 详解数据库多表连接查询
# 数据库多表查询
# MySQL
# 多表查询的实现方法
# asp.net实现的MVC跨数据库多表联合动态条件查询功能示例
# sqlserver 多表查询不同数据库服务器上的表
# 向外
# 子句
# 运算符
# 行数
# 笛卡尔
# 三种
# 句中
# 查询结果
# 以对
# 第一个
# 多个
# 中有
# 第二个
# 相匹配
# 的是
# 为左
# 数据库管理系统
# 放在
# 都不
# 如有
相关文章:
建站主机CVM配置优化、SEO策略与性能提升指南
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何快速搭建安全的FTP站点?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
学校建站服务器如何选型才能满足性能需求?
建站之星安装提示数据库无法连接如何解决?
盐城做公司网站,江苏电子版退休证办理流程?
如何实现建站之星域名转发设置?
大同网页,大同瑞慈医院官网?
建站10G流量真的够用吗?如何应对访问高峰?
如何挑选高效建站主机与优质域名?
如何通过西部建站助手安装IIS服务器?
建站之星后台管理如何实现高效配置?
如何快速搭建二级域名独立网站?
建站VPS能否同时实现高效与安全翻墙?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
c# 在高并发场景下,委托和接口调用的性能对比
TestNG的testng.xml配置文件怎么写
深圳网站制作平台,深圳市做网站好的公司有哪些?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何通过免费商城建站系统源码自定义网站主题与功能?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何通过山东自助建站平台快速注册域名?
在线制作视频的网站有哪些,电脑如何制作视频短片?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何通过云梦建站系统实现SEO快速优化?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何彻底卸载建站之星软件?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何通过VPS搭建网站快速盈利?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
建站主机数据库如何配置才能提升网站性能?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何设置并定期更换建站之星安全管理员密码?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何批量查询域名的建站时间记录?
宝塔建站助手安装配置与建站模板使用全流程解析
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
C#如何使用XPathNavigator高效查询XML
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何解决ASP生成WAP建站中文乱码问题?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
*请认真填写需求信息,我们会在24小时内与您取得联系。