oracle_sql

/*将查询结果生成新表*/

CREATE TABLE A AS SELECT * FROM B

 

/*将查询结果插入到新表中*/

insert into b select * from a

删除所有记录
DELETE FROM  linhusong.test02

将A表的某列插入到B表的某列,如果插入整个表的记录则直接写表名就可以
INSERT INTO linhusong.test02(linhusong.test02.name_2) SELECT linhusong.test01.name  FROM linhusong.test01

/*以左表(C)为准连接右表*/

SELECT *

FROM t_class c LEFT /*OUT*/ JOIN t_studentss

ON c.c_id=s.s_class

 

/*以右表(S)为准连接左表*/

SELECT *

FROM t_class c RIGHT /*OUT*/ JOIN t_studentss

ON c.c_id=s.s_class

 

/*以上两种情况合并*/

SELECT *

FROM t_class c RIGHT /*OUT*/ JOINt_students s

ON c.c_id=s.s_class

 

   在Oracle PL-SQL中,左连接和右连接以如下方式来实现

   查看如下语句:

SELECT emp_name, dept_name

FORM Employee, Department

WHERE Employee.emp_deptid(+) = Department.deptid

 

   此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现

某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

 

反之:

SELECT emp_name, dept_name

FORM Employee, Department

WHERE Employee.emp_deptid =Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示。

 

 

SELECT col1, col2,

      CASE

         WHEN col3 > 1 AND col3 <2

            THEN '1'

         WHEN col3 > 2 AND col3 <3

            THEN '2'

         WHEN col3 > 3 AND col3 <4

            THEN '3'

          ELSE '4'

      END mylevel

FROM table1

 

注意点:

1、以CASE开头,以END结尾

2、分支中WHEN 后跟条件,THEN为显示结果

3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加

4、END 后跟别名

 

 

 

select u.creator_id 创建者ID,

sum( case u.sex when 1 then 1 else 0 end) 男性,

sum( case u.sex when 2 then 1 else 0 end) 女性,

sum( case when u.sex<>1 andu.sex<>2  then 1 else 0 end) 性别为空

from users u

group by u.creator_id;

 

 

Oracle中没有已定义好的自动编号列,需要自己创建,下面总结Oracle 10g中自动编号列的创建方法:
       1. 首先需要给要添加自动编号列的表创建索引,被索引的列就是后面要实现的自动编号列,这样的列往往是名为“ID”的列。创建索引可以通过OEM创建,也可以在SQL*Plus或PL/SQL中通过SQL语句创建。以方案LY中的表HARD为例,给其hard_id列创建索引的SQL语句为:
           CREATE UNIQUE INDEX LY.HARD ONLY.HARD(hard_id);

        2. 然后需要创建一个最小值为1,最大值不限,递增值为1的序列。序列的创建同样可以通过OEM或直接输入SQL语句创建。创建序列的SQL语句为:
        drop sequence HARD_SEQ;
        create sequence HARD_SEQ
        minvalue 1
        maxvalue999999999999999999999999999
        start with 21
        increment by 1
        cache 20
        order;

        3.最后为表LY.HARD创建触发器,以实现在每次插入行时,hard_id列自动递增编号。触发器的创建同样可以方便的由OEM创建,也可以用SQL语句创建。下面为创建触发器的SQL语句:
        CREATE OR REPLACE TRIGGER"HARD_ID_TRIGGER" BEFORE
        INSERT ON"LY"."HARD" FOR EACH ROW
        declare
        next_checkup_no number;
        begin
        select hard_seq.nextval
        into next_checkup_no
        from dual;
        :NEW.hard_id := next_checkup_no;
       end;

        需要注意的是,在用OEM创建触发器时,有可能出现“Failedto commit: 索引中丢失 IN 或 OUT 参数:: 1”的错误提示,在网上查阅了一些资料,认为这可能是Oracle中的一个BUG,所以建议使用SQL语句创建触发器。

 

 

 

首先,你要有一张表!
CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50));
如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!
然后,你需要一个自定义的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)
书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
CREATE TRIGGER "触发器名称" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;
打完收工!下面你就试试插入数据吧!
INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值