【转】SQL能力提升

转自:http://huangliangfeixu.blog.163.com/blog/static/18974706220082240923909/

一:SQL Bisic

1:SQL(Structured Quary Language)特性:
a:标准化
b:非过程化的
c:可优化的
d:面向集合操作的
2:ASE中的数据类型
a:Numberic
b:Character
c:Date/Time
d:Lobs
3: convert(varchar, textColumn),如果不指定varchar(n)n那么默认是30
4:where 在sql中的作用
a:过滤数据
b:做表连接(sql92以前)
c:选择索引
5:whare 和 having的区别
where语句把过滤好的数据插入到work table中
having语句从work table中对数据进行在过滤以得到最后的结果。
6:一个select语句的执行顺序
a:from clause
b:where clause
c:group by clause
d:select clause
e:having clause
f:order by clause
7:Union VS Union All
a:Union 会把两个结果集排序,并且除去重复的元素(效率差,轻易不要用)
b:Union All仅仅是把两个结果集合并,没有排序,也不去除重复元素(效率好)
二:索引和查询参数
1:ASE中有三种access数据方式
a:clustered Index
b:nonclustered Index
c:table scan
2:Covered Query
一个Covered Query 仅仅从索引中得到数据,不用去扫描数据库表,这是最快的数据查询方式。
限制1:只能在selece中生效
限制2:所有被引用的列必须在同一个nonclustered index中
3:functional index
在ASE15.0以后才被支持,也就是说在ASE15.0以前的版本,下列语句是可定不会用上索引的
sql 代码

select column1   from table1   where upper(column2) = ‘IVANL‘   
4:如何查看执行计划
sql 代码

set showplan on   go   your sql   go   set showplan off   go   
5: 如何查看IO
sql 代码

set statistics io on   set statistics time on   go   you sql   go   set statistics io off   set statistics time off   go   
6:使用Index的建议
a:使用那些经常在where语句中使用的字段做index
b:使index中包含的字段越少越好
c:drop掉没用的index
三:表连接
1:什么是表连接
表连接是从多表中查询数据,或者是从一个表中多次取数据。
(A join is a Transanct-SQL operation than access rows from multi-tables or from a single talbe multi-times)
2:表连接的类别
a:inner join
b:outer join
c:cross join(full join)
3:ASE中不支持full join但是通过union可以模拟full join
sql 代码

select t1.colu1, t2.column2   from t1, t2   where t1.id *= t2.id   union   select t1.colu1, t2.column2   from t1, t2   where t1.id =* t2.id   
(不建议使用,效率很差)
4:ASE中最多支持50个table做表连接,ASE的查询优化器做的不是很好,Sybase推荐join表不超过4个(-_-~!)
5:数据库中有三种方式来实现表连接
a:nested loop join
b:merge join
c:hash join
(可以使用show plan来查看数据库选用哪种join来实现join语句)
6:对表连接的建议:
a:用showplan 看使用了那种用join方式
b:在join的列上加Index
c:把多表的join才分成几个小表的join
d:避免产生笛卡儿积
四:使用Case语句
1:case语句的两种形式
sql 代码

a:   case     when search_condition then expression     [when search_condition then expression]     [else exproestion]   end   b:   case expression     when expression then expression     [when exproession then expression]     [else expression]   end     
2:case的用途
a:decoding column
sql 代码

select cust_id, cust_name   case cust_type     when ‘R‘ then ‘Relation‘     when ‘I‘ then ‘International‘     when ‘s‘ then ‘Small‘     else  ‘Other‘   end as customer_type   
b:conditionally displaying columns or values
sql 代码

select title_id, total_sales,   case     when total_sales > 5000 then ‘hight‘     when total_sales < 100 then ‘low‘     else ‘   ‘   end as ‘column‘   
c:horizontal frequency table and summary calculation
sql 代码

select sum(case type when ‘adv‘ then 1 else 0 end ) as adv   , sum( case type when ‘cus‘ then 1 else 0 end) as cus   from customer   
d:updating on variable conditions
sql 代码

