hooyantsing's Blog

第40次课程

字数统计: 1.5k阅读时长: 7 min
2019/07/18

源辰74班

第40次课程

07.18.2019

**内容    **

Oracle_数据的操作[蒋斌]

1.案例表

–主表

create table classInfo(

       cid number(4) primary key,

       cname varchar2(100) unique not null,

       cyear number(4),

       clen number(1)

);

–从表

create table stuInfo(

       stuNo number(10) primary key,

       cid number(4) constraint fk_stu_cid references classInfo(cid),

       stuName varchar2(100) not null,

       stuPwd varchar2(20) not null,

       stuCardId varchar2(20) constraint ck_stu_cardid check(length(stuCardId)=18),

       stusex varchar2(4) default ‘男’ constraint ck_stu_sex check(stusex in(‘男’,’女’)),

       stuAge varchar2(4) constraint ck_stu_age check(stuAge between 12 and 30),

       stuTel varchar2(15) unique,

       stuAddr varchar2(100)

);

2.虚拟表 dual

–dual 虚拟表

select * from dual;

select sysdate from dual;

select ‘hello’ from dual;

**3.**数据操纵语言(DML)

对表增删查改

4.向表中添加表记录

–添加单条表记录

insert into classInfo values(1001,’计算机’,2019,4);

/insert into <表名> values(<对应参数值>)/

–添加单条指定字段表记录

insert into classInfo(cid,cname) values (1002,’软件’);

/insert into <表名>(<字段名>) values (<对应参数值>)/

–添加多条表记录 union

insert into Classinfo

select 1001,’计算机1班’,2019,4 from dual union

select 1002,’计算机2班’,2018,4 from dual union

select 1003,’计算机3班’,2017,4 from dual ;

/insert into <表名> select <对应参数值> from dual union …/

5.表复制

–复制

–将A表中某些字段属性数据复制到另一张B表中

insert into classInfo(cid,cname) select empno,ename from emp;

/insert into <B表名>(<B字段名>) select <对应B数量A字段名> from <A表名>/

–复制表

create table classInfo1 AS select * from dept;

/create table <新表名> AS select * from <被复制表名>/

create table newtable1 AS select seq_tab1_id2.nextval as id,total from tab1;

–复制表结构

create table classInfo2 as select * from dept where 1=0;

/create table <新表名> as select * from <被复制表名> where 1=0/

6.更新数据(更改表记录中值)

–更新数据

–更新目标表记录的数据

update classInfo set cyear=2015,clen=3 where cid=1001;

/updata <表名> set <字段名=值> where <主键=值>/

–更新字段下所有值

update classInfo set clen=3;

/update <表名> set <字段名=值>/

–通过运算更新数据

update classInfo set cyear=cyear-1;

/update <表名> set <字段名=函数>/

–删除数据

delete from classInfo where cid<1002;

/delete from <表名> where <字段名>/

–删除字段下为空的数据

delete from stuInfo where stuaddr is null;

/delete from <表名> where <字段名> is null/

–删除目标表记录的数据

delete from stuInfo where cid=1003;

/delete from <表名> where <主键=值>/

7.事务控制

–事务控制

–提交事务 事务持久化

commit;

–回滚事务

rollback;

–回滚点

savepoint p;

rollback to savepoint p;

8.序列

–序列

–自增序列

create sequence seq_id;

select seq_id.nextval from dual;

/*create sequence <序列名>

_  select <序列名>.nextval from dual*/_

–查询序列的当前值,并不会使序列自增

select seq_id.currval from dual;

/select <序列名>.vurrval from dual/

–删除序列

drop sequence seq_id;

/drop sequence <序列名>/

–指定序列的起始值和每次自增值

create sequence seq_id start with 1001 increment by 1;

/create sequence <序列名> start with <起始值> increment by <自增值>/

–生成循环序列

create sequence seq_id start with 1 increment by 1 maxvalue 30 cycle;

/create sequence <序列名> start with <起始值> increment by <自增值> maxvalue <最大值> cycle/

9.删除表记录

–删除表记录

–delete 清空表记录

delete from stuInfo;

/delete from <表名>/

–truncate 摧毁原表后重新创建新表

truncate table stuInfo;

/truncate table <表名>/

10.函数

单行和多行函数(聚合函数)

11.数值函数

–数值函数 跟数学运算有关

–例:算出每个员工的日平均工资

–floot( ) 向下取整

select ename,floor(sal/30) from emp;

/select floor(<包含字段名运算函数>) from <表名>/

–trunc( , )保留两位小数

select ename,trunc(sal/30,2) from emp;

/select trunc(<包含字段名运算函数>,<保留小数位>) from <表名>/

–ceil( ) 向上取整

select ename,ceil(sal/30) from emp;

/select ceil(<包含字段名运算函数>) from <表名>/

–round( ) 四舍五入

select ename,round(sal/30) from emp;

/select round(<包含字段名运算函数>) from <表名>/

12.字符函数

–字符函数

–lower( )转小写字母

select lower(ename) from emp;

/select lower(<字段名> from <表名>)/

–upper( )转大写字母

select upper(ename) from emp;

/select upper(<字段名> from <表名>)/

–length( )获取字符串的长度

select length(‘hello’) from dual;

/select length(<字段名> from <表名>/

–例:输出字符长度为5个字符的员工姓名

select ename from emp where length(ename)=5;

–substr( , , )截取字符串 –substr()函数 0和1都是首个字符

select substr(‘hello’,1,2) from dual;

/select substr(<字段名>,<起始位置>,<截取个数>) from <表名>/

13.拼接符

–||拼接符,相当于Java中+

–例:两个字段拼接

select ename||’_’||job from emp;

–例:员工姓名首字母大写,其余小写

select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp;

–instr(字符串,要查找的字符,开始位置,第几次出现) 返回的是字符索引位置

–例:查询学生来自哪个省份

select substr(stuaddr,1,instr(stuaddr,’省’,1,1)) as 省份 from stuInfo;

14.转换函数

–转换函数

–varchar2类型转换为Date类型

–转换日期有两种格式: yyyy/mm/dd  yyyy-mm-dd

update emp set hiredate = to_date(‘2000-10-1’,’yyyy-mm-dd’) where empno = 8888;

/update <表名> set <字段名> = to_date(‘<字符串日期>’,’<转换日期格式>’) where <主键 = 值>/

–Date类型转换成varchar2类型

select ename,to_char(hiredate,‘yyyy@mm@dd’) from emp;

–获取当前服务器时间

select sysdate from dual;

CATALOG