`

提高你的SQL能力

阅读更多
公司组织SQL水平考试,看了写教材,写了点总结发上来跟大家分享。
我公司使用的是Sybase ASE12.5,所以下面的一些特性是针对Sybase ASE的。
一: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 代码
  1. select column1  
  2. from table1  
  3. where upper(column2) = 'IVANL'  

4:如何查看执行计划
sql 代码
  1. set showplan on  
  2. go  
  3. your sql  
  4. go  
  5. set showplan off  
  6. go  

5: 如何查看IO
sql 代码
  1. set statistics io on  
  2. set statistics time on  
  3. go  
  4. you sql  
  5. go  
  6. set statistics io off  
  7. set statistics time off  
  8. 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 代码
  1. select t1.colu1, t2.column2  
  2. from t1, t2  
  3. where t1.id *= t2.id  
  4. union  
  5. select t1.colu1, t2.column2  
  6. from t1, t2  
  7. 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 代码
  1. a:  
  2. case  
  3.   when search_condition then expression  
  4.   [when search_condition then expression]  
  5.   [else exproestion]  
  6. end  
  7. b:  
  8. case expression  
  9.   when expression then expression  
  10.   [when exproession then expression]  
  11.   [else expression]  
  12. end    


2:case的用途
a:decoding column
sql 代码
  1. select cust_id, cust_name  
  2. case cust_type  
  3.   when 'R' then 'Relation'  
  4.   when 'I' then 'International'  
  5.   when 's' then 'Small'  
  6.   else  'Other'  
  7. end as customer_type  

b:conditionally displaying columns or values
sql 代码
  1. select title_id, total_sales,  
  2. case  
  3.   when total_sales > 5000 then 'hight'  
  4.   when total_sales < 100 then 'low'  
  5.   else '   '  
  6. end as 'column'  

c:horizontal frequency table and summary calculation
sql 代码
  1. select sum(case type when 'adv' then 1 else 0 end ) as adv  
  2. sumcase type when 'cus' then 1 else 0 endas cus  
  3. from customer  

d:updating on variable conditions
sql 代码
  1. update customer  
  2. set cust_charge = cust_charte + case cust_type  
  3. when 'd' then 1  
  4. when 'c' then 2  
  5. when 'e' then 3  
  6. else 0  
  7. end  
  8. [/code]  
  9. e:rules and check constraints  
  10. [code]  
  11. create table cust_order_info  
  12. (  
  13.   order_num int,  
  14.   order_taker int,  
  15.   order_date char(7) default  
  16.     case  
  17.       when datepart(dw, getDate()) between 2 and 6 then 'weekday'  
  18.       else 'weekend'  
  19.     end  
  20. )  


五:事务和锁
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 代码
  1. set transaction isolation level {0|1|2|3}  
  2. or  
  3. select ...  
  4. 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 代码
  1. select coalesce(total_sales/nullif(sales,0),0) 
  2. -- coalesce(ex1, ex2,ex3...)返回第一个不是Null的表达式
    -- nullif(expre, value)如果expre=value,则返回null



2:找到重复的数据
sql 代码
  1. select type, count(*)  
  2. from table  
  3. where ..  
  4. group by type  
  5. having count(*) > 1  


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

4:数据累加
java 代码
  1. select t1.title_id, t1.advice, sum(t2.advice) as cumulative_total  
  2. from title t1, title t2  
  3. where t1.title_id >= t2.title_id  
  4. group by t1.title_id, t1.advice  


5:ranking data
sql 代码
  1. select rank = identity(10), title_id, total_sales  
  2. into #top from titles  
  3. where ..  
  4. order by total_sales desc  
  5. go  
  6. select * from #top  
  7. go  
  8. drop table #top  
  9. go  


6:conver between julian Date and gregorian date
sql 代码
  1. select datepart(yy, @date)*1000+datepart(dy, @dateas julina_date  
  2. select dateadd(dd, juliandate%1000, '12/31/'+convert(char(4),juliandate/1000 -1)) as gregorian_date  


7:计算本月有多少天
sql 代码
  1. datepart(dd,  
  2. dateadd(dd,-1           --last day of this month  
  3. datead(mm,1             --add a month  
  4. dateadd(dd              --  
  5. ,  
  6. 1-datepart(dd,getdate() --1-today  
  7. getDate()))))              --get today  

8:是否是闰年
sql 代码
  1. select datepart(dy, '03/01/'||convert(char(4),datepart(yy,getdate())))  
  2. --= 61 是闰年  
  3. --= 60 不是闰年   
分享到:
评论

相关推荐

    sql能力评定测试题

    在SQL能力评定测试题中,你将面临一系列挑战,这些挑战涵盖了数据库管理和开发的核心技能,包括存储过程、触发器、子查询以及AFTER-INSERT触发器的使用。这些概念是数据库设计与操作的关键组成部分,下面将对它们...

    提升SQL编写能力的帮助文档

    可以随时查看SQL语法格式,并能提高SQL语句的编写能力

    SQL高级教程\SQL入门与提高

    《SQL高级教程\SQL入门与提高》是一份全面的SQL学习资源,旨在帮助初学者和有一定基础的学习者提升SQL技能。这份资料集包含了详细的课程PPT和一系列实践实验,为学习者提供了一个深入理解SQL语言的平台。 1. SQL...

    SQLServer能力提升

    在IT行业中,数据库管理是至关重要的,而SQL Server作为一款广泛应用的关系型数据库管理系统,其功能强大,能够满足各种复杂的数据...请参考“SQL能力提升”这个压缩包文件中的资料,进一步加深理解和应用这些技术。

    SQL疑难解决,问题提高SQL学习使用的效率

    SQL,全称Structured Query Language,是用于管理和处理关系数据库的标准编程语言。在SQL中,我们主要关注的是数据的存储、查询、更新和...通过不断实践和学习,我们可以提高SQL的使用效率,更好地管理和利用数据资源。

    SQL Tuning sqlServer 数据库

    以上内容只是《SQL Tuning in sqlServer 数据库》教程的部分要点,通过深入学习,你可以掌握一系列SQL Server性能优化的技巧和最佳实践,从而更好地管理和优化你的数据库系统。CHM格式的文档通常包含丰富的超链接和...

    提高你的数据库编程效率_Microsoft CLR Via Sql Server

    在"提高你的数据库编程效率_Microsoft CLR Via Sql Server"这个主题中,我们重点关注的是如何利用Microsoft Common Language Runtime (CLR)集成在SQL Server中,从而实现更高效、更灵活的数据库编程。 CLR是.NET ...

    SQLTracker,SQLMonitor

    SQLMonitor同样具备强大的SQL监控能力,它能对数据库活动进行详尽的分析,包括查询执行计划、锁等待、事务处理等,从而帮助用户快速定位性能问题。在Windows 10系统中,建议以管理员权限运行SQLMonitor,这样可以...

    sql2003标准 sql2003标准

    1. **增强的查询能力**:SQL2003引入了更强大的查询语法,包括窗口函数(Window Functions),允许在分组后的结果集上进行计算,如ROW_NUMBER(), RANK() 和 DENSE_RANK()等。此外,还有WITH子句,用于创建临时的结果...

    SQL代码 sql练习

    学习SQL不仅可以提高数据库管理效率,还能为数据分析、业务智能等领域打下坚实的基础。对于PL/SQL(Procedural Language/SQL),它是Oracle数据库的扩展,集成了SQL与过程编程语言的特性,允许用户创建存储过程、...

    SQL_92和SQL_2003标准

    5. **规则和触发器**:定义了规则和触发器,以实现数据的自动更新和验证,增强了数据库的自维护能力。 6. **嵌套子程序**:支持过程化编程元素,如存储过程和函数,提高了代码复用和模块化设计。 SQL_2003,又称为...

    sqlserver驱动包:sqljdbc4.jar

    4. **SQL执行**:`java.sql.Statement`和`java.sql.PreparedStatement`接口提供了执行SQL语句的能力。`PreparedStatement`允许预编译SQL,提高性能并防止SQL注入攻击。 5. **结果集处理**:`java.sql.ResultSet`...

    SQLDBX.rar

    总的来说,SQLDBX作为一款优秀的DB2数据库管理工具,凭借其强大的SQL处理能力、便捷的数据库对象管理、全面的性能分析以及灵活的连接选项,深受广大DBA和开发人员的喜爱。无论是在日常的数据库维护还是在复杂的项目...

    SQL脚本批量执行,方便大量的SQL脚本执行。

    这时,批量执行SQL脚本的能力就显得尤为重要。本文将详细探讨如何进行SQL脚本的批处理执行,并提供相关策略和工具。 首先,了解批处理的基本概念。批处理是指将一系列命令或操作组合在一起,一次性执行,以提高工作...

    SQL基础、中级SQL、高级SQL_手册

    SQL,全称Structured Query Language,是用于管理关系数据库的标准语言。这份"SQL基础、中级SQL、高级SQL_手册"涵盖了...通过深入学习并实践手册中的内容,你将在数据库管理领域建立起坚实的基础,提升解决问题的能力。

    Sql Server 2014 安装包

    - **AlwaysOn可用性组增强**: 提高了高可用性和灾难恢复能力,允许多个读写副本,增强了故障切换的透明度。 - **Columnstore索引的改进**: 支持在线修改和实时分析,提升了数据仓库查询性能。 - **Power Query和...

    尚硅谷大数据技术之企业SQL面试题_大数据_sql_尚硅谷sql_doc_

    学习者可以通过这份文档来检验自己的SQL水平,了解企业在大数据领域对SQL技能的要求,从而提高面试成功的概率。 对于准备面试的人员,除了掌握SQL语法外,还需要理解大数据系统的工作原理,例如HDFS的存储模型、...

    sql server2019安装包

    SQL Server 2019引入了多个新特性和增强功能,旨在提高性能、安全性和可扩展性。以下是一些关键知识点: 1. **Big Data Clusters**:SQL Server 2019引入了大数据集群的概念,允许用户在同一个环境中整合SQL Server...

Global site tag (gtag.js) - Google Analytics