Review_oracle 读笔记

1. select * from user_tables;
    select * from all_tables;
2.视图是一个逻辑表,该表基于一个或者更多的表或者视图.它不包含实际的数据本身,而是选择性从表中显示列,该

表从基础表中创建.记住这些视图只提供对数据的访问,它们实际不包含数据,而是保存在附属的表中.
格式:CREATE VIEW  VIEW_NAME AS (SElECT 查询语句)
3.删除某一列:
Alter table Table_name drop  column cloumn_name;
4. 在oracle 中不等于可用:!=或<>
5.ORDER BY从句:通过一个或者多个列,及表达式排列自己行的顺序.列或表达式不必处于正在返回进行查询的列或表

达式的目录中.你可以指定上升的(默认ASC)或下降(DESC)种类顺序.NULL值认定为最大的值,所以带有NULL 的行是下

降类中第一个.
6.
  1. LEFT OUTER JOIN:左外关联  //左表的所有记录都显示,而用(+)时恰好在显示在右边,要注意区分。
  SELECT e.last_name, e.department_id, d.department_name
  FROM employees e
  LEFT OUTER JOIN departments d
  ON (e.department_id = d.department_id);
  等价于
  SELECT e.last_name, e.department_id, d.department_name
  FROM employees e, departments d
  WHERE e.department_id=d.department_id(+);

7.可使用select 语句从另外一个表的内容填充到一个表中.
 INSERT INTO SCOTT.NO_COMM ( EMPNO, ENAME, COMM)
             SELECT EMPNO,ENAME,COMM
                   FROM  SCOTT.EMP
                    WHERE EMPNO IN (800,900);
进行多表插入:
 INSERT FIRST
  WHEN COMM>=1000 THEN
   INTO HIGH_COMM
  WHEN COMM<1000 THEN
   INTO HIGH_COMM
  ELSE
   INTO NO_COMM
             SELECT EMPNO,ENAME,COMM
                   FROM  SCOTT.EMP
                    WHERE EMPNO IN (800,900);
关键词:FIRST指定INSERT语句应该仅将行插入到第一个目的表中.
 ALL代替将强行对目录中第个条件进行评估.

8.UDATE SCOTT.EMP E
  SET SAL=(SELECT AVG(SAL) FROM SCOTT.EMP D
              WHERE D.DEPT_NO=E.DEJPTNO);
9.可使用UNION 运算符将表结合在一起,
sql_satement
UNION
sql_satatement
这两个SQL语句必须都拥有相同的返回值的号码,并且这些值必须拥有相同的数据类型.
还有INTERSECT,MINUS.

10.ROWNUM伪列是"不可见"的列,可被计算分配为行,这些行加入到最后的结果集.要使用ROWNUN列限制返回行的数据,

可使用它的值作为WHERE从句的一部分.
如:
select * from ( select t.*,rownum rn from M_JGSS_V_O t order by rn desc)  where rownum<=N
查询最后N条件记录,也就是先倒排序后再取先N条记录。

rownum表示记录的序号
查询前N条记录。
select * from M_JGSS_V_O t where rownum<=N
查询从M到N条件记录:
select * from (select rownum a from M_Jgss_V_O t )  where a > =1 and a<= 3
select rownum a from M_Jgss_V_O t   where a > =1 and a<= 3  这句是错误的
因为ROWNUM 以返回的行分配给初始的结果集.如果因为WHERE从句,行没有保留在结果集中,那行放弃这行.该查询对

行进行检索,将ROWNUM分配为1,因为ROWNUM符合选择标准,放弃它,然后检索另外一个行,再次为ROWNUM分配为1.

11.
 自定义函数格式:
