不管学习什么东西,首先要有信心,其次要有耐心,有个循序渐进的过程,欲速则不达。----写在前边的话
目前主流数据库包括:
微软: sql server 和 access
瑞典AB公司: mysql
IBM: db2 和 informix
Sybase公司: sybase
Oracle: oracle
数据库的选择:
主要决定于项目的规模:a.负载量大小 b.成本 c.安全性
oracle用户:
sys是超级用户,具有最高权限,具有sysdba角色,有create database的权限。
system是管理操作员,具有sysoper角色,没有create database的权限。
oracle用户管理:
DBA级别以上的用户才有权限创建用户,创建用户使用 create user xxx identified by xxx语句。
all 和 any 的用法
select * from emp t1 where t1.sal > any (select sal from emp where deptno = 20)
返回结果是多列的子查询
select * from emp t1 where (t1.deptno, t1.job) = (select deptno, job from emp where ename = 'SMITH')
另外一种思路:可以将子查询作为第二张表,做连接查询。
oracle有三种分页方法:
a. rowId效率高, 难理解
select * from emp where rowid in (select rid from (select rownum rn, rid from (select rowid rid, t1.* from emp t1 order by empno desc) where rownum <= 10) where rn >= 6) order by empno desc;
b.rownum分页,容易理解,效率中等
select * from (select rownum rn, a1.* from (select * from emp) a1 where rownum <= 10) where rn >= 6
c. 使用分析函数分页,效率最差
select * from (select t.*, row_number() over(order by empno desc) rk from emp t) where rk <= 10 and rk >= 6
合并查询
union 、union all、intersect、minus : union去掉两者交集的重复数据,union all不去重,intersect取得两者的交集,minus取的是两者的差集,如果被减的结果集包括前边的结果集,返回空集。
(select * from emp where sal >= 2500) union (union all ,intersect, minus) (select * from emp where job = 'MANAGER')