Oracle、Mysql、Sql Server语句的区别
1、空值的处理——判断是否为空,为空时取一个值,不为空时取另一个值
1)、Sql Server 中
ISNULL(check_expression,replacement_value)
解释:如果check_expression值为空,则返回replacement_value,否则直接返回check_expression的值
2)、Mysql
IFNULL(expr1.expr2)
解释:如果值expr1值为空,则返回expr2,否则直接返回expr1的值
3)、Oracle
NVL(expr1,expr2) ①
NVL2(expr1,expr2,expr3) ②
NULLIF(expr1,expr2) ③
解释:①中如果expr1为NULL,返回expr1的值,否则返回expr2的值
②中如果expr1为NULL,返回expr3的值,否则返回expr2的值
③中如国exp1=expr2,返回NULL,否则返回expr1的值
2、分页查询
1)、Sql Server
一般比较简单的方法是通过TOP来实现,例如
SELECT TOP 10 * FROM TestTable WHERE code NOT IN (
SELECT TOP 20 code FROM TestTable ORDER BY id
) ORDER BY id
这条语句,从理论上讲,整体语句的执行时间应该比子句的执行时间长,但事实相反,因为子句执行后返回的是20条记录,而整条语句仅返回10条记录,所以影响数据库响应时间最大的因素是物理I/O操作。而现在物理I/O操作此处的最有效方法之一就是使用TOP关键词。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条获取前几个百分比数据的词。
以上语句有一个致命的缺点,就是它含有NOT IN字样,换成NOT EXISTS,二者的执行效率时间上也没有区别。以上分页算法中,影响我们查询速度的关键因素有两点:TOP和NOT IN,TOP可以提高我们的查询速度,而NOT IN会减慢我们的查询速度,所以要提高我们整个分页算法的速度,就要彻底改造NOT IN,用其它方法来代替它。
我们知道,几乎任何字段,我们都可以通过MAX(字段)或MIN(字段)来提取某个字段中的最大值和最小值,所以如果这个字段不重复,那么就可以利用这些不重复的字段的MAX或MIN作为分水岭,使其成为分页算法中分开每页的参照物。在这里,我们就可以用操作符“>”或者“<”来完成这个使命。如:
SELECT TOP pageSize * FROM table1 WHERE id>(
SELECT MAX(id) from (
SELECT TOP ((currentPage-1)*pageSize) id FROM table1 ORDER BY id
) as T
) ORDER BY id
这种方法执行多少始终没有大的降势,后劲任然很足,尤其对于数据量大的时候,该方法
执行速度一点也不会降低。使用TOP要求主键必须唯一,不能是联合主键。如果是联合主键,则查询出来的结果可能会乱序。
还有一种是使用ROW_NUMBER()函数,例如:
SELECT TOP 10 * FROM (
SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY ID ) AS RowNo FROM TABLE1
) AS A WHERE RowNo>currentPage*10
2)、Mysql
Mysql分页比较简单,直接使用LIMIT来实现,它有一个或者两个参数,第一个参数制定返回的第一行数据的所在位置,从0开始,第二个参数指定最多返回行数。例如:
SELECT * FROM table WHERE ... LIMIT 10; #返回前10行
SELECT * FROM table WHERE ... LIMIT 0,10; #返回前10行
SELECT * FROM table WHERE ... LIMIT 10,20; #返回10-20行数据
3)、Oracle
第一种:
select * from(
select t.*,row_number() over (order by t1.id) rowno from TABLE1
) where rowno between 21 and 40;
第二种:
select * from(
select t.*,rownum as rowno from TABLE1
) where rowno between 10 and 20
第二种方法比较好。因为不用ORDER BY语句,会提高检索数据的速度,尤其数据量越大是,第二种方法快速检索数据越明显。
Oracle、Mysql、Sql Server语句的区别的更多相关文章
- oracle跟SQL Server 2005 的区别
Oracle与Sql server的区别 一直搞不明白Oracle数据库和sql server的区别,今天我特意查资料把他们的区别整理出来 Oracle数据库:Oracle Database,又名 ...
- mysql、oracle和SQL server数据库的区别
1.总体对比. SQL,在这里我理解成SQL Server.三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相 ...
- 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...
- oracle,mysql,sql server三大数据库的事务隔离级别查看方法
1:mysql的事务隔离级别查看方法 mysql 最简单,执行这条语句就行:select @@tx_isolation 详情: 1.查看当前会话隔离级别 select @@tx_isolation; ...
- Oracle,Mysql ,SQL Server 三大数据库带参数的模糊查询, 拼接查询条件问题
最近项目开发一直在不断切换数据库,有时候一条sql 要同时考虑多种数据库中的兼容问题 , 先总结一条模糊查询拼接查询条件的问题,后续追加总结. 目前使用 mybatis: 1. Oracle 中使 ...
- 如何连接oracle,mysql, SQL Server数据库(Java版)
先添加上连接oracle,MySQL的驱动路径和数据库连接URL: MySQL: final String DBDRIVER = "org.gjt.mm.mysql.Driver" ...
- Oracle 和SQL Server 中的SQL语句使用区别
最近开始接触Oracle,想要了解下同SQL Server使用时的区别.搜寻网上信息找到具体区别分类如下: 一.数据类型比较 类型名称 Oracle SQLServer 比较 字符数据类型 CHA ...
- MySQL、Oracle和SQL Server的分页查询语句
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
随机推荐
- z-score
标准分数(standard score)也叫z分数(z-score),是一个分数与平均数的差再除以标准差的过程.用公式表示为: z=(x-μ)/σ.其中x为某一具体分数, μ为平均数,σ为标准差. Z ...
- Java 14 类型信息
14 类型信息 运行是识别对象和类的信息 两种方式RTTI 假定编译时已经知道所有的类型反射 运行时发现和使用类的信息 1 RTTI //多态 创建一个具体的对象(Circle Square Tria ...
- Spring源码分析心得-Bean的读取和注册
Spring广泛的被使用足以证明它的价值,成功的东西自然值得我们深入学习.有很多人说的熟悉Spring也只是简单的使用经验,当我发现我也是其中一员时我很恐惧,所以开始扒源码,准备深入了解,话不多说,直 ...
- Eclipse插件Target Management (RSE)
陶醉篇--Eclipse插件Target Management (RSE),RSE即Remote System Explorer 2008年11月29日 星期六 下午 10:27 Target Man ...
- 转:Jeff Atwood倾情推荐——程序员必读之书
Jeff Atwood倾情推荐——程序员必读之书 英文版:<Code Complete 2>中文版:<代码大全(第二版)>作者:Steve McConnell译者:金戈 汤凌 ...
- SenchaTouch介绍和Sencha Architect介绍以及安装
一.SenchaTouch介绍 Sencha Touch框架是世界上第一个基于HTML 5的Mobile App框架. 在Sencha Touch这个名词中,包括了两个组成部分,其中Sencha的前身 ...
- Linux C编程一站式学习
http://docs.linuxtone.org/ebooks/C&CPP/c/ 很全面的介绍
- 每日一笔记之2:QT之坐标系统:
以前一直多单片机开发,也没怎么使用过大的显示器,第一次学习,备忘: QT画图系统. 绘图,通过QPainter类实现. Qt的绘图系统对底层函数进行了良好的封装,使得在屏幕和设备的绘图功能可能使用相同 ...
- Windows代码页、区域
目录 第1章代码页 1 1 代码页 1 1.1 单字节字符集 1 1.2 双字节字符集 1 1.3 多字节字符集 1 1.4 ANSI代码页 2 2 枚举代码页 ...
- js高级程序设计(三)基本概念
数据类型 ECMAscript中有五种简单数据类型Undefined,Null,Boolean,Number,String 还有一种复杂数据类型Object. typeof操作符 typeof可能返回 ...