各个数据库的分页算法,Oracle的intersect和minus运算

1.SQL SERVER 2000  是用先逆序再正序的方法

select top 3 * from (select top 9 * from mvc_book order by bid) as s order by s.bid desc [第6,5,4条]

select * from (select top 3 * from (select top 6 * from mvc_book order by bid) as s order by s.bid desc) as s1 order by s1.bid  [第4,5,6条]

select top 6 * from mvc_book where (bid not in (select top 2 bid from mvc_book))[第3,4,5,6,7,8条]
 

sql2005

WITH, ROW_NUMBER (行数)and OVER

    这对SQL Server 2005来说非常新鲜并且看上去非常有用。下面一个例子显示从一个结果集得到20至19条记录。刚开始有一点惊奇,但是浏览了查询器后发现它是如此简单。

With Cust AS
( SELECT CustomerID, CompanyName,
ROW_NUMBER() OVER (order by CompanyName) as RowNumber
FROM Customers )
select *
from Cust
Where RowNumber Between 20 and 30

    SQL Server 2005的WITH指定了一个临时命名的结果,很像SQL Server以前版本中的临时表。但是,输入部分是ROW_NUMBER和OVER声明,它根据公司的名称在每组中创建行数。这就像通过命令条文向临时表添加一个身份种子。
我希望你赞成我的看法。如果不,运行代码并查看结果集。对大表来说速度真的非常快; 表的速度超过250,000条记录,对此我留下了深刻的印象。

 

2.ORACLE 用Minus和Rownum来实现 (Minus 减去  Union 联合 Intersect 返回相同的记录集)

select * from t_service_vnet_send where rownum <= 15 MINUS select * from t_service_vnet_send where rownum <= 10;

select * from (select rownum no,id,age,name from loaddata where rownum <= 3 ) where no >= 2;

3.DB2
select * from (select ROW_NUMBER() over() as a, org.* from org) as temp where a>=n1 and a<=n2

4.MYSQL
select * from tablename limit m,n;

 

 

 

两个有用的oracle数据库运算:intersect和minus运算

 

intersect运算 
返回查询结果中相同的部分 
exp:各个部门中有哪些相同的工种 
select job 
from account 
intersect 
select job 
from research 
intersect 
select job 
from sales; 

minus运算 
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。 
有哪些工种在财会部中有,而在销售部中没有? 
exp:select job from account 
minus 
select job from sales;

posted @ 2009-06-10 23:00  永不言败  阅读(706)  评论(0编辑  收藏  举报