SQL Server外连接、内连接、交叉连接
来源:互联网 发布:nba2k17吴亦凡捏脸数据 编辑:程序博客网 时间:2024/03/29 06:12
小编在做组织部维护最后收尾工作的时候,遇到了这样一个问题,需要将定性考核得分查出来、定量考核对应的数据查出来并进行得分计算、附加分查出来,最后将这三部分信息汇总之后得到总成绩,如果其中一项成绩没有进行计算那么是可以得到成绩的。
展望师哥他们以前的逻辑,通过两个视图将定性和定量得分计算保存之后,再用一个视图将三个得分连到一起并进行计算。
被组长规定只能用SQL语句来写,因为这样维护起来就很方便了。
在将来的路上,了解一块东西就将它的来龙去脉缕个通,并进行总结,这样以后的路将会更加通畅!
展望师哥他们以前的逻辑,通过两个视图将定性和定量得分计算保存之后,再用一个视图将三个得分连到一起并进行计算。
被组长规定只能用SQL语句来写,因为这样维护起来就很方便了。
我开始先用了级联查询并计算,可是效果并不太理想,最后了解到连接查询,经过反复试验,终于有了以下成果:
<span style="font-family:KaiTi_GB2312;font-size:18px;">--SELECT --总排名ROW_NUMBER() OVER(ORDER BY ISNULL((h.AdditionalResults),0) + f.TotalScores ) AS 总排名 ,--园区IDf.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 --园区IDc.ObjectID,--园区名称c.Responsibility,--年份e.YearTime,--定量总得分ISNULL((c.QuantifyScores),0) AS QuantifyScores,--定性定量总得分ISNULL((e.CalculateScores),0) + ISNULL((c.QuantifyScores),0) AS TotalScoresFROM--第一层查询,查询到定性总得分当成基表(SELECT --园区IDd.DevelopmentID,--考核时间d.YearTime,--定性总得分d.CalculateScores FROMT_DevelopmentScores d) e --和第一层并列的查询,查询到定量信息并计算出定量总分 left JOIN (SELECT --园区IDa.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 --园区IDg.DevelopmentID,--附加分g.AdditionalResultsFROM 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>结果如下:
有条件
说明:将上面查到的无条件的结果按照条件进行筛选但是这里只能用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>结果如下:
总结
小编将这句话送给自己以及所有的读者:在将来的路上,了解一块东西就将它的来龙去脉缕个通,并进行总结,这样以后的路将会更加通畅!
15 0
- SQL Server外连接、内连接、交叉连接
- SQL外连接、内连接、交叉连接
- SQL内连接、外连接、交叉连接; Linq内连接、外连接、交叉连接
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- 详解SQL Server连接(内连接、外连接、交叉连接)
- sql连接类型:内连接、外连接和交叉连接
- T-SQL 表连接(内连接,外连接,交叉连接)
- SQL连接可以分为内连接、外连接、交叉连接。
- sql 自然连接、内连接、外连接、交叉连接
- SQL连接(内连接、外连接、交叉连接)
- SQL连接可以分为内连接、外连接、交叉连接
- MyEclips技巧
- Bootstrap、jQuery、HTML5、Spring Security安全权限
- 4027: [HEOI2015]兔子与樱花 贪心
- Concurrency5
- 剩菜到底能不能吃?浙江大学实验室给你最权威的答案
- SQL Server外连接、内连接、交叉连接
- 使用FMDB多线程访问数据库,及database is locked的问题
- 分析和解决JAVA 内存泄露的实战例子
- DEDE 网站后台被黑链修改了,自己登入不上去,怎么办?
- Error page: /admin/makehtml_all.php?action=make&step怎么办
- R-ggplot 数据可视化
- assertThat用法
- DEDE如何修改后台目录?
- DEDE怎么取消后台验证码