仓酷云

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

[学习教程] MYSQL网页设计Oracle SQL仍然无可替换--《Mastering ...

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:43:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
越来越多的开发者将继续选择MySQL。Evans的总裁JohnAndrews表示,MySQL学习教程用户对MySQL和其他开源数据库的评价正在赶上甚至超过很多专有商业数据库软件。oracle天冷地冻,呆在家里又读完了《MasteringOracleSQL》2nd,发明Oracle的功效仍是很刁悍,光函数就有两百个,HSQL是很难对比的。接上去的硬骨头,看来要末冒险用Hibernate3.0的SQLMapping功效,要末就本人跑JDBC组装VO了。1.报表算计公用的Rollup函数
发卖报表
广州1月2000元
广州2月2500元
广州4500元
深圳1月1000元
深圳2月2000元
深圳3000元
一切区域7500元

以往的查询SQL:
Selectarea,month,sum(money)fromSaleOrdergroupbyarea,month
然后广州,深圳的算计和一切区域算计都必要在程序里自行累计
1.实在可使用以下SQL:
Selectarea,month,sum(total_sale)fromSaleOrdergroupbyrollup(area,month)
就可以发生和报表千篇一律的记录2.假如year不想累加,能够写成
Selectyear,month,area,sum(total_sale)fromSaleOrdergroupbyyear,rollup(month,area)
别的Oracle9i还撑持以下语法:
Selectyear,month,area,sum(total_sale)fromSaleOrdergroupbyrollup((year,month),area)
3.假如利用Cube(area,month)而不是RollUp(area,month),除取得每一个区域的算计以外,还将取得每月份的算计,在报表最初显现。4.Grouping让算计列更好读
RollUp在显现广州算计时,月份列为NULL,但更好的做法应当是显现为"一切月份"
Grouping就是用来判别以后Column是不是是一个算计列,1为yes,然后用Decode把它转为"一切月份"
SelectDecode(Grouping(area),1,一切区域,area)area,
Decode(Grouping(month),1,一切月份,month),
sum(money)
FromSaleOrder
GroupbyRollUp(area,month);
2.对多级条理查询的startwith.....connectby
好比职员构造,产物种别,Oracle供应了很典范的办法
SELECTLEVEL,name,emp_id,manager_emp_id
FROMemployee
STARTWITHmanager_emp_idisnull
CONNECTBYPRIORemp_id=manager_emp_id;
下面的语句demo了全体的使用,startwith指明从那里入手下手遍历树,假如从根入手下手,那末它的manager应当是Null,假如从某个人员入手下手,能够写成emp_id=11
CONNECTBY就是指明父子干系,注重PRIOR地位
别的另有一个LEVEL列,显现节点的条理3.更多报表/剖析决议功效
3.1剖析功效的基础布局
剖析功效()over(partion子句,orderby子句,窗口儿句)
观点上很难讲分明,仍是用例子措辞对照好.3.2Row_Number和Rank,DENSE_Rank
用于选出Top3sales如许的报表
当两个营业员大概有不异事迹时,就要利用Rank和Dense_Rank
好比
金额RowNumRankDense_Rank
张三4000元111
李四3000元222
钱五2000元333
孙六2000元433
丁七1000元554这时候,应当把并列第三的钱五和孙六都选出来,以是用Ranking功效比RowNumber保险.至于Desnse仍是Ranking就看详细情形了。
SELECTsalesperson_id,SUM(tot_sales)sp_sales,
RANK()OVER(ORDERBYSUM(tot_sales)DESC)sales_rank
FROMorders
GROUPBYsalesperson_id
3.3NTILE把记录中分成甲乙丙丁四等
好比我想获得前25%的记录,大概把25%的记录看成统一个level同等看待,把另25%看成另外一个Level同等看待
SELECTcust_nbr,SUM(tot_sales)cust_sales,
NTILE(4)OVER(ORDERBYSUM(tot_sales)DESC)sales_quartile
FROMorders
GROUPBYcust_nbr
ORDERBY3,2DESC;
NTITLE(4)把记录以SUM(tot_sales)排序分红4份.3.4帮助剖析列和WindowsFunction
报表除基础现实数据外,总但愿中间多些整年总销量,到今朝为止的累计销量,前后三个月的均匀销量如许的列来参考.
这类前后三个月的均匀和到今朝为止的累计销量就叫windowsfunction,见下例
SELECTmonth,SUM(tot_sales)monthly_sales,
SUM(SUM(tot_sales))OVER(ORDERBYmonth
ROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW)max_preceeding
FROMorders
GROUPBYmonth
ORDERBYmonth;





SELECTmonth,SUM(tot_sales)monthly_sales,
AVG(SUM(tot_sales))OVER(ORDERBYmonth
ROWSBETWEEN1PRECEDINGAND1FOLLOWING)rolling_avg
FROMorders
GROUPBYmonth
ORDERBYmonth;
WindowsFunction的关头就是Windows子句的几个取值
1PRECEDING之前的一笔记录
1FOLLOWING以后的一笔记录
UNBOUNDEDPRECEDING之前的一切纪录
CURRENTROW以后记录4.SubQuery总结
SubQuery每天用了,实际上总结一下.SubQuery分三种
1.Noncorrelated子查询最一般的款式.
2.CorrelatedSubqueries把父查询的列拉到子查询内里往,头一回cyt教我的时分了解了半天.
3.InlineView也被当做最一般的款式用了.然后Noncorrelated子查询又有三种情形
1.前往一行一列whereprice<(selectmax(price)fromgoods)
2.前往多行一列whereprice>=ALL(selectpricefromgoodswheretype=2)
orwhereNOTprice<ANY(selectpricefromgoodswheretype=2)
最经常使用的IN实在就是=ANY()
3.前往多行多列一次前往多列固然就节俭了查询工夫
UPDATEmonthly_orders
SET(tot_orders,max_order_amt)=
(SELECTCOUNT(*),MAX(sale_price)
FROMcust_order)


DELETEFROMline_item
WHERE(order_nbr,part_nbr)IN
(SELECTorder_nbr,part_nbrFROMcust_orderc)
DBaaS系统本身并不提供面对面访问或个人客户关系或持续不断的支持MySQL学习教程。这些就是需要解决方案提供商的原因。他们帮助客户选择正确的解决方案、规划集成和迁移战略,然后协助实施。
活着的死人 该用户已被删除
沙发
发表于 2015-1-25 22:32:28 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
山那边是海 该用户已被删除
板凳
发表于 2015-2-4 09:50:53 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
admin 该用户已被删除
地板
发表于 2015-2-9 21:54:01 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
再见西城 该用户已被删除
5#
发表于 2015-2-27 22:48:38 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
透明 该用户已被删除
6#
发表于 2015-3-9 14:54:55 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
若天明 该用户已被删除
7#
发表于 2015-3-23 07:52:58 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 03:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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