SQL系列总结(三):DML(数据操纵语言)

SQL系列总结(三):DML(数据操纵语言)

知识分子没文化
2021-08-03 / 0 评论 / 1,282 阅读 / 1,484 字数 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年10月15日,已超过915天没有更新,如存在内容错误、图片加载失败、链接失效等问题,请留言反馈,博主将在第一时间进行修改。

前排提示:

本篇博客篇幅较长,建议结合目录进行阅读!

目录:

环境说明:

数据库:Mysql 5.5

连接软件:Navicat

前言

SQL总结系列目录:

数据操纵语言(Data Manipulation Language, DML)是对于数据库中的数据的基本操作。具体操作这三种,对应的关键词是:——INSERT——DELETE——UPDATE

在使用数据库的系统开发过程中,对于数据库的基本操作就是“”,以“CRUD”(分别为 Create, Read, Update, Delete)来称呼。

准备数据

本篇博客中出现的SQL语句实例基于下面的三张数据表:

0x01.插入数据

SQL数据插入语句有两种形式,一种是插入一个元组(即一行数据),另一种是插入子查询结果,子查询结果可以是多个元组(多行数据)。

1.插入元组

为表中所有字段都添加数据:

INSERT INTO <表名> VALUES(<数据1>,<数据2> ···);
  • INTO子句中并没有指明任何属性,表示给所有字段添加值,因此新插入的元组必须在每个属性列上都具有值。
  • VALUE子句对新元组的各属性列赋值,括号中属性列的次序与CREATE TABLE中的属性次序一一对应。

例:将一个新学生的全部数据插入到Student表中。(学号:202105,姓名:陈东,性别:男,所在系:信息系,年龄:18)

INSERT INTO Student VALUES("202105","陈东","男",18,"信息系");

当在INTO子句中指明部分属性列名时,表示仅对这几项属性进行赋值:

INSERT INTO <表名> (<属性列1>,<属性列2> ···) VALUES(<数据1>,<数据2> ···);
  • INTO子句指出了要在哪些属性上赋值,没有出现的属性类将默认取空值。其中,表定义时说明了NOT NULL的属性列不能取空值,否则会报错
  • VAlUE子句中属性的顺序可以与CREATE TABLE中的顺序不一样,但必须与INTO子句中的属性字段一一对应

例:向选课表中插入一条选课记录 (学号:202103,课程号:1)

INSERT INTO SC (Sno,Cno) VALUES('202103','1');

2.插入子查询结果

子查询不仅可以嵌套在SELECT语句中来构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据。其语句格式为:

INSERT INTO <表名> (<属性列1>,<属性列2> ···) [子查询语句];

-- 可以理解为在原来查询语句的基础上将VALUE子句变为了子查询语句

0x02.修改数据

1.普通修改

修改操作也称为更新操作,其语句的一般格式为:

UPDATE <表名> SET <列名>=<表达式>,<列名>=<表达式>··· [WHERE <条件>];
  • 其功能是修改指定表中满足WHERE子句条件的元组
  • SET子句后的等式表示给要修改的属性赋予新值,用于取代原来的属性列值

例:将学生李勇的年龄改为22

UPDATE Student SET Sage='22' WHERE Sname='李勇'; 

如果省略WHERE子句,则修改的对象为表中的所有元组

例:将所有的学生的年龄增加一岁

UPDATE Student SET Sage=Sage+1 

2.带有子查询的修改语句

子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。

例:将计算机系全体学生的成绩置零

UPDATE SC SET Grade=0 WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept="计算机系");

0x03.删除数据

1.普通删除

删除语句的一般格式为:

DELETE FROM <表名> WHERE <条件>;

DELETE语句执行完之后会返回删除的行数以及WHERE条件匹配的行数。

例:删除学号为202103的学生记录

DELETE FROM Student WHERE Sno='202103';

删除学号为202101,202102,202103的学生记录

DELETE FROM Student WHERE Sno IN ('202101','202102','202103');

WHERE子句可以省略,此时为清空全表数据。请注意是数据的删除,表的结构依然存在。如:

例:删除所有学生的选课记录

DELETE FROM SC;-- 执行结果就是表SC变成了一个空表

2.带有子查询的删除语句

同修改语句,子查询也可以嵌套在DELETE语句中,用来构造执行删除操作的条件。

例:删除系所有学生的选课记录

DELETE FROM SC WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept='信息系');

主要参考资料:《数据库系统概论(第5版)》 王珊 萨师煊 编著

1

评论 (0)

取消