二. DML 数据操纵语言
1.1常见的数据类型
1.1数值类型:只有数字没有其他内容,可以用来计算
number(p,[s]): 该类型的字段中存储数值型数据,p代表总长度,s代表 小数位的的长度,括号内不写的话会默认长度为38位;
int: 存储的是整数。
1.12 字符类型:用来存放字符型数据,字符包括:字母 符号 汉字 以及组合
char(n) : 固定长度字符串,该类型的字段中存储固定长度的字符型数据 , n 表示字段精度,存入字段的数据长度不能超过n, 若长度不足n则右侧以空格补齐达到n位长度;
varchar2(n): 可变长度字符串,该类型的字段中存储可变长度的字符型数据 n 表示字段精度,存入字段的数据长度不能超过n, 若长度不足n,则以实际长度存储;
日期类型: 存放一个时间点,包括年月日时分秒等;
date : 最常见的日期类型,固定存储7个字节,包括 世纪 年月日 时分秒, 但是不一定都会显示;
timestamp : 不常见的日期类型,存储7 到11 个字节 比date多了毫秒部分。
1.2DML 数据操纵语言
定义:针对的是数据进行操作,经过DML语句的操作,能够对数据源中的数据进行调整,包括增、删、改。
1.21 INSERT —增加数据,插入数据
语法:
insert into 表名(列名1,列名2…) values(值1,值2…) ;
例1:
insert into emp (empno,ename) values(1235 , ' 小黄 ') ;
例2:
insert into emp
values(1236,'王','PRESIDENT',' ',to_ date('2022/2/25 ','yyyy/mm/dd',100,100,40);
注意 : 两个单引号可显示为空值,或者NULL 也可以。
快捷插入
语法 : insert into 表名(列名1,列名2…) sql 语句 。
例如: 将emp表中的员工编号,名字的数据插入到sno,sname中
insert into student(sno,sname) select empno,ename from emp;
1.22 DELETE —删除数据
语法:delect from 表名 where 条件;
定义: 不加where 条件是删除整张表数据,加where 条件是删除查询出来的数据。
例:
delete from emp ; ----删除整张表数据
例:
delect from emp where deptno = 10 ; ---删除部门编号等于10 的数据
1.23 UPDATE —更新,修改数据
语法: update 表名 set 列名1= 新值 1,列名2 = 新值2 … where 条件 ;
注意事项:
1.更新时等号左边是要更新的列名,右边是更新的内容。
2.更新后的结果可以是一个固定的值,也可以是函数处理后的结果,或是运算,还可以是单行单列的子查询,如例3 例 4.
例 1 :
update emp set sal=2000; ------不加where时 则修改该列所有值
例 2 :
update emp set sal=2000
where ename='SCOTT'; -----只修改SCOTT的工资
例 3 :
update emp set sal=2000,comm=comm+100
where ename ='SCOTT';
例 4 :
update emp set sal=(select sal from emp where ename='KING'),comm=comm+ 100
where ename ='SCOTT';
1.3 手动对数据源进行增、删、改。
语法:
select *
from 表名 for update ;
输入语法后如图:
输入语法后需要先解锁表,然后进行修改,修改完成后点击上锁,然后确定提交才能生效,否则只在当前语句生效,取消提交会直接取消从语法开始的所有操作。
优点:1. 操作简单。2. 可以同时进行增、删、改。
缺点: 1. 所有的操作都不能留下痕迹,不方便后续回顾。2. 同时对大量的数据进行操作时会有崩溃的危险。3. 必须依赖特定的数据库操作工具。
适用场景: 范围小 , 数据少 , 临时的 。
1.4 DML 语句下的 merge into
优点:
1.可以同时满足 增 、删 、 改 ;
2.可以依据目标表原有数据的情况做出改动。
缺点:
1. 要求合并的需求比较高,导致运行的负担增加;
2. 不能单独满足删除的要求。
语法: merge into 表名1 a(别名) ---目标表
using 表名2 b(别名) ---数据源
on (关联条件) ---适用输入不同数据的列或者主键列 (一定要带括号)
when matched then
update ---对目标表进行更新
set 列名1 = 新值 1 , 列名2 = 新值2 .........
where 条件 ---更新(修改)是在能匹配上的情况下
................................
................................
delete where 条件 ---需要满足以上所有条件才可以
when not matched then ---当匹配不上的情况时
insert(a . 列名1 , a . 列名2 ........) ---需要插入什么
values(b . 列名1 , b. 列名2 ........);
例如:
merge into emp1 a
using emp b
on (a.empno = b.empno)
when matched then
update
set sal = 2000
where job = 'SALESMAN'
delete
where ename = ' JAMES ' (因为不满足上面的工资等于2000的条件,所以' JAMES ' 不会被删除)
when not matched then
insert (a.empno , a. ename )
values(b.empno , b. ename );