一、oracle、mysq、sqlserver取结果中几行记录的 区别 http://www.w3school.com.cn/sql/sql_top.asp 原始的表 (用在例子中的): persons 表: id lastname firstname address city 1 adams john oxford street london 2 bush george fifth avenue new york 3
一、oracle、mysq、sqlserver取结果中几行记录的区别
http://www.w3school.com.cn/sql/sql_top.asp
原始的表 (用在例子中的):persons 表:
idlastnamefirstnameaddresscity
1 adams john oxford street london
2 bush george fifth avenue new york
3 carter thomas changan street beijing
4 obama barack pennsylvania avenue washington
top 子句top 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,top 子句是非常有用的。
注释:并非所有的数据库系统都支持 top 子句。
sql server 的语法:select top number|percent column_name(s)from table_name
sql top 实例现在,我们希望从上面的 persons 表中选取头两条记录。
我们可以使用下面的 select 语句:
select top 2 * from persons
结果:idlastnamefirstnameaddresscity
1 adams john oxford street london
2 bush george fifth avenue new york
sql top percent 实例现在,我们希望从上面的 persons 表中选取 50% 的记录。
我们可以使用下面的 select 语句:
select top 50 percent * from persons
结果:
idlastnamefirstnameaddresscity
1 adams john oxford street london
2 bush george fifth avenue new york
第一种方法:select top n * from (select top m * from tablename order by columnname) a order by columnname desc
这个是用一个 sqlserver中 top比order by 后执行 的原理。
第二种方法:
/*以下示例将返回行号为 50 到 60(含)的行,并以 orderdate 排序。*/ select * from( select row_number() over (order by orgid) as rownum from org_info ) as wowhere wo.rownumber between 50 and 60
mysql 语法select column_name(s)from table_namelimit number
例子
select *from persons limit 5
oracle 语法select column_name(s)from table_namewhere rownum <= number
select * from (select rownum rm, ui.* from user_info ui where rownum 5;
oracle中的rownum 只能用以上符号(<、5 and rm<8。那结果就是 取 第6到7条记录了!
例子select *from personswhere rownum <= 5
注意
1、sqlserver 中sql的执行顺序。
from:对from子句中的前两个表执行笛卡尔积(cartesian product)(交叉联接),生成虚拟表vt1on:对vt1应用on筛选器。只有那些使为真的行才被插入vt2。outer(join):如 果指定了outer join(相对于cross join 或(inner join),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 vt2,生成vt3.如果from子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。where:对vt3应用where筛选器。只有使为true的行才被插入vt4.group by:按group by子句中的列列表对vt4中的行分组,生成vt5.cube|rollup:把超组(suppergroups)插入vt5,生成vt6.having:对vt6应用having筛选器。只有使为true的组才会被插入vt7.select:处理select列表,产生vt8.distinct:将重复的行从vt8中移除,产生vt9.order by:将vt9中的行按order by 子句中的列列表排序,生成游标(vc10).top:从vc10的开始处选择指定数量或比例的行,生成表vt11,并返回调用者。 注意:这里的top 在 order by 的后面执行。意思是:sqlserver先进行排序再取top的数据。
2、oracle 中 order by 也是比 rownum先执行。
二、if else 区别:
mysql和oracle的区别:
1)、注意elseif区别:
在mysql中:
if search_condition then statement_list
[elseif search_condition then statement_list] ...
[else statement_list]
end if
2)、在oracle中:
if 条件1 then
...如果条件1为真,则执行这里的语句...
elsif 条件2 then
...如果条件1为假,但是条件2为真,则执行这里的语句...
else
...如果条件1和条件2都为假,则执行这里的语句...
end if;
