仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1105|回复: 10
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之SQL Story摘录(八)――――数据抽取

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:27:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。数据
数据抽取

实际上的干系型数据库,数据是以干系的情势存在。一般我们都能够把它们视为一种汇合。如许,数据通常为以无序的情势存在的。这类做法的优点自不必多加会商了,不外我们也得供认,偶然如许也会带给我们一些贫苦。我比来就碰到这么一件。

我在网上赶上我的一个老同砚,他提出了如许一个成绩。有一个表(假定就叫myTable),表中有三个整型字段(假定就叫A11,A12,A13),其上有一个独一键束缚。如今他想要在这个表的数据中取一些样品。他但愿从中A13的各个取值中,各取一笔记录。然后我问他,对A11和A12有甚么请求吗?他说,没有,怎样取都能够,有无纪律都行。我想固然的说,复杂,给我二非常钟。

有一个笑话不知你们听过没有。说好久之前,一个年夜数学家授课,有先生问他能不克不及证实四色定理。他说,那简单,我如今就证给你们……然后他写啊写啊……想啊想啊……一向想到下课也没证出来,然后表面打了一个年夜年夜的响雷,他自嘲说,天主也被我的傲慢激愤了……

甚么,你问我方才的成绩怎样了?我告知你,二非常种,不不,四非常钟,不不,仿佛是一个小时……厥后到三更了,表面入手下手打雷……我对我的同砚说,老兄,我错了,让我把这成绩拿归去想一想先……

以下是一个示例,我任意录了些数据出来

A11A12A13

---------------------------------

000

001

011

111

112

122

222

221

223

213

233

331

332

323

321

322

311

312

313

一入手下手,我是想用一个SELECTMAX(A11),MAX(A12),A13FROMmyTableGROUPBYA13,厥后用脚指头想了想,发明不成能。由于MAX(A11)和MAX(A12)都只依附于分组子句GROUPBYA13。明显如许MAX(A11)和MAX(A12)纷歧定会是统一笔记录中的数据。就像上面如许:

A13

---------------------------------

000

331

332

333

注重,实在3,3,3这一行是不存在的。

然后我想,SELECTMAX(A11),MAX(A12),A13FROMmyTableGROUPBYA13,A12行不可?用SQLServer试了试,也不合错误。由于如许的话,它会先按A13,A12来分组所前往的了局集,以是会比我们要的数据多的多。就像上面如许

A13

---------------------------------

000

001

311

312

313

321

322

323

331

332

233

诸云云类的傻事我还干了良多,厥后我终究想分明我要甚么数据了:取A12,A13,使得在一切按A13的值分组后,取每组中最年夜的A12,然后取整纪录,使得A11是A12和A13满意前述前提后的最年夜的一个值。如许,我写出了一个语句:

SELECT

(SELECTMAX(I.A11)FROMmyTableIWHEREI.A13=O.A13ANDI.A12=MAX(O.A12))A11

,MAX(O.A12)A12

,O.A13A13

FROMmyTableO

GROUPBYO.A13

这行语句前往值以下:

A11A12A13

---------------------------------

000

331

332

233

一样的,我们能够注释它为最两个了局集,一个是SELECTMAX(A11),MAX(A12),A13FROMmyTableGROUPBYA13,一个是SELECTMAX(A12),A13FROMmyTableGROUPBYA13,A12,然所按A12和A13举行等值连接,这就是:

SELECTMAX(L.A11)A11

,MAX(L.A12)A12

,L.A13A13

FROMmyTableL

JOINmyTableR

ONL.A13=R.A13

GROUPBYL.A13,L.A12

HAVINGL.A12=MAX(R.A12)

我个以为如许子对照清新,不知列位觉得怎样?

现实上,这一类的数据抽取,不成能用一个复杂查询失掉,由于个中有一个字段要同时参予分组和统计。只要(现实上是只需)把我们的成绩用SQL言语的思索体例形貌分明,谜底也就失掉了,统统就这么复杂。

关于一类完整按行随机抽取的成绩,除化为Topn成绩办理外,另有一个好主张就是在撑持物理行号的数据库体系中,用rowid或标识列之类的手艺来办理,如许对照复杂,就未几说了。

增补一句,之前我说过InterBase不撑持主动标识列,但实践上,它也能够直接的完成。在InterBase中,我们能够Create一种叫generator的全局变量,然后用一个触发器,分离一个函数叫GEN_ID的,就能够做到。虽然说有点贫苦,但并不是不成能。具体情形,人人能够查询InterBase有关手艺文档。

接待来信和我会商手艺成绩:lx1978@263.net。
我们分析上面的两个操作,都有一个“删除数据”的过程。
山那边是海 该用户已被删除
沙发
发表于 2015-1-19 13:11:24 来自手机 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-19 13:11:24 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
海妖 该用户已被删除
地板
发表于 2015-1-25 17:35:27 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
变相怪杰 该用户已被删除
5#
发表于 2015-2-3 12:12:03 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
小魔女 该用户已被删除
6#
发表于 2015-2-8 21:25:59 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
金色的骷髅 该用户已被删除
7#
发表于 2015-2-26 11:03:39 | 只看该作者
呵呵,这就是偶想说的
若天明 该用户已被删除
8#
 楼主| 发表于 2015-3-8 14:04:57 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-16 02:32:48 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
分手快乐 该用户已被删除
10#
发表于 2015-3-22 19:09:37 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
透明 该用户已被删除
11#
发表于 2015-3-22 19:09:40 | 只看该作者
大家注意一点。如下面的例子:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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