博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server外连接、内连接、交叉连接
阅读量:7209 次
发布时间:2019-06-29

本文共 2663 字,大约阅读时间需要 8 分钟。

    小编在做组织部维护最后收尾工作的时候,遇到了这样一个问题,须要将定性考核得分查出来、定量考核相应的数据查出来并进行得分计算、附加分查出来,最后将这三部分信息汇总之后得到总成绩,假设当中一项成绩没有进行计算那么是能够得到成绩的。
    展望师哥他们曾经的逻辑。通过两个视图将定性和定量得分计算保存之后。再用一个视图将三个得分连到一起并进行计算。
    被组长规定仅仅能用SQL语句来写,由于这样维护起来就非常方便了。

    我開始先用了级联查询并计算,但是效果并不太理想。最后了解到连接查询,经过重复试验,最终有了下面成果:

--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.AdditionalResultsFROM 	T_DevelopmentAdditionalResults g) h ON f.ObjectID = h.DevelopmentID

    尝到了SQL语句中连接的甜头,于是小编在网上搜索之后并自己实践,有了以下成果:

举例介绍

    以下的内容介绍将会分别用以下两个表进行试验

外连接

  左连接(left join或者left outer join):

    说明:以左表为基础,查询右表中全部符合条件的信息,不存在的用Null补充

--SELECT * FROM dbo.Testtable1 a LEFT JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid
 
    结果例如以下:

  右连接(right join或者right outer join)

    说明:以右表为基础,查询左表中全部符合条件的信息,不存在的用Null补充

--SELECT * FROM dbo.Testtable1 a right JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid
 
    结果例如以下:

  全然连接(full join或者full outer join)

    说明:将两个表中的信息都查出来,没有相应的信息,用Null补充

--SELECT * FROM dbo.Testtable1 a full JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid
 
    结果例如以下:

内连接(inner join)

    说明:仅仅显示符合条件的信息,条件能够是(=、<、>、<>、<=、>=、!<、!>),以下仅仅介绍条件为=的内容

--SELECT * FROM dbo.Testtable1 a inner JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid
 
    结果例如以下:

交叉连接(cross join)

  无条件

    说明:将查到两个表中的全部数据的乘积(假设每一个表中都有3行数据,最后显示3*3=9行数据)

--SELECT * FROM dbo.Testtable1 cross JOIN dbo.TestTable2--上面与以下的语句等价SELECT * FROM dbo.Testtable1, dbo.TestTable2
 
    结果例如以下:

  有条件

    说明:将上面查到的无条件的结果依照条件进行筛选可是这里仅仅能用where表示不能用on表示

--SELECT * FROM dbo.Testtable1 a cross JOIN dbo.TestTable2 b WHERE a.Hobbyid = b.Hobbyid
 
    结果例如以下:

总结

    小编将这句话送给自己以及全部的读者:
    在将来的路上,了解一块东西就将它的来龙去脉缕个通,并进行总结,这样以后的路将会更加通畅!
    
你可能感兴趣的文章
数据库路由中间件MyCat - 使用篇(4)
查看>>
JavaScript 异步队列实现及拓展
查看>>
三个白帽之从pwn me调试到Linux攻防学习
查看>>
JIT引擎触发RowHammer可行性研究
查看>>
朴素贝叶斯算法文本分类原理
查看>>
笔记-GPUImage(二)图片滤镜
查看>>
Spark综合使用及用户行为案例页面转化率统计分析实战-Spark商业应用实战
查看>>
Android Studio 3.2.0 正式版新特性
查看>>
JavaScript_JS里的函数:值和闭包
查看>>
Swift中遇到的警告--解决方法
查看>>
微信小程序学习笔记 路由传参
查看>>
Java 枚举查找并不抛异常的实现
查看>>
我与前端 | 视野的重要性
查看>>
亚马逊发布用于Amazon Lightsail的托管数据库
查看>>
Uber:大规模系统下如何构建可伸缩的告警生态系统\n
查看>>
Instana发布微服务应用程序样例
查看>>
Spark Summit EU重头戏:TensorFlow、结构化的流和GPU硬件加速
查看>>
Docker 上开发 nodejs
查看>>
分享一款在线调试的贝塞尔曲线
查看>>
让手机的应用变得可调试
查看>>