SQL Server外连接、内连接、交叉连接
小编在做组织部维护最后收尾工作的时候,遇到了这样一个问题,须要将定性考核得分查出来、定量考核相应的数据查出来并进行得分计算、附加分查出来,最后将这三部分信息汇总之后得到总成绩,假设当中一项成绩没有进行计算那么是能够得到成绩的。
展望师哥他们曾经的逻辑。通过两个视图将定性和定量得分计算保存之后。再用一个视图将三个得分连到一起并进行计算。
被组长规定仅仅能用SQL语句来写,由于这样维护起来就非常方便了。
我開始先用了级联查询并计算,但是效果并不太理想。最后了解到连接查询,经过重复试验,最终有了下面成果:
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT
--总排名
ROW_NUMBER() OVER(ORDER BY ISNULL((h.AdditionalResults),0) + f.TotalScores ) AS 总排名 ,
--园区ID
f.ObjectID AS 市直单位id,
--园区名称
f.Responsibility AS 开发区园区名称,
--年份
f.YearTime AS 年份,
--定量总得分
f.QuantifyScores as 定量总得分,
--附加分
ISNULL((h.AdditionalResults),0) AS 奖惩总得分,
--最总定量+定性+附加总分
ISNULL((h.AdditionalResults),0) + f.TotalScores AS 总得分
from
--汇总,通过左链接链接之后,查询以下信息,并将定性和定量总得分汇总
(SELECT
--园区ID
c.ObjectID,
--园区名称
c.Responsibility,
--年份
e.YearTime,
--定量总得分
ISNULL((c.QuantifyScores),0) AS QuantifyScores,
--定性定量总得分
ISNULL((e.CalculateScores),0) + ISNULL((c.QuantifyScores),0) AS TotalScores
FROM
--第一层查询,查询到定性总得分当成基表
(SELECT
--园区ID
d.DevelopmentID,
--考核时间
d.YearTime,
--定性总得分
d.CalculateScores
FROM
T_DevelopmentScores d) e
--和第一层并列的查询,查询到定量信息并计算出定量总分
left JOIN
(SELECT
--园区ID
a.ObjectID,
--园区名称
a.Responsibility,
--计算并显示定量总得分
ISNULL(CAST(a.score AS real), 0)*ISNULL(CAST(b.Weight AS real), 0) / 100 AS QuantifyScores
FROM
T_DevelopmentQuantifyScores a,
T_DevelopmentQuantifyTarget b
WHERE a.TragetID = b.TragetID ) c ON e.DevelopmentID = c.ObjectID) f
--和定量定性得分汇总并列,通过左链接查询到以下附加分
LEFT JOIN
(SELECT
--园区ID
g.DevelopmentID,
--附加分
g.AdditionalResults
FROM
T_DevelopmentAdditionalResults g) h ON f.ObjectID = h.DevelopmentID</span>
尝到了SQL语句中连接的甜头,于是小编在网上搜索之后并自己实践,有了以下成果:
举例介绍
以下的内容介绍将会分别用以下两个表进行试验
外连接
左连接(left join或者left outer join):
说明:以左表为基础,查询右表中全部符合条件的信息,不存在的用Null补充
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a LEFT JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>
结果例如以下:
右连接(right join或者right outer join)
说明:以右表为基础,查询左表中全部符合条件的信息,不存在的用Null补充
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a right JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>
结果例如以下:
全然连接(full join或者full outer join)
说明:将两个表中的信息都查出来,没有相应的信息,用Null补充
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a full JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>
结果例如以下:
内连接(inner join)
说明:仅仅显示符合条件的信息,条件能够是(=、<、>、<>、<=、>=、!<、!>),以下仅仅介绍条件为=的内容
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a inner JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>
结果例如以下:
交叉连接(cross join)
无条件
说明:将查到两个表中的全部数据的乘积(假设每一个表中都有3行数据,最后显示3*3=9行数据)
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 cross JOIN dbo.TestTable2
--上面与以下的语句等价
SELECT * FROM dbo.Testtable1, dbo.TestTable2</span>
结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
有条件
说明:将上面查到的无条件的结果依照条件进行筛选可是这里仅仅能用where表示不能用on表示
<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a cross JOIN dbo.TestTable2 b WHERE a.Hobbyid = b.Hobbyid</span>
结果例如以下:
总结
小编将这句话送给自己以及全部的读者:
在将来的路上,了解一块东西就将它的来龙去脉缕个通,并进行总结,这样以后的路将会更加通畅!
SQL Server外连接、内连接、交叉连接的更多相关文章
- 全面解析SQL SERVER 的左右内连接
SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...
- 【SQL】连接 —— 内连接、外连接、左连接、右连接、交叉连接
连接 · 内连接 · 外连接 · 左连接 · 右连接 · 全连接 · 交叉连接 · 匹配符号(+) 连接 根据表之间的关系,呈现跨表查询的结果. 外连接 内连接 左连接 右连接 全 ...
- SQL Server DAC——专用管理员连接
今天打开数据库刚要连接时,看到“连接到服务器”窗口,突发的想到:要是SQL Server 不再响应正常的连接请求,又想使用数据库时,我们该怎么办? 其实我们还能通过“SQL Server D ...
- JDBC与SQL SERVER各个版本的连接方法
转至:blog.csdn.net/ying5420/article/details/4488246 1.SQL SERVER 2000 JDBC驱动程序:msbase.jar.mssqlserver. ...
- 解决SQL Server管理器无法连接远程数据库Error: 1326错误
解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例 ...
- SQL Server 2005无法远程连接的解决方法
以前一直连接本地的数据库,连接SQL Server 2005是小菜的... 做项目也是老师搭好了服务器端,打上IP去访问就行...也不用考虑太多. 今天自己在公司搭SQL Server 2005服务器 ...
- JDBC连接SQL server与ADO.NET连接Sql Server对比
JDBC连接SQL server与ADO.NET连接Sql Server对比 1.JDBC连接SQL server 1)java方面目前有很多驱动能够驱动连接SQL servernet. 主流的有 ...
- 利用Ring Buffer在SQL Server 2008中进行连接故障排除
原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...
- sql server 2008 64位连接sql 2000服务器的时候出现
来源 https://blog.csdn.net/loeley/article/details/7095741 sql server 2008 64位连接sql 2000服务器的时候出现以下提示: 链 ...
- SQL Server 2005无法远程连接的解决方法 (转帖)
方法如下: 一.为 SQL Server 2005 启用远程连接1. 单击"开始",依次选择"程序"."Microsoft SQL Server 2 ...
随机推荐
- 洛谷 P1072 Hankson 的趣味题
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...
- O(∩_∩)O哈哈~
原文发布时间为:2009-04-30 -- 来源于本人的百度文章 [由搬家工具导入]
- poj 3254 Corn Fields 状压dp入门
题目链接 题意 在\(M\times N\)的\(0,1\)格子上放东西,只有标记为\(1\)的格子可以放东西,且相邻的格子不能同时放东西.问有多少种放法. 思路 参考:swallowblank. \ ...
- 转 vim常用命令总结
vim常用命令总结 vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v 从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束 ...
- springBoot 编写接口
@Slf4j @RestController public class testController { @Autowired StringRedisTemplate redis; @RequestM ...
- Codeforces Round #467 (Div. 2) B. Vile Grasshoppers[求去掉2-y中所有2-p的数的倍数后剩下的最大值]
B. Vile Grasshoppers time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces 509E Pretty Song (思维)
E. Pretty Song time limit per test:1 seco ...
- POJ 2057 The Lost House [树状DP]
题意:一只蜗牛将壳忘在了一棵树的某一个末结点(叶子)上.它想找回自己的壳,但忘记是丢在哪个结点上了,只好从树根开始网上爬,一个结点一个结点地找.在一些结点上居住着毛毛虫,它们会告诉蜗牛该结点以及它的子 ...
- mac下virtualenv使用
1 sudo pip install virtualenv 安装 2 找一合适目录装虚拟环境 virtualenv virzhongguo 3 激活虚拟环境 source virzhongguo/ ...
- EasyMvc入门教程-基本控件说明(2)定时器
我们有时候希望系统能自动刷新后台数据或者做某个动作,那么定时器的作用就体现出来了. EasyMvc默认提供的服务器可以定时调前端方法与定时调后端方法,先看例子: 定时调客户端事件 实现代码: @Htm ...