数据库系统概论学习笔记(五):SQL的简单应用之数据更新

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/credolhcw/article/details/56672622

非常简单,只有三种 —— 插入、更新、删除


插入数据

官方文档:https://dev.mysql.com/doc/refman/5.7/en/insert.html


插入元组

SQL语句格式:

INSERT
INTO <表名> [ ( <列名1>, <列名2>, … ) ]
VALUES ( <常量1>, <常量2>, … );

例1、将一个新学生元组(学号:‘200215128’,姓名:‘陈冬’,性别:‘男’,所在系:‘IS’,年龄:‘18岁’)插入到学生表里。

INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('200215128','陈冬','男','IS',18);

Insert Example 01

也可以省略Student后面的“(…)”的部分,但是VALUES后面的值就要严格的按照CREATE TABLE时的次序了。所以上例还可以写成。

INSERT
INTO Student
VALUES('200215128','陈冬','男',18,'IS');

Student表结构如下:
Structure of Table Student

 
还可以插入元组的一部分,前提是插入元组的未赋值的属性可以为空,见例2。

例2、插入一条选课记录(’200215128’,’1’)。

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

Insert Example 02


插入子查询的结果

SQL语句格式:

扫描二维码关注公众号,回复: 3783601 查看本文章

INSERT
INTO <表名> [ ( <列名1>, <列名2>, … ) ]
子查询;

例3、对每一个系,求学生的平均年龄,并把结果存入数据库。

首先,建立一个新表存放系名(Sdept)和平均年龄(Avg_age),保证数据结构与Student表中对应属性相同。

CREATE TABLE Dept_Avg_Age (
    Sdept CHAR(20) PRIMARY KEY,
    Avg_age SMALLINT
);

然后,对Student表中元组按系名分组,求平均年龄,并存入表Dept_Avg_Age。

INSERT
INTO Dept_Avg_Age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

Insert Example 03


更新数据

官方文档:https://dev.mysql.com/doc/refman/5.7/en/update.html

SQL语句格式:

UPDATE <表名>
SET <列名> = <表达式> [ ,<列名> = <表达式> ,<列名> = <表达式> ,…]
[ WHERE <条件> ];


更新某一个元组的值

例4、将学生200215121的年龄改为22岁。

UPDATE Student
SET Sage = 22
WHERE Sno = '200215121';

Update Example 04


更新多个元组的值

例5、将所有学生年龄增加1岁。

UPDATE Student
SET Sage = Sage + 1;

Update Example 05


带子查询的的更新语句

例6、将计算机科学系所有学生的成绩置0。

/* 以类似相关子查询的思路理解这条语句 */
UPDATE SC
SET Grade = 0
WHERE 'CS' = (
    SELECT Sdept
    FROM Student
    WHERE Student.Sno = SC.Sno);

Update Example 06


删除数据

官方文档:https://dev.mysql.com/doc/refman/5.7/en/delete.html

SQL语句格式:

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


删除某一个元组的值

例7、删除学号为200215128的学生记录。

DELETE
FROM Student
WHERE Sno = '200215128';

Delete Foreign Key Error

删除的时候出现图示错误,意思是在表SC中存在某元组,其Foreign Key参考了Student中预删除的这个元组,故必须先将SC中的子记录删除。

DELETE
FROM SC
WHERE Sno = '200215128';

Delete Example 07


删除多个元组的值

例8、删除所有学院的学生平均年龄记录。

DELETE
FROM Dept_Avg_Age;

Delete Example 08


带子查询的删除语句

例9、删除计算机科学系所有学生记录。

DELETE
FROM SC
WHERE 'CS' = (
    SELECT Sdept
    FROM Student
    WHERE Student.Sno = SC.Sno );

Delete Example 09
 

总之,数据更新不难,难的是实际工作中的“一不小心”。

猜你喜欢

转载自blog.csdn.net/credolhcw/article/details/56672622
今日推荐