数据库学习之旅——实验3

Posted Henry Zheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库学习之旅——实验3相关的知识,希望对你有一定的参考价值。

本次大实验分为两部分实验其中(1)为数据更新

本次试验的目的使熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、更新、删除操作。

数据更新实验原理解析:

①使用INSERT INTO 语句,该语句的作用是执行一个插入操作,可以将VALUES所给出的值插入INTO所指定的表中或将子查询的结果插入到数据库中。

在指定列明的时候,可以指定全部列或其中的几个列。当指定VALUES值的时候,列明和插入的元组的VALUES后面所跟的数值必须一一对应。当值指定基本表中的某几列而不是所有列时,必须保证被省略的这些列的取值允许为空值,否则会出现错误。如果省略的列的取值允许为空值,则指定的元组(没有赋值的列的值被置为NULL值)可以插入到数据库中。

当插入的是子查询的结果的时候,必须保证子查询得到的数值类型与将插入的基本表中对应列的数值类型是一致的。

②还可以使用SELECT INTO语句,这个语句的作用是从一个查询的计算结果中创建一个新表。数据并不返回给客户端,这一点和普通的SELECT不同。新表的字段具有和SELECT的输出字段相关联的名字和数据类型。

③对数据的修改,可以使用UPDATE语句,该语句的作用是修改指定的基本表中满足WHERE子句的条件的元组,并把这些元组按照SET子句中的表达式修改相应列上的值。UPDATE语句的一个语句可以修改一个记录,或同时修改多个记录。

④删除操作使用DELETE语句,该语句表示从指定的表中删除满足WHERE字句条件的所有元组,当WHERE子句省略时,则表示删除表中所有元组。对于忽略了WHERE子句的删除语句,使用时必须慎重对待。DELETE在删除数据时是以元组为单位进行删除的。当需要对某个元组的某个属性值删除时,可以通过UPDATE语句去更新元组来实现,或是通过将这个元组用DELETE删除再插入一个新的符合条件要求的元组的方法来实现。直接用DELETE语句来删除元组的某个属性值是没有办法直接实现的。


以下是本次实验的练习与习题答案:(school表在此并未发出,请参考之前的练习)

USE SCHOOL
/*STUDENTS(SID,SNAME,EMAIL,GRADE);
TEACHERS(TID,TNAME,EMAIL,SALARY);
COURSES(CID,CNAME,HOUR);
CHOICES(NO,SID,TID,CID,SCORE);*/

--1.3.4实验练习
--(1)使用SQL语句向STUDENTS表中插入元组(编号:700045678;名字:LIMING;EMAIL:LX@cdemg.com;年级:1992)
INSERT INTO STUDENTS VALUES('700045678','LIMING','LX@cdemg.com',1992);
SELECT * FROM STUDENTS WHERE SNAME='LIMING';


--(2)对每个课程,求学生的选课人数和学生的平均成绩,并把结果存入数据库。使用SELECT INTO 和INSERT INTO两种方法实现。
CREATE TABLE AVGCOURSE
(
CID CHAR(10),
SID SMALLINT,
AVGSCORE SMALLINT
);
INSERT INTO AVGCOURSE
SELECT CID,COUNT(CID),AVG(SCORE)
FROM CHOICES
GROUP BY CID
SELECT * FROM AVGCOURSE
--DROP TABLE AVGCOURSE


--(3)在STUDENTS表中使用SQL语句将姓名为“LIMING”的学生的年级改为“2002”。
UPDATE STUDENTS SET GRADE = '2002' WHERE SNAME = 'LIMING';
SELECT * FROM STUDENTS WHERE SNAME='LIMING';


--(4)在TEACHERS表中使用SQL语句将所有教师的工资多加500元。
UPDATE TEACHERS SET SALARY = SALARY+500; 


--(5)将姓名为zapyv的学生的课程“C”的成绩加上5分。
UPDATE CHOICES SET SCORE=SCORE+5
WHERE CHOICES.NO=
(
	SELECT CHOICES.NO
	FROM CHOICES,COURSES,STUDENTS
	WHERE COURSES.CID=CHOICES.CID AND STUDENTS.SID=CHOICES.SID AND COURSES.CNAME = 'C' AND STUDENTS.SNAME='zapyv'
)


--(6)在STUDENTS表中使用SQL语句删除姓名为"LIMING"的学生信息。
DELETE STUDENTS WHERE SNAME='LIMING';


--(7)删除所有选修课程"JAVA"的选课记录。
DELETE FROM CHOICES
WHERE 'Java'=
(
	SELECT CNAME
	FROM COURSES
	WHERE CHOICES.CID=COURSES.CID
)


--(8)对COURSES表做删去时间<48的元组的操作,并讨论该删除操作所受到的约束。
DELETE COURSES WHERE HOUR<48;
--*****注:不可以进行操作,因为在COURSES中定义了外键FK_CHOICES_COURSES,在COURSES表中的CID属性,被定义为CHOICES中的外键,因此不能进行删除操作。


针对以上练习,以下是自我练习题并附以答案:

--1.3.5自我实践
--(1)向STUDENTS表中插入编号是“800022222”且名字是“WANGLAN”的元组
INSERT INTO STUDENTS(SID,SNAME) VALUES('800022222','WANGLAN');


--(2)向TEACHERS表中插入元组('200001000','LXL','s4zrck@pew.net',3024)
INSERT INTO TEACHERS VALUES('200001000','LXL','s4zrck@pew.net',3024);


--(3)将TEACHERS表中编号为“200010493”的老师工资改为4000
UPDATE TEACHERS SET SALARY=4000 WHERE TID='200010493';


--(4)将TEACHERS表中所有工资小于2500的老师工资改为2500
UPDATE TEACHERS SET SALARY=2500 WHERE SALARY<2500;


--(5)将由编号为“200016731”的老师讲授的课程全部改成由姓名为“rnupx”的老师讲授
UPDATE CHOICES
SET TID=
(
	SELECT TID
	FROM TEACHERS
	WHERE TID='rnupx'
) WHERE TID='200016731'


--(6)更新编号为“800071780”的学生年级为“2001”
UPDATE STUDENTS SET GRADE='2001' WHERE SID='800071780';


--(7)删除没有学生选修的课程
DELETE FROM COURSES
WHERE CID NOT IN
(
	SELECT CID
	FROM CHOICES
	GROUP BY CID
)


--(8)删除年级高于1998的学生信息
DELETE FROM STUDENTS WHERE GRADE>1998;


--(9)删除没有选修课程的学生信息
DELETE FROM STUDENTS
WHERE SID NOT IN
(
	SELECT SID
	FROM CHOICES
	GROUP BY SID
)


--(10)删除成绩不及格的选课记录
DELETE FROM CHOICES	WHERE SCORE<60;

运行结果请读者自试。

以上是关于数据库学习之旅——实验3的主要内容,如果未能解决你的问题,请参考以下文章

大学二年级-- “赖”在实验室的发明达人

大学二年级-- “赖”在实验室的发明达人

大学二年级-- “赖”在实验室的发明达人

数据库学习之旅——实验1

数据库学习之旅——实验2

数据库学习之旅——实验8