MYSQL学习路线(3)

数据更新:

数据更新操作三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。

1、插入数据

SQL的数据插入语句INSERT通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组。

插入元组:

INSERT
INTO <表名>[(<属性1>[,<属性2>]...)]
VALUES(<常量1>[,<常量2>]...);

如果INTO子句中没有指明任何属性列名,则插入的元组必须在每个属性列上均有值。VALUES子句对新元组的各属性赋值,字符串常数要用单引号(英文符号)括起来。

/*将一个新学生元组(学号:201915128,姓名:陈东,性别:男,所在系:IS,年龄:18岁)插入到Student表中*/
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201915128','陈东','男','IS',18);

问题:将学生薛仁贵的信息插入到Student表中。

INSERT
INTO Student
VALUES('201903040','薛仁贵','男',18,'CS');

在INTO子句中只指定了表名,没有指出属性名。这表示新元组要在表的所有属性列上都指定值,属性列的次序与CREATE TABLE中的次序相同。

问题:插入一条选课记录

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

关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。

插入子查询结果:

格式:

INSERT
INTO<表名>[(<属性列1>[,<属性列2>]...)]
子查询

问题:对每一个系,求学生的平均年龄,并把结果存入数据库

/*首先在数据库中建立一个新表,其中一列存放系名,另一列存放学生平均年龄*/
CREATE TABLE Dept_age
        (Sdept CHAR(15)
         Avg_age SMALLINT);

/*然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中*/
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

2、修改数据

  格式:

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

其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句给出<表达式>的值用于取代相应的属性列值。如果省略WHERE子句 ,则表示要修改表中的所有元组。

/*修改某一个元组的值*/
/*将学生201215121的年龄改为22岁*/
UPDATE Student
SET Sage=22
WHERE Sno='201215121';

/*修改多个元组的值*/
/*将所有的学生的年龄增加上1岁*/
UPDATE Student
SET Sage=Sage+1;

/*带子查询的修改语句*/
/*将计算机科学系全体学生的成绩置零*/
UPDATE SC
SET Grade=0
WHERE Sno IN
    (SELECT Sno
     FROM Student
     WHERE Sdept='CS');

3、删除数据

格式:

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

DELETE语句的功能是从指定表中删除满足WHERE字句条件的所有元组。如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。

/*删除学号为201903832的学生记录*/
DELETE
FROM Student
WHERE Sno='201903832';

/*删除所有学生的选课记录*/
DELETE
FROM SC;

/*删除计算机科学系所有学生的选课信息*/
DELETE
FROM SC
WHERE Sno IN
    (SELETE Sno
     FROM Student
     WHERE Sdept='CS');

空值处理

所谓空值就是“不知道”或“不存在”或“无意义”的值。SQL语言中允许某些元组的某些属性在一定情况下取空值。一般有以下几种情况:

  1. 该属性应该有一个值,但目前不知道它的具体值。
  2. 该属性不应该有值。
  3. 由于某种原因不便于填写。如用户电话。

控制的判断

判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示。

/*从Student表中找出漏填了数据的学生信息*/
SELECT *
FROM Student
WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;

空值的约束条件

  1. 属性定义中有NOT NULL约束条件的不能取空值。
  2. 加了UNIQUE限制的属性不能取空值。
  3. 码属性不能取空值

空值的算术运算、比较运算和逻辑运算

  1. 空值与另一个值(包括另一个空值)的算数运算的结果都为空值
  2. 空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN
  3. 在查询语句中,只有使WHERE和HAVING子句中的选择条件为TRUE的元组才被选出作为输出结果。

------>>>视图《MYSQL学习路线(4)》

猜你喜欢

转载自blog.csdn.net/weixin_42210229/article/details/88078443