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 ...
随机推荐
- 手动配置WCF宿主的.config文件遇到的几种错误
今天尝试用控制台应用程序作为WCF宿主,遇到几个问题,这几个问题虽然都不难,但寻找解决方案相当费时费力,做记录. WCF标准的配置文件为: <system.serviceModel> ...
- java读取excel文件数据
package com.smp.server.Ctrl; import java.io.File;import java.io.FileInputStream;import java.io.FileN ...
- LinuxShell脚本攻略--第一章 小试牛刀
使用 shell 进行数学运算: #!/bin/bash no1=; no2=; let result=no1+no2 echo $result result=$[ $no1 + no2 ] resu ...
- cocos2dx从入门到精通课程
一.移动开发基础 二.cocos2dx跨平台理论 三.cocos2dx框架 四.cocos2dx内存管理 五.cocos2dx的事件与消息机制 六.cocos2dx的定时器 七.cocos2dx的渲染 ...
- javascript图片切换
JavaScript 图片滑动切换效果 作者:cloudgamer 时间: 2009-09-25 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript 图片滑动切换效果 [1] 第 2 页 ...
- 1.1 ASP.NET MVC简介
1.什么是ASP.NET MVC? (1)它是个怎么样的产品? ASP.NET MVC是微软公司.NET平台上的一个Web开发框架,它为开发者提供了一种构建结构良好的Web应用程序的方式.自2007年 ...
- 函数内部的函数中的this都是指向window
刚看到一个问题关于this的, var name="the window"; var object={ name:"silence", packname:fun ...
- hdu---(1325)Is It A Tree?(并查集)
Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 错误:Error:未定义标识符"_TCHAR"
原因:缺少头文件 解决方案:添加一条 #include <tchar.h>
- stackview
Stack View会被当成Container View.所以它是一个不会被渲染的UIView子类.它不像其他UIView子类一样,会被渲染到屏幕上.这也意味着设置其backgroundColor属性 ...