实验问题的解决:
注意:只有mysql会有这个问题,mssql与oracle都没有这个问题。
第五题第六题正常写此时报错:1093 - You can’t specify target table ‘result’ for update in FROM clause
解决方案:把结果集当作一个表,自我查询一遍
格式为:SELECT a.StudentResult FROM (结果集)a
一、实验目的:
1. 熟悉使用UPDATE/INSERT/DELETE语句进行表操作;
2. 能将这些更新操作应用于实际操作中去;
二、实验准备
1. 了解更新语句的基本语法和用法;
2. 建立相关数据库,并在数据库中建立表,表中有一定量的记录。
三、实验环境:
Navicat 15 for MySQL
四、实验内容:
(写出主要的内容)
使用课程数据库
1. 对于student表,将所有所在系部信息为’CS’的改为’计算机科学系’。
UPDATE student
SET Sdept='计算机科学系'
WHERE Sdept='CS'
2. 对于course表,将数据结构课程的学分改为3。
UPDATE course
SET Ccredit=3
WHERE Cname='数据结构'
3. 对于student表,插入一条新记录,它的具体信息为,学号:201216011、姓名:张三、性别:男、年龄:21,所在系部:数学系。
INSERT
INTO student
VALUES('201216011','张三','男','21','数学系')
4. 对于course表,插入两条记录,记录的值自己给定。
第一条:
INSERT
INTO course
VALUES('8','面向对象','NULL','5')
第二条:
INSERT
INTO course
VALUES('9','数字逻辑','NULL','4')
5. 对于SC表,将课程编号为2号的最低分改为在原分数*1.1
UPDATE sc
SET Grade =Grade*1.1
WHERE Grade IN(
SELECT min_grade
FROM(
SELECT MIN(Grade) AS min_grade
FROM sc
WHERE Cno='2'
)
AS a
)
6. 对于SC表,将课程名为数据库的最低分改为在原分数*1.1
UPDATE sc
SET Grade =Grade*1.1
WHERE Grade IN(
SELECT min_grade
FROM(
SELECT MIN(Grade) AS min_grade
FROM sc
WHERE Cno=(
SELECT Cno
FROM course
WHERE Cname='数据库'
)
)
AS a
)
7. 建立一个新表SC_T,该表的字段名称,类型与表SC一致
CREATE TABLE SC_T
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno))
8. 在SC_T表中,插入若干选课记录,学号为student表中出现的学号,课程编号为1
insert into SC_T values('201215121','1',21);
insert into SC_T values('201215122','1',22);
insert into SC_T values('201215123','1',23);
insert into SC_T values('201215125','1',25);
insert into SC_T values('201215126','1',26);
insert into SC_T values('201215127','1',27);
insert into SC_T values('201215128','1',28);
insert into SC_T values('201215129','1',29);
9. 在SC_T表中,插入若干选课记录,学号为student表中出现的学号,课程编号为操作系统课程的编号
insert into SC_T values('201215121','4',21);
insert into SC_T values('201215122','4',22);
insert into SC_T values('201215123','4',23);
insert into SC_T values('201215125','4',25);
insert into SC_T values('201215126','4',26);
insert into SC_T values('201215127','4',27);
insert into SC_T values('201215128','4',28);
insert into SC_T values('201215129','4',29);
10.用select语句检查8,9的操作是否正确,如果正确,则删除SC_T表中的所有记录
Sql语句为:
SELECT *
FROM SC_T
所以八九操作正确,可以执行删除操作!
删除的Sql语句为:
DELETE
FROM SC_T
11. 在SC_T表中,插入若干选课记录,学号为student表中出现的学号,课程编号为在课程表中出现的所有课程号。
insert into SC_T values('201215121','1',21);
insert into SC_T values('201215122','2',22);
insert into SC_T values('201215123','3',23);
insert into SC_T values('201215125','4',25);
insert into SC_T values('201215126','5',26);
insert into SC_T values('201215127','6',27);
insert into SC_T values('201215128','7',28);
insert into SC_T values('201215129','8',29);
insert into SC_T values('201215129','9',29);
12. 用select语句检查11的操作是否正确.
Sql语句为:
SELECT *
FROM SC_T
所以11操作成功!