设为首页 收藏本站
查看: 3376|回复: 6

[经验分享] 微软认证考试70-461 Work with Data 数据处理 --27%比重--(1)

[复制链接]

尚未签到

发表于 2013-3-8 08:53:03 | 显示全部楼层 |阅读模式

附注:微软认证考试70-461范围

  • Create Database Objects创建数据库对象 (24%)
  • Work with Data数据处理 (27%)
  • Modify Data数据修改 (24%)
  • Troubleshoot & Optimize故障排解及SQL优化 (25%)

本文是第二节Work with Data 数据处理 。


第一部分:Query data by using SELECT statements. May include but not limited to: use the ranking function to select top(X) rows for multiple categories in a single query; write and perform queries efficiently using the new (SQL 2005/8->) code items such as synonyms, and joins (except, intersect); implement logic which uses dynamic SQL and system metadata; write efficient, technically complex SQL queries, including all types of joins versus the use of derived tables; determine what code may or may not execute based on the tables provided; given a table with constraints, determine which statement set would load a table; use and understand different data access technologies; case versus isnull versus coalesce. 用SELECT语句查询数据。可能包含但不仅限于:在一个查询中使用排名函数(ranking function)进行前(top)X行的多类数据筛选;使用SQL 2005或2008或更高版本的SQL关键字创建并执行高效的查询,比如 synonym, join (except, intersect)等关键字;使用动态SQL和系统元数据进行逻辑实现;编写高效的技术复杂的SQL查询,包括各种表联接的使用;根据已提供的表判断给出的SQL语句是否能正确执行;根据提供的带约束的表判断SQL语句是否可以加载表;使用并理解不同的数据访问技术;对比CASE, ISNULL, COALESCE;


  • 在一个查询中使用排名函数(ranking function)进行前(top)X行的多类数据筛选use the ranking function to select top(X) rows for multiple categories in a single query.。

四个ranking function: RANK,DENSE_RANK,NTILE,ROW_NUMBER:

创建测试表:

create table test(
id int identity(1,1) primary key,
testid int,
name varchar(100)
)

插入测试数据:

insert into test(testid,name)select 1,'乐可乐可的部落格'
insert into test(testid,name)select 1,'乐可乐可的部落格'
insert into test(testid,name)select 1,'乐可乐可的部落格'
insert into test(testid,name)select 2,'乐可乐可的部落格'
insert into test(testid,name)select 3,'微软考试认证'
insert into test(testid,name)select 4,'微软考试认证'
insert into test(testid,name)select 4,'微软考试认证'

用一个SQL语句来查看各个函数的使用:

select id,testid,
ROW_NUMBER() over( order by testid) as rownum,
RANK() over(order by testid) as ranknum,
DENSE_RANK() over(order by testid) as denseranknum,
Ntile(4) over ( order by testid) as ntilenum
from test
order by testid

下面是运行结果:

id    testid    rownum    ranknum    denseranknum    ntilenum
1    1            1                 1                   1                             1
2    1            2                 1                   1                             1
3    1            3                 1                   1                             2
4    2            4                 4                   2                             2
5    3            5                 5                   3                             3
6    4            6                 6                   4                             3
7    4            7                 6                   4                             4

ROW_NUMBER() over( order by testid) 按testid升序排列为每一个testid生成与之对应的一个序列数字,这些数字是从1开始由小到大的不间断数字。每个序列数字是唯一的。

RANK() over(order by testid) 按testid升序排列为每一个testid生成与之对应的一个排名数字,这些数字是从1开始由小到大排序(可能间断)。相同的testid生成的排名数字也相同,但是下一排名数字不是由之前的排名数字加1计算出的,而是排名总数即行数。

DENSE_RANK() over(order by testid) 按testid升序排列为每一个testid生成与之对应的一个排名数字,这些数字是从1开始由小到大排序的不间断数字(可能重复)。相同的testid生成的排名数字也相同,但是下一排名数字是由之前的排名数字加1计算出,而不是排名总数或行数。

Ntile(4) over ( order by testid) 按testid升序排列并将所有testid平均分成4组(最后一组testid总数可能少于其它组),然后为每一个testid生成与之对应的一个所属组编号。组编号是从1开始由小到大的不间断数字。

partition by

下面看一个带partition by的SQL语句来查看各个函数的使用:

select id,testid,name,
ROW_NUMBER() over(partition by name order by testid) as rownum,
RANK() over(partition by name order by testid) as ranknum,
DENSE_RANK() over(partition by name order by testid) as denseranknum,
Ntile(2) over (partition by name order by testid) as ntilenum
from test
order by name

运行结果:

id    testid    name                         rownum    ranknum    denseranknum    ntilenum
1    1            乐可乐可的部落格    1                 1                   1                             1
2    1            乐可乐可的部落格    2                 1                   1                             1
3    1            乐可乐可的部落格    3                 1                   1                             2
4    2            乐可乐可的部落格    4                 4                   2                             2
5    3            微软考试认证            1                 1                   1                             1
6    4            微软考试认证            2                 2                   2                             1
7    4            微软考试认证            3                 2                   2                             2

ROW_NUMBER() over(partition by name order by testid) 按name先进行数据分区,然后对每一区进行正常的ROW_NUMBER()计算。
RANK() over(partition by name order by testid) 按name先进行数据分区,然后对每一区进行正常的RANK()计算。
DENSE_RANK() over(partition by name order by testid) 按name先进行数据分区,然后对每一区进行正常的DENSE_RANK()计算。
Ntile(2) over (partition by name order by testid) 按name先进行数据分区,然后对每一区进行正常的Ntile()计算。

