本节要点

更新数据
使用其他表更新数据
删除数据
根据其他表删除数据

更新数据

SQL语言的全名是结构化查询语言,可以看出来,SQL主要是用来查询数据的。所以,前面我们花了十几节课来讲解应该怎么查询数据。

这节课,我们来讲解如何去更新和删除数据。

更新表中的数据,使用UPDATE关键字,语法如下:

UPDATE 表名 SET 字段名=新的值;

比如,更新学生表中的所有学生性别为男:

UPDATE student SET gender = '男';

上面这个SQL,是将学生表中的所有学生的性别,都更新为了’男’。在绝大部分情况下,这都不是我们想要的。

我们更多的时候,是只想更新一个或一部分学生的性别。这时候,就可以在UPDATE语句中使用WHERE关键字来限定我们需要更新的那部分学生。

语法如下:

UPDATE 表名 SET 字段名=新的值 WHERE 限定条件;

比如,更新学生方东美同学的性别为女:

UPDATE student SET gender = '女' WHERE student_name = '方东美';

其实,我们在更新数据的时候,还可以同时更新多个字段,语法如下:

UPDATE 表名
SET 字段名1=新的值1,字段名2=新的值2,…
WHERE 限定条件;

比如,同时更新学生方东美的性别为女,分数为85.50:

UPDATE student
SET gender = '女',score = 85.50
WHERE student_name = '方东美';

使用其他表更新数据

上面我们讲的,是将表中的数据更新为一个特定值的情况。其实我们也可以根据另一个表中的值,来更新表中的数据。这时候就需要用到子查询。语法如下:

UPDATE 表名
SET 字段名=(子查询)
[ WHERE 限定条件 ];

比如,在学生表中添加老师姓名字段,并使用老师表中的数据进行更新:

UPDATE student a
SET teacher_name = ( SELECT b.teacher_name
    FROM teacher b
    WHERE a.teacher_id = b.teacher_id);

删除数据

如果我们想删除数据,可以使用DELETE关键字,语法如下:

DELETE FROM 表名;

比如,删除学生表中的数据,使用如下语句:

DELETE FROM student;

与UPDATE一样,这样不加限定条件的删除,是将表中的数据全部删除。

我们同样可以借助WHERE关键字删除部分数据,语法如下:

DELETE FROM 表名 WHERE 筛选条件;

比如,只想删除学生表中方东美的数据,可以使用如下语句:

DELETE FROM student WHERE student_name = '方东美';

根据其他表删除数据

与UPDATE一样,我们也可以使用其他表,来删除表中的数据。语法如下:

DELETE FROM 表名 WHERE 子查询;

比如,删除学生表中老师姓名为NULL的数据,可以使用如下语句:

DELETE FROM student
WHERE teacher_id in ( SELECT teacher_id
    FROM teacher
    WHERE teacher_name IS NULL );

上面我们讲解了不带WHERE条件的UPDATE和DELETE操作。当我们不带WHERE条件时,意味着我们是对表中全部的数据进行操作,而很多时候,这可能并不是我们的初衷。所以,在执行UPDATE和DELETE语句时,要格外的谨慎,以防止更新或删除了不必要的数据。

picture loss