源码-Oracle数据库管理-第十章-数据表操作-Part 4(删除数据)
2016-10-19 20:50
706 查看
注意事项:
1. 删除操作需谨慎
2. Merge语句可实现按条件添加、修改和删除的操作,类似于PL/SQL子程序。
--10.3 删除数据
--10.3.1 使用Delete语句
--DELETE语句使用示例,删除一行记录
DELETE FROM books WHERE book_name='零基础看懂财务报表';
select * from books;
--删除所有的记录
DELETE FROM books;
--查询约束表中的级联信息
SELECT constraint_name as "约束名称", delete_rule as "级联特性"
FROM user_constraints
WHERE table_name = 'BOOKS'
AND constraint_type='R';
--查询emp表中的信息
SELECT constraint_name as "约束名称", delete_rule as "级联特性"
FROM user_constraints
WHERE table_name = 'EMP'
AND constraint_type='R';
--由于没有指定级联删除,因此会出现错误提示
DELETE FROM dept WHERE deptno=20;
--先删除从表的记录
DELETE FROM emp WHERE deptno=20;
--再删除主表的记录
DELETE FROM dept WHERE deptno=20;
--使用子查询删除记录
--使用相关子查询删除员工记录:
DELETE FROM emp a
WHERE EXISTS (SELECT 1
FROM salgrade b
WHERE a.sal BETWEEN b.losal AND b.hisal
AND b.grade = 3);
--使用非相关子查询删除员工记录
DELETE FROM emp
WHERE deptno IN (SELECT deptno
FROM dept
WHERE loc = '芝加哥'
OR loc = '波士顿');
--使用内联视图进行删除操作
DELETE FROM (SELECT x.sal sal,
y.sal sal_history,
x.comm comm,
y.comm comm_history
FROM emp x, emp_history y
WHERE x.empno = y.empno
AND y.deptno = 20) emplist;
--使用Truncate清空表数据
--使用TRUNCATE语句
TRUNCATE TABLE emp_history;
--10.3.4 使用Merge合并数据表
--MERGE语句的语法
MERGE [ hint ]
INTO [ schema. ] { table | view } [ t_alias ] --要合并的目标表
USING { [ schema. ] { table | view } --要合并的来源表或者是一个子查询
| subquery
} [ t_alias ]
ON ( condition ) --指定要比较的条件
WHEN MATCHED THEN --如果条件匹配,可以进行更新或删除的操作
UPDATE SET column = { expr | DEFAULT }
[, column = { expr | DEFAULT } ]...
WHERE condition
[ DELETE where_clause ]
WHEN NOT MATCHED THEN --如果条件不匹配,可以进行删除的操作
INSERT [ (column [, column ]...) ]
VALUES ({ expr | DEFAULT }
[, { expr | DEFAULT } ]...
)
WHERE condition
LOG ERRORS --如果出现了错误,则可以记录错误日志
[ INTO [schema.] table ]
[ (simple_expression) ]
[ REJECT LIMIT { integer | UNLIMITED } ]
--向bonus表中插入1981年入职的员工数据
INSERT INTO bonus
SELECT ename, job, sal, comm FROM emp
WHERE EXTRACT(YEAR FROM hiredate) = 1981
select * from bonus;
--下面的代码使用MERGE合并emp表和bonus表
MERGE INTO bonus D
USING (SELECT ename,job, sal, comm, deptno FROM emp WHERE deptno = 20) S
ON (D.ename = S.ename)
WHEN MATCHED THEN
UPDATE
SET D.comm = D.comm * 1.15, D.sal = D.sal * 1.12
DELETE WHERE (S.sal > 3000)
WHEN NOT MATCHED THEN
INSERT
(D.ename, D.job, D.sal, D.comm)
VALUES
(S.ename, S.job, S.sal * 1.12, S.comm * 1.15) WHERE
(S.sal <= 3000);
1. 删除操作需谨慎
2. Merge语句可实现按条件添加、修改和删除的操作,类似于PL/SQL子程序。
--10.3 删除数据
--10.3.1 使用Delete语句
--DELETE语句使用示例,删除一行记录
DELETE FROM books WHERE book_name='零基础看懂财务报表';
select * from books;
--删除所有的记录
DELETE FROM books;
--查询约束表中的级联信息
SELECT constraint_name as "约束名称", delete_rule as "级联特性"
FROM user_constraints
WHERE table_name = 'BOOKS'
AND constraint_type='R';
--查询emp表中的信息
SELECT constraint_name as "约束名称", delete_rule as "级联特性"
FROM user_constraints
WHERE table_name = 'EMP'
AND constraint_type='R';
--由于没有指定级联删除,因此会出现错误提示
DELETE FROM dept WHERE deptno=20;
--先删除从表的记录
DELETE FROM emp WHERE deptno=20;
--再删除主表的记录
DELETE FROM dept WHERE deptno=20;
--使用子查询删除记录
--使用相关子查询删除员工记录:
DELETE FROM emp a
WHERE EXISTS (SELECT 1
FROM salgrade b
WHERE a.sal BETWEEN b.losal AND b.hisal
AND b.grade = 3);
--使用非相关子查询删除员工记录
DELETE FROM emp
WHERE deptno IN (SELECT deptno
FROM dept
WHERE loc = '芝加哥'
OR loc = '波士顿');
--使用内联视图进行删除操作
DELETE FROM (SELECT x.sal sal,
y.sal sal_history,
x.comm comm,
y.comm comm_history
FROM emp x, emp_history y
WHERE x.empno = y.empno
AND y.deptno = 20) emplist;
--使用Truncate清空表数据
--使用TRUNCATE语句
TRUNCATE TABLE emp_history;
--10.3.4 使用Merge合并数据表
--MERGE语句的语法
MERGE [ hint ]
INTO [ schema. ] { table | view } [ t_alias ] --要合并的目标表
USING { [ schema. ] { table | view } --要合并的来源表或者是一个子查询
| subquery
} [ t_alias ]
ON ( condition ) --指定要比较的条件
WHEN MATCHED THEN --如果条件匹配,可以进行更新或删除的操作
UPDATE SET column = { expr | DEFAULT }
[, column = { expr | DEFAULT } ]...
WHERE condition
[ DELETE where_clause ]
WHEN NOT MATCHED THEN --如果条件不匹配,可以进行删除的操作
INSERT [ (column [, column ]...) ]
VALUES ({ expr | DEFAULT }
[, { expr | DEFAULT } ]...
)
WHERE condition
LOG ERRORS --如果出现了错误,则可以记录错误日志
[ INTO [schema.] table ]
[ (simple_expression) ]
[ REJECT LIMIT { integer | UNLIMITED } ]
--向bonus表中插入1981年入职的员工数据
INSERT INTO bonus
SELECT ename, job, sal, comm FROM emp
WHERE EXTRACT(YEAR FROM hiredate) = 1981
select * from bonus;
--下面的代码使用MERGE合并emp表和bonus表
MERGE INTO bonus D
USING (SELECT ename,job, sal, comm, deptno FROM emp WHERE deptno = 20) S
ON (D.ename = S.ename)
WHEN MATCHED THEN
UPDATE
SET D.comm = D.comm * 1.15, D.sal = D.sal * 1.12
DELETE WHERE (S.sal > 3000)
WHEN NOT MATCHED THEN
INSERT
(D.ename, D.job, D.sal, D.comm)
VALUES
(S.ename, S.job, S.sal * 1.12, S.comm * 1.15) WHERE
(S.sal <= 3000);
相关文章推荐
- 源码-Oracle数据库管理-第十章-数据表操作-Part 1(插入数据)
- 源码-Oracle数据库管理-第十章-数据表操作-Part 2(插入数据)
- 源码-Oracle数据库管理-第十章-数据表操作-Part 3(更新数据)
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 1(PL/SQL基础)
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 2(字符型函数)
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 2(PL/SQL语言概览)
- 源码-Oracle数据库管理-第九章-SQL查询-Part 5(分组查询)
- 源码-Oracle数据库管理-第六章-索引和约束-约束部分-Part 3
- Oracle通过JOB定时自动操作数据库删除数据
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 4(类型转换函数)
- 源码-Oracle数据库管理-第六章-索引和约束-约束部分-Part 2
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 3(数字型函数和日期时间函数)
- 源码-Oracle数据库管理-第六章-索引和约束-约束部分-Part 1
- 4.oracle表的管理(数据类型,表创建删除,数据CRUD操作)
- oracle表的管理(数据类型,表创建删除,数据CRUD 操作)
- 源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 1(字符型函数)
- 源码-Oracle数据库管理-第九章-SQL查询-Part 2(基本查询)
- 源码-Oracle数据库管理-第九章-SQL查询-Part 1(基本查询)
- 源码-Oracle数据库管理-第九章-SQL查询-Part 4(集合运算和子查询)
- oracle 表的管理(数据类型,表创建删除,数据CRUD 操作)