一、插入数据
两种插入数据方式:
1.插入元组;
2.插入子查询结果:可以一次插入多个元组
(1)插入元组
语句格式:
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );
INTO子句
指定要插入数据的表名及属性列
属性列的顺序可与表结构中的顺序不一致
属性列与常量列要一一对应,否则输入的常量值有误
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句
提供的值必须与INTO子句匹配,即属性列与常量列要一一对应,否则输入的常量值有误
1.将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);
注:
(1)VALUES (‘201215129’,‘陈冬1’,‘男’,‘’,18); 系名为空格
(2)VALUES (‘201215130’,‘陈冬2’,‘男’,null,‘18’); 系名为空
(3)年龄18,加单引号可以,不加也可以
(4)更新数据后可能屏幕无显示,按F5
2.将学生张成民的信息插入到Student表中。
INSERT
INTO Student
VALUES (‘201215126’,‘张成民','男',18,’CS’);
注:没有属性列,则插入值的顺序必须与表结构的顺序一致
3.插入一条选课记录( ‘202115128’,'1 ')。
INSERT
INTO SC(Sno,Cno)
VALUES ('202115128 ',' 1 ');
最后一列如果不输入数据,可以不写,则关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。
或者:
INSERT
INTO SC
VALUES (' 202115128 ',' 1 ',NULL);
#关系数据库管理系统将在新插入记录的Grade列上自动地赋空值,但如果是中间的字段,必须加’’或null。
(2)插入子查询结果
语句格式
INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;
SELECT子句目标列必须与INTO子句匹配
1.对每一个系,求学生的平均年龄,并把结果存入数据库
第一步:建表
CREATE TABLE Dept_age
( Sdept CHAR(15), /*系名*/
Avg_age SMALLINT); /*学生平均年龄*/
第二步:插入数据
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage) /*按系求均值*/
FROM Student
GROUP BY Sdept; /*按系名分组*/
一条insert语句,同时插入多条记录。
加()和,对多条数据进行分隔
insert into student
Values
('201215126','李勇2','男','20','CS') ,
('201215127','张立2','男','19','IS');
关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
- 实体完整性
- 参照完整性
- 用户定义的完整性
- NOT NULL约束
- UNIQUE约束
- 值域约束
2.例如:在对course表插入数据时,由于course表内部建有外键,所有不能直接插入数据,需要设置。
set foreign_key_checks=0;
insert into Course
values('8','DB_Design',‘5',‘2');
set foreign_key_checks=1;
二、修改数据
语句格式:
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
三种修改方式:
1.修改某一个元组的值
2.修改多个元组的值
3.带子查询的修改语句
1. 将学生201215121的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno=‘201215121';
2.将所有学生的年龄增加1岁。
UPDATE Student
SET Sage= Sage+1;
3.将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept= 'CS' );
关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则:
实体完整性;主码不允许修改;用户定义的完整性
三、修改数据
语句格式:
DELETE
FROM <表名>
[WHERE <条件>];
三种删除方式:
1.删除某一个元组的值
2.删除多个元组的值
3.带子查询的删除语句
1.删除学号为201215125的学生记录。
DELETE
FROM Student
WHERE Sno=‘ 201215125’;
2.删除所有的学生选课记录。
DELETE
FROM SC;
3.删除计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept= 'CS') ;
关系数据库管理系统在执行删除语句时会检查删除操作是否破坏表上已定义的完整性规则
例如:对表内建有外键的course 表,不能直接插入数据,也不能直接删除数据,但可以直接修改数据。
DELETE from course
WHERE cno=‘7’;
4.将Student表中学生号为”201215125”的学生所属的系改为空值。
UPDATE Student
SET Sdept = NULL
WHERE Sno='201215125';
5.从Student表中找出漏填了数据的学生信息
判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示。
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.关键字不能取空值
6.逻辑运算符真值表
#找出选修1号课程的不及格的学生。
SELECT Sno
FROM SC
WHERE Grade < 60 AND Cno='1';
查询结果不包括Grade值为 null的学生,因为他们可能缓考等原因。