公司组织SQL水平考试,看了写教材,写了点总结发上来跟大家分享。
我公司使用的是Sybase ASE12.5,所以下面的一些特性是针对Sybase ASE的。
一:SQL Bisic1: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
- datead(mm,1
- dateadd(dd
- ,
- 1-datepart(dd,getdate()
- getDate()))))
8:是否是闰年
sql 代码
- select datepart(dy, '03/01/'||convert(char(4),datepart(yy,getdate())))
-
-
分享到:
相关推荐
在SQL能力评定测试题中,你将面临一系列挑战,这些挑战涵盖了数据库管理和开发的核心技能,包括存储过程、触发器、子查询以及AFTER-INSERT触发器的使用。这些概念是数据库设计与操作的关键组成部分,下面将对它们...
可以随时查看SQL语法格式,并能提高SQL语句的编写能力
《SQL高级教程\SQL入门与提高》是一份全面的SQL学习资源,旨在帮助初学者和有一定基础的学习者提升SQL技能。这份资料集包含了详细的课程PPT和一系列实践实验,为学习者提供了一个深入理解SQL语言的平台。 1. SQL...
在IT行业中,数据库管理是至关重要的,而SQL Server作为一款广泛应用的关系型数据库管理系统,其功能强大,能够满足各种复杂的数据...请参考“SQL能力提升”这个压缩包文件中的资料,进一步加深理解和应用这些技术。
SQL,全称Structured Query Language,是用于管理和处理关系数据库的标准编程语言。在SQL中,我们主要关注的是数据的存储、查询、更新和...通过不断实践和学习,我们可以提高SQL的使用效率,更好地管理和利用数据资源。
以上内容只是《SQL Tuning in sqlServer 数据库》教程的部分要点,通过深入学习,你可以掌握一系列SQL Server性能优化的技巧和最佳实践,从而更好地管理和优化你的数据库系统。CHM格式的文档通常包含丰富的超链接和...
在"提高你的数据库编程效率_Microsoft CLR Via Sql Server"这个主题中,我们重点关注的是如何利用Microsoft Common Language Runtime (CLR)集成在SQL Server中,从而实现更高效、更灵活的数据库编程。 CLR是.NET ...
SQLMonitor同样具备强大的SQL监控能力,它能对数据库活动进行详尽的分析,包括查询执行计划、锁等待、事务处理等,从而帮助用户快速定位性能问题。在Windows 10系统中,建议以管理员权限运行SQLMonitor,这样可以...
1. **增强的查询能力**:SQL2003引入了更强大的查询语法,包括窗口函数(Window Functions),允许在分组后的结果集上进行计算,如ROW_NUMBER(), RANK() 和 DENSE_RANK()等。此外,还有WITH子句,用于创建临时的结果...
学习SQL不仅可以提高数据库管理效率,还能为数据分析、业务智能等领域打下坚实的基础。对于PL/SQL(Procedural Language/SQL),它是Oracle数据库的扩展,集成了SQL与过程编程语言的特性,允许用户创建存储过程、...
5. **规则和触发器**:定义了规则和触发器,以实现数据的自动更新和验证,增强了数据库的自维护能力。 6. **嵌套子程序**:支持过程化编程元素,如存储过程和函数,提高了代码复用和模块化设计。 SQL_2003,又称为...
4. **SQL执行**:`java.sql.Statement`和`java.sql.PreparedStatement`接口提供了执行SQL语句的能力。`PreparedStatement`允许预编译SQL,提高性能并防止SQL注入攻击。 5. **结果集处理**:`java.sql.ResultSet`...
总的来说,SQLDBX作为一款优秀的DB2数据库管理工具,凭借其强大的SQL处理能力、便捷的数据库对象管理、全面的性能分析以及灵活的连接选项,深受广大DBA和开发人员的喜爱。无论是在日常的数据库维护还是在复杂的项目...
这时,批量执行SQL脚本的能力就显得尤为重要。本文将详细探讨如何进行SQL脚本的批处理执行,并提供相关策略和工具。 首先,了解批处理的基本概念。批处理是指将一系列命令或操作组合在一起,一次性执行,以提高工作...
SQL,全称Structured Query Language,是用于管理关系数据库的标准语言。这份"SQL基础、中级SQL、高级SQL_手册"涵盖了...通过深入学习并实践手册中的内容,你将在数据库管理领域建立起坚实的基础,提升解决问题的能力。
- **AlwaysOn可用性组增强**: 提高了高可用性和灾难恢复能力,允许多个读写副本,增强了故障切换的透明度。 - **Columnstore索引的改进**: 支持在线修改和实时分析,提升了数据仓库查询性能。 - **Power Query和...
学习者可以通过这份文档来检验自己的SQL水平,了解企业在大数据领域对SQL技能的要求,从而提高面试成功的概率。 对于准备面试的人员,除了掌握SQL语法外,还需要理解大数据系统的工作原理,例如HDFS的存储模型、...
SQL Server 2019引入了多个新特性和增强功能,旨在提高性能、安全性和可扩展性。以下是一些关键知识点: 1. **Big Data Clusters**:SQL Server 2019引入了大数据集群的概念,允许用户在同一个环境中整合SQL Server...