update customer   set cust_charge = cust_charte + case cust_type   when ‘d‘ then 1   when ‘c‘ then 2   when ‘e‘ then 3   else 0   end   [/code]   e:rules and check constraints   [code]   create table cust_order_info   (     order_num int,     order_taker int,     order_date char(7) default       case         when datepart(dw, getDate()) between 2 and 6 then ‘weekday‘         else ‘weekend‘       end   )   
五:事务和锁
1:ASE中有两种事务模式
a: Chained Mode
b:unChained Mode(Sybase默认)
unchained mode显示的开始一个事务,chained隐式的开始一个事务
unchained mode 使用‘commint tran‘, ‘rollback tran‘
chained mode 使用‘commint work ‘, ‘rollback work‘
unchained mode 支持嵌套事务,chained mode不支持
2:Locking schema
a: All pages table, will lock data and index as they are accessed(可以有clustered index)
b: A Datapages table will lock datpages as they are accessed, index will not be locked(无clustered index)
c: A DataRow table will lock datpages as they are accessed, index will not be locked(无clustered index)
3:Locking type
ASE中最重要的三种lock type是
a:shared locks(select , fetch)
b:update locks(fetch ,update, delete)
c:exclusive locks(insert , update, delete)
4:隔离级别
ASE中一共有四种隔离级别
a:isolation level 0 (read uncommited),允许胀读
b:isolation level 1 (read comminted)(ASE DEFAULT), 不允许胀读
c:isolation level 2 (repeatable read),可重复读
d:isolation level 3 (serializable), 不允许幻影读
sql 代码

set transaction isolation level {0|1|2|3}   or   select ...   at isolation {0|1|2|3}   
5:如何编写高效的transaction
For OLTP transaction
a:使transaction尽可能的短
b:使用index来随机访问数据
c:只有在必要的时候才使用transaction
d:选取合适的Lock type和隔离级别
e:使用乐观锁
六:数据处理
1:除以0
使用coalesce()和nullif()
先使用nullif()把0转换成null,在用coalesce()处理null的情况
sql 代码

select coalesce(total_sales/nullif(sales,0),0)  
-- coalesce(ex1, ex2,ex3...)返回第一个不是Null的表达式
-- nullif(expre, value)如果expre=value,则返回null 
2:找到重复的数据
sql 代码

select type, count(*)   from table   where ..   group by type   having count(*) > 1   
3:找出重复次数最多的数据
sql 代码

select type, count(*)   from table   where ..   group by type   having count(*) = max(count(*))   
4:数据累加
java 代码
select t1.title_id, t1.advice, sum(t2.advice) as cumulative_total   from title t1, title t2   where t1.title_id >= t2.title_id   group by t1.title_id, t1.advice   
5:ranking data
sql 代码

select rank = identity(10), title_id, total_sales   into #top from titles   where ..   order by total_sales desc   go   select * from #top   go   drop table #top   go   
6:conver between julian Date and gregorian date
sql 代码

select datepart(yy, @date)*1000+datepart(dy, @date) as julina_date   select dateadd(dd, juliandate%1000, ‘12/31/‘+convert(char(4),juliandate/1000 -1)) as gregorian_date   
7:计算本月有多少天
sql 代码

