|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在Windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart"命令,注意启动者应具有管理员权限。排序
先排序仍是先取值
标题:MSSQLSERVER和ORACLE中掏出表中依照某字段排序的前N笔记录
这个标题看上往仿佛那末复杂,两种数据库都供应ORDERBY子句.成绩应当可以水到渠成吧.
先试一下MSSQLSERVER是怎样做的:
useNorthwind;
createtableTestSort(IDinteger);
insertintotestSortvalues(3);
insertintotestSortvalues(1);
insertintotestSortvalues(4);
insertintotestSortvalues(2);
select*fromtestSort;
-----------------------------------------
ID
-----------
3
1
4
2
(4row(s)affected)
假定我们要掏出依照ID排序的前三笔记录:
selectTOP3*fromtestSortorderbyID;
-----------------------------------------
ID
-----------
1
2
3
(3row(s)affected)
很复杂,一句话就办理了.
再试一下ORACLE(这里用ORACLE9i)
SQL>createtableTestSort(IDnumber);
Tablecreated.
SQL>insertintotestSortvalues(3);
1rowcreated.
SQL>insertintotestSortvalues(1);
1rowcreated.
SQL>insertintotestSortvalues(4);
1rowcreated.
SQL>insertintotestSortvalues(2);
1rowcreated.
SQL>commit;
Commitcomplete.
SQL>select*fromtestSort;
ID
----------
3
1
4
2
ORACLE没有MSSQLSERVER中取前N笔记录的TOP语法.可是有ROWNUM能够用来完成相似功效.
SQL>select*fromTestSortwhererownum<=3orderbyID;
ID
----------
1
3
4
了局是否是有点出人意料?它并没有前往所请求的1,2,3的了局.ORACLE先依据rownum<=3的前提限定拔取一个局限汇合(3,1,4),然后再在这个汇合里举行排序.
ORDERBY子句是在符合的纪录被掏出后才起感化.
本来云云,那末在ORACLE中怎样才干完成这个功效呢?
一般我们能够接纳这类举措:
SQL>select*from(select*fromTestSortorderbyID)whererownum<=3;
ID
----------
1
2
3
有点贫苦,不外也只能如许.
不异事理,假如想从表中掏出依照某字段排序前M到N笔记录
上面的ORACLE语句是最好的:
SQL>selectIDfrom
(
selectID,rownumasconfrom
(
selectIDfromTestSortorderbyID
)
whererownum<=3/*N值*/
)
wherecon>=2;/*M值*/
ID
----------
2
3
MSSQLSERVER中也能够用相似的思绪办理此类成绩.
固然你也能够用笨一点的举措,好比用前N笔记录的汇合MINUS前M-1笔记录的汇合失掉
前M到N笔记录汇合.(有点象饶口令),不外MSSQLSERVER好象不撑持MINUS之类的汇合操纵.
看来小小的一个排序取值成绩还真不是那末复杂呢!
Black_Snail
Ligang1000@hotmail.com
接待交换,转贴请保存以上信息
从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 |
|