前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL系列总结(三):DML(数据操纵语言)

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

作者头像
知识分子没文化
发布2023-07-01 15:52:16
2730
发布2023-07-01 15:52:16
举报
文章被收录于专栏:Roookie博客Roookie博客

环境说明: 数据库:Mysql 5.5 连接软件:Navicat

前言

SQL总结系列目录:

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

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

准备数据

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

{tabs-pane label="学生表"}

Student(Sno,Sname,Ssex,Sage,Sdept)

代码语言:javascript
复制
-- 创建表:
CREATE TABLE Student(Sno CHAR(6) Primary KEY,   -- 学号 主键
                     Sname VARCHAR(20),         -- 名字
                     Ssex CHAR(2),              -- 性别
                     Sage INT,                  -- 年龄 
                     Sdept VARCHAR(20)          -- 系部
                    )ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入数据:
INSERT INTO Student VALUES('202101','李勇','男',20,'计算机系');
INSERT INTO Student VALUES('202102','刘晨','女',19,'计算机系');
INSERT INTO Student VALUES('202103','王敏','女',18,'数学系');
INSERT INTO Student VALUES('202104','张立','男',18,'信息系');

{/tabs-pane}

{tabs-pane label="课程表"}

Course(Cno,Cname,Cpno,Ccredit)

代码语言:javascript
复制
-- 创建表:
CREATE TABLE Course(Cno CHAR(1) PRIMARY KEY,    -- 课程号 主键
                    Cname VARCHAR(20),          -- 课程名
                    Cpno CHAR(1),               -- 前置学科课程号  
                    Ccredit INT                 -- 学分
                   )ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入数据:
INSERT INTO Course VALUES('1','数据库','5',4);
INSERT INTO Course VALUES('2','数学','null',2);
INSERT INTO Course VALUES('3','信息系统','1',4);
INSERT INTO Course VALUES('4','操作系统','6',3);
INSERT INTO Course VALUES('5','数据结构','7',4);
INSERT INTO Course VALUES('6','数据处理','',2);
INSERT INTO Course VALUES('7','C语言','6',4);

{/tabs-pane}

{tabs-pane label="学生选课表"}

SC(Sno,Cno,Grade)

代码语言:javascript
复制
-- 创建表:
CREATE TABLE SC(Sno CHAR(6),                    -- 学号 主键
                Cno CHAR(1),                    -- 课程号 主键
                Grade INT,                      -- 成绩
                PRIMARY key(Sno,Cno)            -- 设置表级约束条件
               )ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入数据:
INSERT INTO SC VALUES('202101','1',92);
INSERT INTO SC VALUES('202101','2',85);
INSERT INTO SC VALUES('202101','3',88);
INSERT INTO SC VALUES('202102','2',90);
INSERT INTO SC VALUES('202102','3',80);

{/tabs-pane}

0x01.插入数据

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

1.插入元组

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

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

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

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

代码语言:javascript
复制
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语句中用以生成要插入的批量数据。其语句格式为:

代码语言:javascript
复制
INSERT INTO <表名> (<属性列1>,<属性列2> ···) [子查询语句];

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

0x02.修改数据

1.普通修改

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

代码语言:javascript
复制
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.普通删除

删除语句的一般格式为:

代码语言:javascript
复制
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版)》 王珊 萨师煊 编著

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 准备数据
    • 0x01.插入数据
      • 1.插入元组
        • 2.插入子查询结果
        • 0x02.修改数据
          • 1.普通修改
            • 2.带有子查询的修改语句
            • 0x03.删除数据
              • 1.普通删除
                • 2.带有子查询的删除语句
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档