CREATE [OR REPLACE ] FUNCTION function_name
   [([arg[{IN|OUT}] datatype,...]
RETURN datatype {IS| AS }  function_body_here

删除自定义函数:DROP FUNCTION function_name;

12.
每个PL/SQL块包含4个不同的区域:块头标,声明节,执行节,异常节.
例如:
CREATE OR REPLACE PROCEDURE addstudent(roomin IN INTEGER)
IS
   roomname VARCHAR2(20);
   studentcount PLS_INTEGER;
   capacity PLS_INTEGER;
   noroom EXCEPTION;

BEGIN
    select scount,cap,rname
     into studentcount,capacity,roomname   //INTO表示将检索的数据存放到变量中.
       from scott.rooms
 where room_id=roomin;
    if studentcount>capacity-1
     then
         Raise noroom;  //抛出异常
     else
         update scott.rooms
           set scount=studentcount+1
         where room_id=roomin;
 commit;
 DBMS_OUTPUT.put_line('stduent count now '
    || studentcount
    || ' in '
    || roomname);
END IF;


13.游标原则上充当指向结果集的指针.可以在结果集中移动游标,处理每个记录,直到结果集的结束处.存在与游标相

关的三种语法类型:创建游标,使用游标取数据,以及关闭游标.

声明游标就如同声明任何其他变量一样,在声明节或在DECLARE关键字之后使用如下语法:
CURSOR cursor_name IS sql_satement;
记住,游标是一种特殊的变量,不能在PL/SQL中为其赋值.

打开游标: OPEN cursor [argument [,argument...]]
取数据:    FETCH cursor INTO variable[, variable]
   INTO关键字后列出的多个variable必须与从查询中返回的列相匹配,还有一种声明变量的方式,就是使用
%ROWTYPE类型自动地接受在查询中所描述的值.这点很重要.
关闭游标; CLOSE coursor_name;
游标属性: %ISOPEN, %FOUND,%NOTFOUND,%ROWCOUNT

有两种特殊的数据类型:%TYPE和%ROWTYPE,被称为锚声明.
%TYPE:允许用户动态地将数据库中某一列的数据类型与PL/SQL中某个变量相关联.
variable_name table.column%TYPE
%ROWTYPE:允许用户定义单一的变量,该变量包含对应于数据库表的每一列的多个变量.
variable_name table%ROWTYPE


14.PL/SQL包是一种将多个程序单元组合起来的方法.
包与标准的程序单元之间的区别在于,包被分成两种独立的模块:包头标,或称描述,它列出其与一组程序单元的接口,

并且包含对于包外可见的任何变量或常量;包主体,它包含在头标中列出的程序单元的具体实现,以及只对于包中的程

序可见的变量和常量.
CREATE [OR REPLACE ]  PACKAGE package_name
IS
   declaration_seciton
   programe_units
end package_name

15.触发器只是代码块,oracle基于数据库表的某些行为或事件自动执行它.触发器可用来自动生成数据,在一个新表

里插入数据,为表数据创建一个审核轨迹,或者跨表存储的数据集上强迫执行引用的完整性.

语法格式:
CREATE [OR REPLACE ] TRIGGER triggername 
   [BEFORE | AFTER ] [INSERT | UPDATE | DELETE]
   ON tableName [FOR EACH ROW [WHEN condition]]
   triggerBody;

当使用FOR EACH ROW 创建对每行操作的触发器时,Oracle提供两个临时表来访问行中各行新的和以前的值:
:new 和:old.
如通过一个触发器来实现一个自动编号的主键.
create or replace trigger contentID
 berfore insert on webcontent
 for each row
begin
 select contentseq.nextval into :new.ID from dual
end contentID;
删除触发器:DROP TRIGGER triggername;

16. 执行定时操作:可以创建JOB,具体参考:
http://blog.csdn.net/pengchua/archive/2007/08/30/1765090.aspx

17.删除重复记录:
  CREATE TABLE 临时表 AS (select distinct * from 表名);  //表示复制原来的表信息
  truncate table 正式表;          
  insert into 正式表 (select * from 临时表);
  drop table 临时表;

第一种时表中只有某些字段一样
  CREATE TABLE 临时表 AS
  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
        上面这句话就是建立了临时表,并将查询到的数据插入其中。
        下面就可以进行这样的删除操作了:
  delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);
        这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。 

18,
在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函

数,select中不能出现group by中没有属性.
   select max(sal),job emp group by job;
     (注意max(sal),job的job并非一定要出现,但有意义)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值