课程表

Oracle 基础教程

Oracle 进阶教程

Oracle PL/SQL

Oracle OEM

Oracle 备份和恢复

Oracle RAC

工具箱
速查手册

Oracle 增删改查

当前位置:免费教程 » 数据库/运维 » Oracle

一、select 查询语句

通过上一章节Oracle语句介绍,我们了解到对Oracle表数据进行查询是数据查询语言(DQL)。下面我介绍Oracle表的简单查询。

简单查询是利用SELECT命令从表中进行提取数据,SELECT命令结构如下:

  1. select *|列名|表达式 from 表名 where 条件 order by 列名

案例1:查询学生信息表(stuinfo)中“李四”同学的基本信息:

  1. select t.* from STUDENT.STUINFO t where t.stuname = '李四';

1.jpg

案例2:查询“李四”同学的学号、班级、年级和地址:

  1. select t.stuid,t.classno,t.stuaddress,t.grade from STUDENT.STUINFO t where t.stuname = '李四';

2.jpg

案例3:查询班级“C201801”所有同学信息,按年龄进行升序展示:

  1. select t.*  from STUDENT.STUINFO t where t.classno = 'C201801' ORDER BY T.AGE ASC

3.jpg

语法解析:

1、“t”代表stuinfo的别名。

2、  "*"  代表所有字段。

3、表达式可以是函数(列名)、常数、连接词“||”等组成的表达式。

4、where子语句是查询语句的条件。

5、order by :查询结果按某个字段进行排序,默认是升序,desc是降序。

备份查询数据

Oracle进行表数据备份时,可以利用create table(建表)的方式对select查询的结果进行快速备份。



备份查询数据命令结构:

  1. create table 表名 as select 语句

案例 4:备份学生信息表(stuinfo)的数据:

  1. create table student.stuinfo_2018 as select * from student.stuinfo ;
  2. select * from student.stuinfo_2018;

结果如下:

4.jpg


二、插入(insert into)

Oracle对表数据的插入是使用insert命令来执行的。

insert 命令结构:

  1. insert into 表名(列名1,列名2,列名3.....)values(值1,值2,值3.....);

语法解析:

1、列名可以省略,当列名不填时,默认的是表中的所有列,列的顺序是按照建表的顺序进行排列的。

2、列名的数量和值的数量要一致,并且值的类型要和列的类型一一对应。

3、当表当中某些字段设置了某些约束的情况下,必须按照字段的约束来进行该值的插入,例如:学生信息表(STUINFO)当中设置有主键(主键字段是STUID),因此该字段必须具有唯一性,不能和原有的数据重复。age、stuname、calassno等字段是必填字段,因此是必须有值的。


案例1:向学生信息表(stuinfo)插入一条数据:

  1. insert into STUDENT.STUINFO (STUID, STUNAME, SEX, AGE, CLASSNO, STUADDRESS, GRADE, ENROLDATE, IDNUMBER)
  2. values ('SC201801005', '龙七', '1', 26, 'C201801', '福建省厦门市XXX号', '2018', to_date('01-09-2018', 'dd-mm-yyyy'),
  3.  '3503021992XXXXXXXX');
  4. select * from student.stuinfo t where t.stuid='SC201801005';

结果如下:

1.jpg

案例2:向学生信息表(stuinfo)插入重复数据:

  1. insert into STUDENT.STUINFO (STUID, STUNAME, SEX, AGE, CLASSNO, STUADDRESS, GRADE, ENROLDATE, IDNUMBER)
  2. values ('SC201801005', '龙七', '1', 26, 'C201801', '福建省厦门市XXX号', '2018', to_date('01-09-2018', 'dd-mm-yyyy'),
  3.  '3503021992XXXXXXXX');

2.jpg

insert插入一个select的结果集

在 Oracle 中,一个 INSERT 命令可以把一个select结果集一次性插入到一张表中。


语法结构如下:

  1. INSERT INTO  SELECT 子句,

案例3:把上一章节利用Oracle查询(select)语句备份的表stuinfo_2018的数据一次插入表stuinfo当中:

  1. delete  from student.stuinfo t where t.stuid in (select b.stuid from student.stuinfo_2018 b );
  2. insert into student.stuinfo select * from student.stuinfo_2018;
  3. select * from student.stuinfo;

结果如下:

3.jpg

提示!

数据操纵语言(DML)包括 INSERT(插入)命令、 UPDATE(更新)命令、 DELETE(删除)命令、 SELECT … FOR UPDATE(查询)等。只有提交(commit)后才能持久化到数据库。


三、更新(update)

Oracle对表数据的更新是使用update命令来执行的。

update命令结构:

  1. update 表名 set 列名1=值1,列名2=值2,列名3=值3..... where 条件

案例1、更新学生“张三”的年龄和身份证信息:

  1. update student.stuinfo t
  2.    set t.age = '24', t.idnumber = '3503021994XXXXXXXX'
  3.  where t.stuname = '张三';
  4. commit;
  5. select * from student.stuinfo t where t.stuname='张三';

结果如下:

1.jpg

update 利用另外一张表关联更新本表数据的命令结构如下:

  1. update 1 set 列名=(select 列名 from 2 where 1.列名=表2.列名) 
  2.        where exists (select 1 from 2 where 1.列名=表2.列名)

案例2、利用备份表stuinfo_2018更新回学生“张三”的年龄和身份证:

  1. update student.stuinfo t
  2.    set (age, idnumber) =
  3.        (select age, idnumber from student.stuinfo_2018 b where b.stuid = t.stuid)
  4.  where exists (select 1
  5.           from student.stuinfo_2018 b
  6.          where b.stuid = t.stuid
  7.            and b.stuname = '张三');
  8.             
  9. select *from student.stuinfo t where t.stuname='张三';

结果如下:

2.jpg


四、删除(delete)

1、Delete命令

Oracle中对表数据的删除是利用delete命令进行的。


delete命令结构:

  1. delete from 表名 where 条件

命令解析:

注意,当delete from不加where条件时,表示是把表中的数据全部删除!!


案例1、删除学生信息表(stuinfo)中学生“张三”的数据:

  1. delete  from stuinfo t where t.stuname='张三';

结果如下:

1.jpg

2、truncate命令

truncate命令也是数据删除命令,他是直接把Oracle表数据一次删除的命令,truncate命令是一个DDL命令,不同于delete是DML命令。


truncate命令结构:

  1. truncate table 表名;

案例2、删除学生信息备份表(stuinfo_2018):

  1. truncate table stuinfo_2018;

结果如下:

2.jpg

3、区别

truncate和delete都能删除表中的数据,他们的区别:

1、TRUNCATE 是 DDL 命令,命令执行完就提交,删除的数据不能恢复; DELETE 命令是 DML 命令,命令执行完需提交后才能生效,删除后的数据可以通过日志文件恢复。

2、如果表中的数据量较大,TRUNCATE的速度比DELETE速度快很多。

3、truncate删除将重新设置表索引的初始大小,而delete不能。

4、delete能够触发表上相关的delete触发器,而truncate则不会触发。

5、delete删除的原理是一次一条从表中删除数据,并将删除操作当做事物记录在数据库的日志当中,以便进行数据回滚。而truncate是一次性进行数据页的删除,因此执行速度快,但是不能回滚。

总结:truncate命令是属于DDL命令,一次性删除表中所有数据,并且数据不能恢复,在实际开发过程当中truncate命令慎用。


转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号