datepart(dd,   dateadd(dd,-1           --last day of this month   datead(mm,1             --add a month   dateadd(dd              --   ,   1-datepart(dd,getdate() --1-today   getDate()))))              --get today   
8:是否是闰年
sql 代码

select datepart(dy, ‘03/01/‘||convert(char(4),datepart(yy,getdate())))   --= 61 是闰年   --= 60 不是闰年

时间: 2024-10-18 05:36:42

【转】SQL能力提升的相关文章

性能为王:云智慧APM助小米IT服务能力提升

性能为王:云智慧APM助小米IT服务能力提升 2014年6月,北京--国内领先的应用性能管理运营商云智慧(北京)科技有限公司近日宣布与小米公司正式签约.云智慧凭借端到端APM解决方案,帮助其在IT基础设施实现一体化性能监控和管理,全面提升IT支撑能力与业务服务质量的精细管控. 小米是一家专注于智能产品自主研发的移动互联网企业,市场估值近百亿美元,是继BAT之后的第五大互联网公司.随着小米业务量持续上升和同行竞争,IT系统需要时刻保持在可靠状态,以保障在线高峰期最佳的客户体验,因此对IT系统性能的

【CTO俱乐部研修班开课】看板先驱David J. Anderson:看板核心在于创造一种能力——提升敏捷性

看板开发方法是近年来最热门的敏捷和精益开发方法.看板之父David J. Anderson认为其核心在于帮助企业创造一种能力--提升敏捷性.CTO俱乐部看板研修班将通过理论.沙盘模拟.真实案例分享等阐释看板核心理论. 看板方法诞生于2006年前后,是近年来最热门和上升速度最快的敏捷方法,成为拉动互联网时代敏捷变革的主流方法,被互联网企业和追求互联网变革的传统企业普遍采用.一方面它有力支持了精益创业.持续交付和DevOps等实践的有效实施:另一方面作为渐进式变革方法,看板方法为敏捷转型提供了更加平

【能力提升】SQL Server常见问题介绍及高速解决建议

前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题.及高速解决这些问题.这些问题是数据库的常规管理问题,对于非常多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 以下一些问题是在近千家数据库用户诊断时发现的常规问题.本文分为[常见问题诊断流程]-[常见问题]-[常见问题高速解决的建议] 常见问题诊断流程 概览模块-[汇总]了解系统 了解系统性能(语句运行时间.会话等待) 语句运行时间:横坐标为时间范围,纵坐标为在运行时间在范围内分布的语句数量. (本例:收集时间内语句运

重构职场竞争力之测试能力提升方法

通过,这十几年来一直在金融外包公司就职,在不同城商行出差协助公司处理不同项目的性能测试与优化,加上经历过08年的金融危机,看过多家企业倒闭.裁员等问题,明白一家企业在市场的竞争力多难,需要有自己独特竞争产品优势才能短期不会被社会淘汰,同样的一个职场员工,如果没有一项专业强项在工作5年之后也是慢慢面临是否被企业淘汰/新生代替代危机.特别是功能测试人员,工作5年后,大部分情况下如果没有形成自己的知识体系结构,没有自己专业特长,很难在一家企业得到更好的长期生存发展,特别是在这物价.房价不断高攀的社会,

看了后让你代码思维和能力提升的 Java 源代码

对于学习J2EE的框架有很大的帮助,代码里使用了各种设计模式.事件机制.Java8语法.代码量也很小,web服务使用Netty作为支持,对HTTP/网络想研究的一定是你的必读品.目前在写 Blade-In-Action 小书. 我之前也写过如何实现IOC/MVC框架的简单博文,可以在这个biezhi/java-bible仓库里看到. 也说一下我看过的一些比较不错的代码,看了对Java能力一定会有质的提升 国人写的模板引擎,代码质量很高:subchen/jetbrick-template-2x 数

简单操作sql语句-提升我们工作效率(网站关键词替换sql语句)

有时候要批量修改一些内容真不容易 一个一个改一天过去了,但当你学会了使用sql 语句操作 一秒就可以搞定.所以减少我们工作量我们必需要学会提高工作效率. 可批量修改就这么轻松可以实现. update 表名 set article =(REPLACE(列名,'需要替换的内容','替之后的内容'))

SQL Server提升权限相关命令及防范

exec master..xp_cmdshell "net user name password /add"-- ;exec master..xp_cmdshell "net localgroup administrators name /add"-- 程序代码开启cmdshell的SQL语句 EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 判断存储扩展是否存在 select count(*)

【大数据技术能力提升_2】numpy的学习

前言:排版有点问题,哎! 进一步学习,请参考https://www.numpy.org.cn/ 数据类型 5种类型:布尔值(bool),整数(int),无符号整数(uint).浮点(float).复数(complex) 支持的原始类型与 C 中的原始类型紧密相关: Numpy 的类型 C 的类型 描述 np.bool bool 存储为字节的布尔值(True或False) np.byte signed char 平台定义 np.ubyte unsigned char 平台定义 np.short s

一名小小的SQL Server DBA想谈一下SQL Server的能力

一名小小的SQL Server DBA想谈一下SQL Server的能力 百度上暂时还没有搜索到相关的个人写的比较有价值的文章,至少在中文网络的世界里面没有 但是在微软的网站有这样一篇文章:<比较 SQL Server 与 IBM DB2> 文章从下面几个方面进行了对比 1.TCO和ROI2.性能和可扩展性3.高可用性4.安全5.管理6.开发效率7.商业智能和数据仓库8.OLTP9.SAP集成 文章介绍得比较牛逼 性能与可扩展性 SQL Server 的性能和可扩展性优于IBM DB2. 基准