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语句,会提高检索数据的速度,尤其数据量越大是,第二种方法快速检索数据越明显。

时间: 2024-08-06 07:31:01

Oracle、Mysql、Sql Server语句的区别的相关文章

不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句

在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn from ( QUERY_SQL ) A )  where rn <= ((currentpage+1)*pagesize) and rn > (currentpage*pagesize) 注:QUERY_SQL为查询sql语句. 或 select * from (select rownum rn,id

Oracle/MySQL/SQL Server修改表字段类型和长度

Oracle ALTER TABLE T_USER MODIFY USERNAME VARCHAR2(18); MySQL ALTER TABLE T_USER CHANGE USERNAME USERNAME VARCHAR(200) NOT NULL COMMENT 'username'; SQL Server ALTER TABLE T_USER ALTER COLUMN USERNAME VARCHAR(200); [注意]SQL Server 字段有约束或者索引,需要按如下方式处理:

MySQL、Oracle和SQL Server的分页查询语句

原文地址:http://www.cnblogs.com/ginponson/p/5746435.html 假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询 SELECT * FROM student LIMIT (PageNo - 1) * PageSize,PageSize; 理解:(Limit n,m)  =>从第n行开始取m条记录,n从0开始算. 2.Oracel的分页查询

oracle 、sql server 、mysql 复制表数据

我们知道在oracle 中复制表数据的方式是使用 create table table_name as select * from table_name 而在sql server  中是不能这么使用的 语句如下: select * into table_name from table_name; 而在 mysql 中有两种方式 1. create table a like b 2. 类似oracle的方式 create table table_name as select * from tabl

oracle mysql sql serve where in 语句的不同

类似这样的语句在mysql  oracle 是可以执行成功的, select * from classfirst where (classid ,classname) not in (select classid, classname from classfirst where classid=2 ) 但是在sql server 中提示以下错误 消息 4145,级别 15,状态 1,第 1 行在应使用条件的上下文(在 ',' 附近)中指定了非布尔类型的表达式. 所以在日常的使用中对于sql  s

Oracle和SQL SERVER在SQL语句上的差别

Oracle与Sql server都遵循SQL-92标准:http://owen.sj.ca.us/rkowen/howto/sql92F.html,但是也有一些不同之处,差别如下: Oracle中表名,字段名,存储过程名,变量名不能超过30个字符串长度. Oracle中不支持Top 语法.使用whererownum < n 代替.但需要注意如果在Top前有排序的操作,则需要先排序在利用rownum取得. Oracle中光标的使用与SqlServer中有挺大差别,主要是在循环控制方面不一致. 在

Oracle vs SQL Server

随着学习知识的不断变化,为了使用各种各样的学习的需求,接触的不同的数据处理的数据库也很多对于sql是充满了感情的,因为所做的.net系统都是借用sql来存储我们的数据,而对于oracle初次见面,多以来互相了解一下,其实所具有的东西都是大同小异的,只是显示的略有区别: <一>实用环境 一般情况下: 小型数据库 中型数据库 大型数据库 Access ,foxbase Mysql  sql server Sybase oracle db2 <二>主要区别 开放性 SQL Server是

Datatypes translation between Oracle and SQL Server

Datatypes translation between Oracle and SQL Server part 1: character, binary strings Datatypes translation is one of the most important things you need to consider when migrate your application from one database to the other. This is an article in t

关于Oracle与SQL Server中数据迁移的办法

最近遇到一个需求,需要把Oracle中一部分表的数据迁移到SQL Server数据库中.但是这些表的结构是有些差异的. 方法一,使用SQL Develper的数据导出工具,导出SQL insert语句,然后再手动修改其中的一些细节,最后在放到SQL Server中执行.因为前后的表结构是有差异的,我需要一条一条语句的去删掉一些字段,然后再删掉一些值,几条或者几十条数据还行,这40万条数据,太多了,这个方法行不通. 方法二,使用C#代码.我用C#写了一个Data Migration的控制台小程序,