【Oracle】第七单元 DML语句

本文介绍了数据库操作相关语句。包括create语句创建表的两种方式,INSERT语句插入数据的五种方式,UPDATE语句更新数据的两种方式,DELETE语句删除记录的两种情况,drop语句删除表,以及MERGE语句进行比较整合。同时还提及了各操作的注意事项。

create语句
创建表
create table job_grades (
gra varchar2(3),
lowest_sal number,
highest_sal number)
方式一: 复制表结构及其数据
 create table employees_new as select * from employees
方式二:只复制表结构
create table employees_new as select * from employees where 1=2

或者

create table employees_new like employees
INSERT 语句
方式一:写出表名+列名
INSERT INTO departments
  (department_id, department_name)
VALUES
  (30, 'Purchasing');

注意:在“列”中,对于不允许为NULL的列,必须写出来;对于允许为NULL的列,可以不写出来
在Value中,对于列中未写出来的列,默认赋予NULL值

方式二:仅写出表名
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);

注意:在Value中必须对应写出每个列的值,即是是允许NULL的字段,也必须显式的给出 NULL

方式三:从另一个表中 Copy 一行

语法:INSERT INTO table [ column (, column) ] subquery;
注意:在这种方式下,不要使用VALUES 关键字

INSERT INTO sales_reps
  (id, NAME, salary, commission_pct)
  SELECT employee_id, last_name, salary, commission_pct
    FROM employees
   WHERE job_id LIKE '%REP%';
方式四:使用子查询作为插入目标
INSERT INTO
  (SELECT employee_id,
          last_name,
          email,
          hire_date,
          job_id,
          salary,
          department_id
     FROM employees
    WHERE department_id = 50)
VALUES
  (99999,
   'Taylor',
   'DTAYLOR',
   to_date('1999-07-07', 'YYYY-MM-DD'),
   'ST_CLERK',
   5000,
   50);
方式五:只复制表数据

如果两个表结构一样:

insert into employees_new
  select * from employees

如果两个表结构不一样:

insert into employees_new
  (employee_id, last_name, salary)
  select employee_id, last_name, salary from employees
UPDATE 语句
方式一:更新符合条件的行中某些列为具体的值
SELECT * FROM employees;
UPDATE employees SET department_id = 90 WHERE employee_id = 100;
方式二:使用子查询的结果作为更新后的值
UPDATE employees
   SET job_id =
       (SELECT job_id FROM employees WHERE employee_id = 205),
       salary =
       (SELECT salary FROM employees WHERE employee_id = 205)
 WHERE employee_id = 114;

注意:当存在约束的时候,某些更新可能会失败,如:存在外键关系,不存在本表中

DELETE 语句
举例一:删除某些符合条件的记录
DELETE FROM departments
WHERE department_name = 'Finance';
举例二:删除一张表中的所有记录
SELECT * FROM departments

如果遇到这种需求,也可以使用TRUNCATE 语句,TRUNCATE TABLE copy_emp ,
但要注意,TRUNCATE 语句无法回滚,因此除非是单独执行,并非常确认,否则慎用。

TRUNCATE TABLE departments;

注意:当存在约束的时候,某些删除可能会失败,如:存在外键关系,不存在本表中

drop 语句:删除表
drop table table_a
MERGE 语句: 比较整合语句
MERGE INTO copy_emp c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
  UPDATE
     SET c.first_name     = e.first_name,
         c.last_name      = e.last_name,
         c.email          = e.email,
         c.phone_number   = e.phone_number,
         c.hire_date      = e.hire_date,
         c.job_id         = e.job_id,
         c.salary         = e.salary,
         c.commission_pct = e.commission_pct,
         c.manager_id     = e.manager_id,
         c.department_id  = e.department_id
WHEN NOT MATCHED THEN
  INSERT
  VALUES
    (e.employee_id,
     e.first_name,
     e.last_name,
     e.email,
     e.phone_number,
     e.hire_date,
     e.job_id,
     e.salary,
     e.commission_pct,
     e.manager_id,
     e.department_id);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值