mssql联表查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql联表查询相关的知识,希望对你有一定的参考价值。
要查询数据库其中三个表
表名:title
表:wen1
表:wen2
表名wen1和wen2是存取文章内容,由于文章数目过多,进行分表存取,有列名body,title,postusername,userid
表名title里记录文章标题列title,作者列username,作者列userID,文章所在所据库列wentable,wentable列中有wen1,wen2这样的数据
如何用一条查询命令按时间查询所有文章?
时间表为所有表相同,都有列名dateandtime
关健字是什么意思?
title表中wentable列中是wen1的话就去wen1表查询文章信息
title表中wentable列中是wen2的话就去wen2表查询文章信息
所以sql如下:
select * from(
select a.title,a.username,a.userID,b.body,b.postusername,b.dateandtime from title a, wen1 b where a.userID=b.userid and a.dateandtime=b.dateandtime and a.wentable='wen1'
union all
select a.title,a.username,a.userID,b.body,b.postusername,b.dateandtime from title a, wen2 b where a.userID=b.userid and a.dateandtime=b.dateandtime a.wentable='wen2'
)as tmp where dateandtime='你想要的时间'
说明:
1、上面的sql的主要意思是先查询title表中wentable列中是wen1的数据和wen1表关联,关联字段是 userid 和 dateandtime。
2、再按照同样的方法查询title表中wentable列中是wen2的数据和wen2表关联,关联字段是 userid 和 dateandtime。
3、把1和2 union all 后作为一个结果,在这个结果中查询你想要的时间的文章信息。
---
以上,希望对你有所帮助。 参考技术A select * from title left outer join wen1 on title.wentable=wen1.关键字
left outer join wen1 on title.wentable=wen2.关键字
你给的还不够详细,还有时间,在那个表里?
不过关键是 title表左全选连接wen1和wen2 参考技术B 这个很好解决呀~,3个表,在每个表中,至少有一个字段是文章编号的,我不知道你的字段名是什么,现假定为w_id,那么以下查询就可以实现你的要求
因为表wen1和wen2结构完全一样,只是分开保存数据,那么我们可以合并来查询
select a.* ,b.body,b.postusername, b.userid from title a left join
(select w_id,body,postusername,userid from wen1
union all
select w_id,body,postusername,userid from wen2
) b on a.w_id=b.w_id
看你需要那些字段,可以自己修改添加 参考技术C 合并查询
SQL语句详解——SQL联表查询
今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询。
一、SQL联表查询简介
在前文SQL语句详解(三)——SQL子查询中,我们给大家介绍了SQL子查询的相关知识和使用示例。实际上,如果涉及到SQL多个表之间的查询,使用SQL联表查询的频率比使用SQL子查询的频率要高。SQL联表查询是指以两个表中的一个共同的字段,在这两个表之间建立联系,查询两个表中的全部或部分字段。
SQL联表查询按照表结合方式的不同,可以分为内链接、外链接交叉链接和结果链接四种,其中外链接又可以分为左外链接和右外链接两种。
下面,我们就依次介绍这四种联表查询的使用。
本文中使用的三张表如下:
二、内链接
内链接指的是把两个表关联起来后,只有当两个表中共同有的数据才进行显示,内链接是最普通的联表查询,其使用示例为:
select 字段 from 表1 inner join 表2 on 连接条件
例如:
select name,score from student inner join grade on student.Sid=grade.id;
由于在默认情况下join为内链接,因此上例中inner关键字可以省略,至于前面的字段,如果在两个表中没有相同的字段,则可以直接写字段名,如果两个表中有相同的字段名,则必须指名该字段属于哪个表,上述示例修改后,命令如下:
select student.name,grade.score from student join grade on student.Sid=grade.id;
另外,有时,如果表的名字过长,SQL语句在书写起来就不太方便。MySQL支持给一个表起一个别名。例如,在上例中,我们还给student表起一个别名s,给grade表起一个别名g,别名必须在from字段后予以声明,这样,上例修改后如下:
select s.name,g.score from student s join grade g o s.Sid=g.id;
上述命令执行结果如下:
三、外链接
外链接可以分为左外链接和右外链接,其实这两种方式在本质上是相同的。如果说内链接是两个表都有数据时才会显示,那么外链接就是主表中有数据就显示,而不管从表。对于左外链接来说,from后面紧跟着的表就是主表,而对于右外链接来说,则正好相反,join后面紧跟着的表是主表。
四、交叉链接
交叉链接,不设置联表条件,join前面可以加一个关键字cross,也可以不加。交叉链接表示两个表中的元素按照排列组合的方式进行逐个对应。交叉链接SQL示例如下:
select name,score from student s cross join grade g;
执行结果如下:
五、结果链接
所谓结果链接,就是将两个select查询的结果合并显示,union语句用于连接两个不同的select语句,如下所示:
select name from studeng union select score from grade;
执行结果如下:
注意,如果这union结果连接的两个SQL语句存在相同的数据,则在最终的结果中,这些数据会被合并,如果不想让这些数据被合并,则可以在union后面添加关键词all,SQL语句如下:
select id from student union all select id from course;
执行结果如下:
不加all关键字之前:
加all关键字之后:
注意,使用SQL结果链接时,必须保证这两个select语句返回相同的列数,否则MySQL数据库会报错,如下所示:
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
以上是关于mssql联表查询的主要内容,如果未能解决你的问题,请参考以下文章