10.DML数据操作

1. DML概述

DML:全称Data Manipulation Language,数据操作语言,用来实现对表中数据的插入、修改、删除。包含3个关键字:INSERT、UPDATE、DELETE。

2. 插入数据

2.1 插入单行数据

插入单行数据的通用语法:

INSERT INTO 表名 ( 列名1 ,列名2, ......列名n )

VALUES (值1, 值2, ... 值n);

说明:

1、值与列必须位置对应,个数相同,类型相同

2、值的数据大小必须在列的长度范围内

3、除了数值类型外,其它数据类型的值必须使用单引号

4、如果要插入空值,可以不写列名,或者写NULL

2.1.1 给所有列赋值

包含两种写法:

写法1:所有的列名都写出来,语法如下:

INSERT INTO 表名 (列名1, 列名2, 列名3…)

VALUES (值1, 值2, 值3);

例:向部门表中插入一条数据,部门编号为50,部门名称为DEVELOPMENT,部门所在地为NEW YORK

对应SQL语句及执行结果如下:

INSERT INTO dept(deptno, dname,loc)
VALUES (50, 'DEVELOPMENT', 'NEW YORK');

方法2:省略列列表,语法如下:

INSERT INTO 表名 VALUES (值1, 值2, 值3…);

例:向部门表中插入一条数据,部门编号为60,部门名称为HUMAN RESOURCE,部门所在地为BOSTON

对应SQL语句及执行结果如下:

INSERT INTO dept 
VALUES (60, 'HUMAN RESOURCE', 'BOSTON');

2.1.2 给部分列赋值

要赋值的列名写出来,语法如下:

INSERT INTO 表名 (列名1, 列名2, 列名3…)

VALUES (值1, 值2, 值3);

例:向部门表中插入一条数据,部门编号为70,部门名称为MARKET,部门所在地为NULL

对应SQL语句及执行结果如下:

INSERT INTO dept(deptno,dname) 
VALUES (70, 'MARKET');

该案例也可以使用如下SQL:

INSERT INTO dept(deptno,dname,loc) 
VALUES (70, 'MARKET',NULL);
2.1.3 插入日期值

SYSDATE() :返回系统当前日期和时间,可直接使用或放在SELECT子句中使用,如:

SELECT SYSDATE();

例:向员工表中插入一条记录,员工编号为7196,姓名为GREEN,职位为SALESMAN,上级编号为7782,入职日期为系统当前日期,工资为2000,津贴为空,所在部门为10.

SQL语句及执行结果如下:

INSERT INTO    emp (empno, ename, job,mgr, hiredate, sal, comm,deptno)
VALUES    (7196, 'GREEN', 'SALESMAN', 7782, SYSDATE(), 2000, NULL, 10);

例:向员工表中插入一条记录,员工编号为2296,姓名为ABC,职位为SALESMAN,上级编号为7782,入职日期为1977年2月3日,工资为1300,津贴为空,所在部门为10.

SQL语句及执行结果如下:

INSERT INTO emp (empno, ename, job,mgr, hiredate, sal, comm,deptno) 
VALUES (2296, 'ABC', 'SALESMAN', 7782, '1997-02-03', 2000, NULL,10);

2.2 插入多行数据
2.2.1 插入多行数据语法

也可以一次性向表中插入多行数据,语法如下:

INSERT INTO 表名 (列名1, 列名2, 列名3…)

VALUES (值1, 值2, 值3),

(值1, 值2, 值3),

....

(值1, 值2, 值3);

注:值列表之间用逗号隔开

例:如下SQL语句可以一次性向员工表中插入多条数据

INSERT INTO EMP(EMPNO, ENAME, JOB, SAL) 
VALUES 	('8881', '张三', '部门经理', 6000),
        ('8882', '李四', '职员', 3000),
        ('8883', '王五', '职员', 3500),
        ('8884' ,'赵六', '部门经理', 6500),
        ('8885', '高七', '职员', 2500),
        ('8886', '马八', '职员', 3100),
        ('8887', '钱九', '部门经理', 5000),
        ('8888', '孙十',  '职员', 2800);
2.2.2 通过子查询插入多行数据

通过子查询可以一次性向表中插入多行数据,也叫蠕虫复制。作用就是将查询的结果集复制表中。语法如下:

INSERT INTO 表名 (列名1, 列名2, 列名3…) 查询语句;

说明:

1、不必书写values子句

2、列名列表中列的位置、列的数量、数据类型,必须和子查询中列的位置、数量和类型相匹配

例:使用如下SQL先创建经理表manager,然后再把EMP表中职位为MANAGER的记录复制过去。

第一步:创建manager表的SQL:

CREATE TABLE manager  
	SELECT * 
	FROM emp 
	WHERE 1=0;     -----此处1=0的条件始终为假,所以SELECT语句一条记录也查不出来,代表只复制表结构。

第二步:向manager表中插入职位为MANAGER的记录

INSERT INTO manager 
	SELECT * 
	FROM   emp 
	WHERE job = 'MANAGER';

上述语句执行成功后,可以看出manger表中已经有3条记录。

3. 修改数据

修改数据主要用来按照修改表中某些行的列数据。既可以修改所有行,也可以修改满足条件的行。

3.1 修改所有行

语法:

UPDATE 表名

SET 列名1 = 值1,列名2 = 值2,....列名n = 值n;

说明:

SET子句用来限定修改哪些列,一次可以修改一个列,也可以同时修改多个列,每个列之间用逗号分割

例:把所有员工的部门编号修改为20,工资上浮100

UPDATE emp 
SET deptno = 20,sal = sal + 100;

3.2 修改部分行

语法:

UPDATE 表名

SET 列名1 = 值1,列名2 = 值2,....列名n = 值n

WHERE 条件表达式;

说明:

WHERE子句用来过滤修改哪些行。

例:把员工编号为7782的部门编号修改为20

UPDATE  emp 
SET  deptno = 20 
WHERE   empno = 7782;

4. 删除数据

删除数据主要用来删除表中的行。既可以删除部分行,也可以删除所有行。

4.1 删除所有行

语法:

DELETE FROM 表名;

例:删除emp_back表中所有行

DELETE FROM emp_back;
4.2 删除部分行

语法:

DELETE FROM 表名

WHERE 条件表达式;

例:删除职位是CLERK的员工记录

DELETE FROM emp
WHERE job = 'CLERK';

5. 单元小结

本单元主要讲解了3个DML语句,重点讲解:

  1. 插入数据的方法:一次插入一行,插入空值、插入日期值、插入多行;
  2. 修改表中数据:修改指定行,修改所有列、修改多列;
  3. 删除表中数据:删除指定行、删除所有行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值