您的位置:首页 > 数据库 > Oracle

源码-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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