1、使用上
1)oracle不允许使用AS作为表别名
这样写是错误的:
select * from STUDENT AS S;
2)oracle新版有新的分页方法,这里说旧的 rownum
使用rownum分页:rownum支持小于号,不支持大于号,
分页时需要子查询来处理大于号的问题:
SELECT a.* FROM
(SELECT a.*,ROWNUM r FROM ACT_RU_EXECUTION a WHERE ROWNUM < 10) a
WHERE a.r>5;
mysql分页正常使用limit
从第3条开始,取5条
SELECT * FROM STUDENT LIMIT 2,5
3)查询时的一些函数不同:
拼接:
oracle只支持两个字符串的拼接,若想拼接多个字符串可以嵌套使用CONCAT:
SELECT * FROM STUDENT WHERE studentId LIKE CONCAT(CONCAT('%', #{studentId}),'%');
mysql支持多个字符串拼接:CONCAT(str1,str2,…)
SELECT * FROM STUDENT WHERE studentId LIKE CONCAT('%', #{studentId},'%');
高级拼接,合并连接查询某个字段的多个值:
oracle
SELECT wm_concat(r.role_name) AS role_name FROM user u LEFT JOIN role r ON u.user_id = r.user_id;
可排序:
SELECT listagg (r.role_name, ',' ) within GROUP (ORDER BY r.role_id) AS role_name FROM user u LEFT JOIN role r ON u.user_id = r.user_id;
mysql
SELECT GROUP_CONCAT(CONCAT(s.student_name)) AS student_name FROM PARENT AS p LEFT JOIN student AS s ON p.student_id = s.student_id GROUP BY p.student_id;
2、结构
oracle数据库是最顶层,下面是不同用户,表属于用户;
mysql用户是最顶层,下面是不同数据库,然后是表
3、隔离级别,这里我们说默认的
oracle是读已提交,同一事物多次查询可能结果不一致(可能读取到其他事物插入的数据);
mysql是可重复读,通过mvcc无锁并发控制来实现同一个事物多次查询到的结果一致