Oracle+DML语法,Oracle的根本语法——DDL & DML

一、DDL和DML的区别

DDL和DML都是数据库语言,DDL是数据库模式定义语言(Data Definition Language),主要包括创建、修改数据库表。DML是数据操纵语言(Data Manipulation Language),主要包括insert 、update、delete等。

二、DDL语句

1.创建数据库表

要指明表的名称、列的名称、列的数据类型、列的宽度、是否有默认值等。

create table stu(

name char(8),

salary number(5) default 0,

content char(4 char),

hiredate date

);//name为8个字节,content为4个字。

在现有表的基础上建立表

create table t1 as select ename name,sal salary from emp;//可以给列改别名

create table t2 (c1,c2,c3)as select ename,empno,sal from emp where 9=1;

//不想要数据,只建立表结构,c1,c2,c3是给列起的别名

注:表的命名规则

(1)标准ASCII码描述;

(2)必须以字母开头;

(3)不能是保留字;

(4)可以包含大小写字母、数字、$、#;

(5)不能和所属用户的其它对象重名。千万不要使用汉语做表和列的名称,因为汉语是 ASCII 码所不能描述的,ORACLE 的核心是 ASCII 编写的,你使用汉语只是一时痛快,后患无穷。

2.查询当前用户所拥有的表

select object_name,object_type from user_objects;

//user_objects当前用户所拥有的所有对象,不包含你建立的public对象

select table_name from user_tables;

//user_tables当前用户所拥有的表,拥有表的一切权利

select * from tab;

//tab是当前用户拥有的表和视图

3.修改表信息

修改表的结构

如果列为null,可以随便修改列的类型和宽度

如果有数据,修改会受到限制,但不会破坏数据

如果不改变类型,只改变宽度的话,加大宽度是可以的

alter table t1 modify(name char(12));

alter table t1 modify(name number(12));//如果列为null,可以改变列的类型

修改表的名称

rename t1 to t_1;//必须是表的owner才可以修改表的名称

修改列的名称

alter table t4 rename column c1 to name;

添加表注释

comment on table emp is 'employee table';//添加注释

select comments from user_tab_comments where table_name = 'emp';//查询表注释

添加列注释

comment on column emp.sal is '员工工资';//添加列注释

select comments from user_col_comments

where tab_name='emp' and column_name='sal';//查询列注释

丢弃表

drop table t2;

//此语句并没有将表真的删除,只是改了名称

show recyclebin;//显示回收站的信息

select * from user_recyclebin;//查询该用户的回收站信息

将回收站的表还原

flashback table t2 to before drop;//还原t2

flashback table t2 to before drop rename to tt2;//还原表的同时修改表的名称

清空回收站内指定的表

purge table t2;//清空回收站的t2表

purge recyclebin;//彻底地删除回收站里的表

三、DML语句

1.insert 语句

insert into t1(c1,c2,c3) values(v1,v2,v3);//列的个数和数据类型要匹配

insert into t1(c2) values(sysdate);//插入当前日期

隐式插入null

在插入中没有列出的列,就会被插入null,如果该列有default值,那么就插入默认值

insert into dept(deptno) values(50);//其中dname,loc没有说明,都为null

显示插入null值

明确的写出该列的值为null

insert into dept values(60,null,null);

insert into dept(loc,dname,deptno) values(null,null,70);

日期

当插入的列为日期的时候,最好强制转化为日期类型,默认的转换在环境变化的时候会报错

insert into t3(hiredate) values(to_date('080599','mmddrr'));

字符串

字符串大小写敏感

insert into t2(c1) values ('BEIJNG');

insert into t2(c1) values('beijing');

子查询插入

不加values关键字,一次可以插入多行,列的类型和位置要匹配

insert into d1 select * from dept;

insert into emp2 select * from emp where deptno=30;

2.update语句

修改表中的数据

update emp set sal=sal+1;

update emp set sal=2000 where empno=7900;

update emp set comm=null where deptno=30;

用子查询来更新

update emp2 set dname=(select dname from dept where dept.deptno=emp2.deptno);

给列设定指定值

create table t1(c1 number(2) default 10,c2 char(10) default 'bj');

update emp2 set empno=default;

3.delete删除行

delete t1;//只删除表t1中的所有行数据,表还在

delete t1 where sal > 2000;//将符合条件的行删除

4.Merge语句

Merge是update和insert的结合体,有就做update,没有就做insert,

Merge into解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表

语法:

MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]

eg:

merge into t_a a

using (select FP0,FP1,FP2,FP3,REDE

from t_b) b

on (a.fp0=b.fp0 and a.fp1=b.fp1 and a.fp2=b.fp2 and a.fp3=b.fp3)

when matched then update set a.rede=b.rede

when not matched then insert (a.fp0,a.fp1,a.fp2,a.fp3,a.org_severity,a.rede,

a.event_time,a.int_id)

values (b.fp0,b.fp1,b.fp2,b.fp3,b.REDE,b.redefine_severity,sysdate,7777778);

//利用表 t_b跟新表t_a的b.redefine_severity,

条件是a.fp0=b.fp0 and a.fp1=b.fp1 and a.fp2=b.fp2 and a.fp3=b.fp3,

如果tfa_alarm_act_nms表中没有该条件的数据就插入。如果数据量很大,此sql效率非常高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值