SQL Cookbook—插入、更新與刪除

Ruthless發表於2013-06-24

涉及到的問題
–1、從一個表向另外的表中複製行
–2、複製表定義(包含表記錄)
–3、一次向多個表中插入記錄
–4、
–5、當相應行存在時更新
–6、用其他表中的值更新
–7、刪除違反參照完整性的記錄

                                                   
–1、從一個表向另外的表中複製行
insert into dept_test (deptno, dname, loc) select deptno, dname, loc from dept where deptno=10

–2、複製表定義(包含表記錄)
create table dept_test as select deptno, dname, loc from dept where deptno=10

–3、一次向多個表中插入記錄
問題描述
有時需要將一個表中的資料按照一定的條件分別一次性插入到多個表中,怎樣實現?
insert all
when loc in (upper('new york', upper('boston'))) then
   into dept_test_1 (deptno, dname, loc) values (deptno, dname, loc)
when loc=upper('chicago') then
   into dept_test_2 (deptno, dname, loc) values (deptno, dname, loc)
else
   into dept_test_3 (deptno, dname, loc) values (deptno, dname, loc)
select deptno, dname, loc from dept

–4、
insert into (select empno, ename, job from emp) values (1, 'zhangsan', 'java')

–5、當相應行存在時更新
方法一
UPDATE emp
SET sal=sal*1.20
WHERE empno in (SELECT empno FROM emp_bonus)
方法二
UPDATE emp
SET sal=sal*1.20
WHERE exists (SELECT null FROM emp_bonus where emp.empno=emp_bonus.empno)

–6、用其他表中的值更新
UPDATE emp e
SET (e.sla, e.comm)=(SELECT ns.sal, ns.sal/2
                                 FROM new_sal ns
                                 WHERE ns.deptno=e.deptno)
WHERE EXISTS( SELECT NULL
              FROM  new_sal ns
              WHERE ns.deptno=e.deptno)

–7、刪除違反參照完整性的記錄
例如,某些員工被分配到了一個不存在的部門中,要將這些員工刪除。
方法一(推薦)
delete from emp where not exists (select * from dept where dept.deptno=emp.deptno)
方法二
delete from emp where emp.deptno not in (select deptno from dept where dept.deptno is not null)

相關文章