ORACLE学习(一)

    不管学习什么东西,首先要有信心,其次要有耐心,有个循序渐进的过程,欲速则不达。----写在前边的话

 

    目前主流数据库包括:

                                 微软:                    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')    

 

你可能感兴趣的:(合并查询,分页,子查询,数据库选择,Oracle 用户)