设为首页 收藏本站
查看: 1333|回复: 0

[经验分享] Oracle的基本语法——DDL & DML

[复制链接]

尚未签到

发表于 2016-8-4 09:45:51 | 显示全部楼层 |阅读模式
一、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效率非常高
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252626-1-1.html 上篇帖子: Oracle官方教程之Fork/Join 下篇帖子: Oracle 创建表空间用户授权
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表