以前没接触过Oracle数据库,由于部分数据布在Oracle数据库上,不可避免的要去Oracle上捞数据,今天碰到的一个用法差异是分页差异:
在MySQL上,分页查询的语法是:
limit begin,offerset #返回从begin开始,往后偏移offset的结果集
limit nums #共返回nums个结果集
然而在Oracle中是没有limit相关的语法的,所以使用limit进行查询的时候是会报错的。在Oracle中分页,需要使用rownum通过嵌套的方式进行,也是折腾了好久才发现的问题(血泪教训是:碰到问题还是得问,不然盲目地找方向实在是太难了。。。)
具体的分页写法可以参见ORACLE分页查询SQL语句(最有效的分页),摘录两种写法:
无order的写法:
SELECT *
FROM (SELECT ROWNUM AS rowno, t.*
FROM emp t
WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
AND TO_DATE ('20060731', 'yyyymmdd')
AND ROWNUM <= 20) table_alias
WHERE table_alias.rowno >= 10;
有ORDER BY排序的写法:
SELECT *
FROM (SELECT tt.*, ROWNUM AS rowno
FROM ( SELECT t.*
FROM emp t
WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
AND TO_DATE ('20060731', 'yyyymmdd')
ORDER BY create_time DESC, emp_no) tt
WHERE ROWNUM <= 20) table_alias
WHERE table_alias.rowno >= 10;
多表联查啥的怎么写,目前还未涉及,后面碰到了再学吧,毕竟公司的项目已经走上"脱欧"(Oracle)的征程了。。。。
突然想到个问题,使用MyBatis能自动区分数据库,然后选择正确的SQL语句吗?明天去看看。。。