为了便于区分数据,在这里进行了NTILE(2)而不是NTILE(4)。

参考: http://msdn.microsoft.com/en-us/library/ms189798(v=sql.110).aspx


  • 使用SQL 2005或2008或更高版本的SQL关键字创建并执行高效的查询,比如 synonym, join (except, intersect)等关键字。write and perform queries efficiently using the new (SQL 2005/8->) code items such as synonyms, and joins (except, intersect).

SYNONYM同义词

为表test创建一个synonym同义词:create synonym testsyn for test

下面两条语句执行的结果相同。

select * from testsyn
select * from test

可以为本地对象(如表,视图),远程对象remote object,函数function创建同义词synonym。

详细:http://msdn.microsoft.com/en-us/library/ms177544.aspx

JOIN

以两表为例

inner join内联接,运行结果只显示关联行。参考: http://msdn.microsoft.com/zh-cn/ ... 28v=sql.105%29.aspx

left join左联接,运行结果显示左表所有行和右表的关联行,左表剩余的未能与右匹配的行以NULL填充右表数据结构。

right join右联接,运行结果显示右表所有行和左表的关联行,右表剩余的未能与左表匹配的行以NULL填充左表数据结构。

full join完全联接,运行结果显示所有关联行及所有未关联行,所有未关联行以NULL填充左右表数据结构。

参考:http://msdn.microsoft.com/zh-cn/ ... 28v=sql.105%29.aspx

cross join交叉联接,没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。如果添加了WHERE 子句,则交叉联接的行为将与内部联接行为相似。

参考:http://msdn.microsoft.com/zh-cn/ ... 28v=sql.105%29.aspx

self join自联接,表可以通过自联接与自身联接。要创建将某个表中的记录与同一表中的其他记录相联接的结果集时,使用自联接。若要在同一查询中两次列出某个表,必须至少为该表名称的一个实例提供表别名。

参考:http://msdn.microsoft.com/zh-cn/ ... 28v=sql.105%29.aspx

LOOP算法,用于小数据量查询。循环从左表取一记录和右表所有记录偿试匹配。

MERGE算法,用于中型规模数据量查询。在排好序的两表中单向从上往下偿试匹配两表记录。

HASH算法,用于大型规模数据量查询。将数据里较小的表进行HASH运算将记录存储到HASH列表中,然后从另外的表抽取记录做HASH运算并在HASH列表中偿试匹配。

参考:

http://msdn.microsoft.com/zh-cn/library/ms173815.aspx

http://msdn.microsoft.com/zh-cn/library/ms189313%28v=sql.105%29.aspx

http://msdn.microsoft.com/zh-cn/library/ms190967%28v=sql.105%29.aspx

http://msdn.microsoft.com/zh-cn/library/ms191318%28v=sql.105%29.aspx


EXCEPT 和 INTERSECT


比较两个查询的结果,返回非重复值。

EXCEPT 从左查询中返回右查询没有找到的所有非重复值。

INTERSECT 返回 INTERSECT 操作数左右两边的两个查询都返回的所有非重复值。

以下是将使用 EXCEPT 或 INTERSECT 的两个查询的结果集组合起来的基本规则:

  • 所有查询中的列数和列的顺序必须相同。
  • 数据类型必须兼容。

假设test表中testid包含1,1,2,3,4,4;test2表中id包含1,2,3,4,5,6

select testid from test
intersect
select id from test2

结果只有1,2,3,4。

select id from test2
except
select testid from test

结果只有5,6.

参考: http://msdn.microsoft.com/zh-cn/library/ms188055(v=sql.105).aspx


  • case versus isnull versus coalesce对比CASE, ISNULL, COALESCE

ISNULL和COALESCE大体上相同,相当于CASE 语句:


CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   ...

   ELSE expressionN

END

但ISNULL和COALESCE还是不同的。

SELECT ISNULL(NULL,NULL)返回NULL。

SELECT COALESCE(NULL,NULL)则报错:至少有一个参数不能为空。

ISNULL只能有两个参数,如ISNULL(1,NULL),而COALESCE则可以有多个参数,如COALESCE(NULL,3,NULL,1)。

ISNULL最终返回值类型跟第一个参数类型相同。如果两个参数的类型不同并最终返回值等于第二个参数,则会把第二个参数进行隐式转换为第一个参数的类型再返回。

如,

DECLARE @Field1 char(4), @Field2 char(50)
SET @Field2 = '乐可乐可的部落格'
j
SELECT ISNULL(@Field1, @Field2)
--返回 '乐可'
SELECT COALESCE(@Field1, @Field2)
--返回 '乐可乐可的部落格'

参考:

http://msdn.microsoft.com/zh-cn/library/ms190349.aspx



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-3636-1-1.html 上篇帖子: 微软认证考试70-461-Create Database Objects(创建数据库对象)-24%比重 下篇帖子: 微软认证考试70-461 Work with Data 数据处理 --27%比重--(2) 微软认证 考试

尚未签到

发表于 2013-3-14 00:57:30 | 显示全部楼层
我是个凑数的。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-15 22:40:32 | 显示全部楼层
沒有激情的亲吻,哪來床上的翻滾?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-16 14:24:35 | 显示全部楼层
避孕的效果:不成功,便成“人”。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-17 05:45:25 | 显示全部楼层
我不在江湖,但江湖中有我的传说。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-17 18:48:49 | 显示全部楼层
学习了,不错,讲的太有道理了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

累计签到:2 天
连续签到:1 天
发表于 2013-5-18 08:16:51 | 显示全部楼层
人生自古谁无死,啊个拉屎不用纸!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表