Oracle学习第二天

1.外连接:

    a.左外连接:当where e.deptno=d.deptno不成立的时候,等号左边的表任然被包含

        写法:where e.deptno=d.deptno(+)

    b.右外连接:当where e.deptno=d.deptno不成立的时候,等号右边的表任然被包含

        写法:where e.deptno(+)=d.deptno


2.自连接不适合操作大表


3.层次查询:

   select  levle(伪列),empnoemp connect by prior empno=mgr  start with mgr is null order by 1;


4.子查询解决的问题:不能一步求解


5.子查询注意的事项:

   a.可以在主查询的where select having from后面放置子查询

   b.不可以在group by中放置子查询

   c.强调from后面的子查询

   d.主查询和子查询可以不是同一张表:只要子查询返回的结果,主查询可以是使用即可

   e.一般不在子查询中使用order by;但在TOP-N分析问题中,必须对子查询排序

   f.一般先执行子查询,在执行主查询;但相关子查询例外

   g.单行子查询只能使用单行操作符;多行子查询只能使用多行操作符


6.在select中使用子查询

   select empno,ename,(select job from emp where dentno=10) from emp;

   在having后面放置子查询

   select deptno,min(sal) from emp group by deptno having min(sal)>(select min(sal) 

                                                                                                      from emp where deptno=10)


7.两张表查询: 理论上,尽量使用多表查询


8.当行子查询:当子查询中查处的的是空,那么主查询查询出来的也是空


9.多行子查询:

   any和集合中任意一个值做比较,all和集合中所有值做比较

   

10.not in中不能包含空的集合,in中就可以


11.并集:union/union all   交集:intersect  差集:minus


12.集合注意事项:
    a.参与运算的各个集合必须要列数相同,且类型一致

    b.采用第一个集合的表头作为最后一个表头

    c.必须在最后一个几个使用order by

    e.可以使用()定义先后秩序


13.尽量不要使用集合运算


14.打开sql执行的时间

    set timing on


15.关于行号:

      a.rownum永远是按照默认的循序生成

      b.rownum只能使用<,<=;不能使用>,>=

      分页语句

      select * from

      (select rownum r,empname sal from

      (select * from emp odeber by sal desc) e1

       where rownum<=8) e2 where r>=5;

    

16.练习:查询本部门大于平均薪水的员工

       select e.empno,e.ename,e.sal,d.avgsal

          from   emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and                                   

          e.sal>d.avgsal

17.练习:查询1981,1982,1983的员工数

        select count(*) total,sum(decode(to_char(hiredate,"yyyy"),"1981",1,0)) "1981" from emp;


18.SQL的类型

      a.DML(Data Maipulation Language数据库操作语言):select  insert update delete

      b.DDL(Data Definition Language数据库定义语言):create  alter drop truncate

       c.DCL(Data Control Language 数据控制语言):grant revoke


19.批处理:

    将部门为10的员工一次性插入新的表中:

     insert into sale_res(id,ename) select employee(id,ename) from deptno=10


20.海量拷贝数据

      a.可以使用数据泵

      b.可以使用SQL*Loader

      c.可以使用外部表


21.数据的完整性:指的就是表上的约束


22.delete和trucate的区别:

       a.delete逐条删除,truncate先摧毁 再重建

       b.deleteshDML(可以回滚),truncate是DDL(不可以回滚)

       c.delete不会释放表空间,truncate会释放表空间

       d.delete会产生碎片,truncate就不会产生碎片

       e.delete可以闪回,truncate不可以

              闪回:表示可以commit之后可以闪回    

       f.在orcale中delete比较快,truncate速度慢,mysql则相反    


23.去掉碎片:

    a.alter <表名> move

    b.导出 导入

    

24.set  feedback off  --不打出回显信息


25.导入sql语句:@d:\a\test.sql


26.Orcale事务的标志

     a.开始标志:事务中的第一条DML语句

     b.结束标志:提交 : 显示 commit

                                    隐式 正常退出exit 

                          DDL语句

                          回滚:显示 rollback

                          隐式:非正常退出,掉电,宕机

27.回滚点:

     savepoint a;--设置回滚点

      rollback  to savepoint a;--回滚到事务点a


28.orcale事务的隔离级别:3个

     set transaction read only


29.rowid是Orcale数据库的伪列,是列的地址


30.create table emp10 as select * from emp where 1=2 --只想拷贝表的结构

 

31.修改表:

    a.追加新的列:

        alert table test add photo blob;

    b.修改一个列:

        alert table test modify name varchar2(40)

    c.删除列:

         alert table test drop column photo.

     e.修改列名

         alert table rename colunm name to username

     f.重命名表

          rename test1 to test2


32.drop表不是真的删除,而是到Orcale的回收站


33.查看回收站:show recyclebin    清空回收站: purge recylebin


34.select * from "<回收站表的别名>"可以查看回收站的表


35.管理员是没有回收站的

     conn sys/password@192,168.1.1:1521/orcal as sysdba--切换到管理员身份


36.check 约束

     gender varchar2(2) check(gender in('男',''女)),

     sal number check(sal>0)


37.子表的外键不许是父表的主键

     


38.orcale的级联删除

      on delete cascade

      on delete set null


39.给约束取别名:

    sal number constraint sal_name check(sal>0)


40.外键约束

   deptno number constraint student_fk_references dept(deptno) on delete set null


2016.2.8 11:12

大年初一






     


      








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值