资源描述
数据库实习答案 数据库实习答案 1、E-R图向关系模式的转化。最终答案:职工(职工号,姓名,性别,工资,职称,简历,部门号);部门(部门号,名称,地址,领导人职工号);工程(工程号,工程名,参加人数,预算,部门号,负责人职工号);办公室(编号,地点,电话,部门号);参加(职工号,工程号,日期,具体职务);(红色部分为主键,绿色部分为外键)。2、SQL 查询语句练习。/*实验 3 数据库的简单查询实验答案*/数据库实习答案【例 3、1】查询全体学生的学号与姓名 SELECT Sno,Sname FROM Students 【例 3、2】查询全体学生的学号、姓名、性别、年龄、所在系。SELECT Sno,Sname,Sname Ssex,Sage,Sdept FROM Students【例 3、3】查询全体学生的选课情况,即学号、课程号、成绩,成绩值都加 5 SELECT Sno,Cno,Grade+5 FROM Enrollment【例 3、4】查询全体学生的学号、姓名,并为原来的英文列名设置中文列别名。以下三种方法等价。SELECT Sno 学号,Sname 姓名 FROM Students SELECT Sno AS 学号,Sname AS 姓名 FROM Students SELECT 学号=Sno ,姓名=Sname FROM Students【例 3、5】查询全体学生的选课情况,其成绩列值都加 5,并为各列设置中文的别名 SELECT Sno 学号,Cno 课程号,Grade+5 成绩 FROM Enrollment【例 3、6】显示所有选课学生的学号。SELECT Sno 学号 FROM Enrollment 等价于:SELECT ALL Sno 学号 FROM Enrollment【例 3、7】显示所有选课学生的学号,并去掉重复行。SELECT DISTINCT Sno 学号 FROM Enrollment【例 3、8】查询学生选课成绩大于 80 分的学生学号、课程号、成绩。SELECT*FROM Enrollment WHERE Grade80 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案【例 3、9】查询数学系全体学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sdept=Math【例 3、10】查询学生选课成绩在 8090 分之间的学生学号、课程号、成绩。SELECT*FROM Enrollment WHERE Grade BETWEEN 80 AND 90 等价于:SELECT*FROM Enrollment WHERE Grade=80 AND Grade=90【例 3、11】查询学生年龄不在 2030 之间的学生学号、姓名、所在系。SELECT Sno,Sname,Sdept FROM Students WHERE Sage NOT BETWEEN 20 AND 30 等价于:SELECT Sno,Sname,Sdept FROM Students WHERE Sage30【例 3、12】查询数学系、计算机系、艺术系学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sdept IN(Math,Computer,Art)等价于:SELECT Sno,Sname FROM Students WHERE Sdept=Math OR Sdept=Computer OR Sdept=Art【例 3、13】查询既不就是数学系、计算机系,也不就是艺术系学生的学号、姓名。SELECT Sno,Sname FROM Students 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 WHERE Sdept NOT IN(Math,Computer,Art)等价于:SELECT Sno,Sname FROM Students WHERE Sdept!=Math AND Sdept!=Computer AND Sdept!=Art【例 3、14】查找姓名的第二个字符就是 u 并且只有三个字符的学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE _u_【例 3、15】查找姓名以 S 开头的所有学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE S%【例 3、16】查找姓名以 S、D 或 J 开头的所有学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE SDJ%【例 3、17】查找姓名不就是以 S、D 或 J 开头的所有学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE SDJ%等价于:SELECT Sno,Sname FROM Students WHERE Sname NOT LIKE SDJ%【例 3、18】查询无考试成绩的学生的学号与相应的课程号。SELECT Sno,Cno FROM Enrollment WHERE Grade IS NULL 不等价于:SELECT Sno,Cno FROM Enrollment WHERE Grade=0 【例 3、19】查询有考试成绩(即成绩不为空值)的学生的学号、课程号。SELECT Sno,Cno FROM Enrollment WHERE Grade IS NOT NULL 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案【例 3、3、20】查询计算机系年龄在 18 岁以上的学生学号、姓名。SELECT Sno,Sname FROM Students WHERE Sdept=Computer AND Sage18【例 3、21】求选修了 C1 课程或 C2 课程的学生学号、成绩。SELECT Sno,Grade FROM Enrollment WHERE Cno=C1 OR Cno=C2 为了使查询语句的可读性更好,可以将WHERE 后面的整个条件用括号括起来。等价于:SELECT Sno,Grade FROM Enrollment WHERE(Cno=C1 OR Cno=C2)【例 3、22】求学生的总人数 SELECT COUNT(*)FROM Students 【例 3、23】求选修了课程的学生人数 SELECT COUNT(DISTINCT Sno)FROM Enrollment【例 3、24】求选修了 C1 课程的学生的平均成绩。SELECT AVG(Grade)FROM Enrollment WHERE Cno=C1【例 3、25】求 20010102号学生的考试总成绩之与。SELECT SUM(Grade)FROM Enrollment WHERE Sno=20010102【例 3、26】选修了 C1 课程的学生的最高分与最低分 SELECT MAX(Grade),MIN(Grade)FROM Enrollment WHERE Cno=C1【例 3、3、27】求选修每门课程的学生人数。号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 SELECT Cno AS 课程号,COUNT(Sno)AS 选修人数 FROM Enrollment GROUP BY Cno【例 3、28】求每个学生的学号与各门课程的总成绩。SELECT Sno 学号,Sum(grade)总成绩 FROM Enrollment GROUP BY Sno【例 3、29】求选修课程超过 2 门课的学生的学号、平均成绩,选修的门数。SELECT Sno,AVG(Grade)AS 平均成绩,COUNT(*)AS 选修门数 FROM Enrollment GROUP BY Sno HAVING COUNT(*)=2【例 3、30】查询所有学生的行,并按学生的年龄值从小到大排序。SELECT*FROM Students ORDER BY Sage【例 3、31】查询选修了 C1 课程的学生的学号与成绩,查询结果按成绩降序排列。SELECT Sno,Grade FROM Enrollment WHERE Cno=C1 ORDER BY Grade DESC【例 3、32】查询全体学生信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。SELECT*FROM Students ORDER BY Sdept,Sage DESC【例 3、33】求选修课程超过 2 门课的学生的学号、平均成绩与选课门数,并按平均成绩降序排列。SELECT Sno AS 学号,AVG(Grade)AS 平均成绩,COUNT(*)AS 修课门号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 数 FROM Enrollment GROUP BY Sno HAVING COUNT(*)=2 ORDER BY AVG(Grade)DESC/*实验 4 数据库的多表连接查询实验答案*/【例 4、1】查询每个学生的基本信息以及她/她选课的情况。SELECT Students、*,Enrollment、*FROM Students,Enrollment WHERE Students、Sno=Enrollment、Sno 上述就是等值连接,改为自然连接,表示如下:SELECT Students、Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Students,Enrollment WHERE Students、Sno=Enrollment、Sno【例 4、2】查询每个学生的学号、姓名、选修的课程名、成绩。SELECT Students、Sno,Sname,Cname,Grade FROM Students,Courses,Enrollment WHERE Students、Sno=Enrollment、Sno AND Courses、Cno=Enrollment、Cno【例 4、3】查询选修了 C2 且成绩大于 90 分的学生的学号、姓名、成绩。号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 SELECT Students、Sno,Sname,Grade FROM Students,Enrollment WHERE Students、Sno=Enrollment、Sno AND Cno=C2 AND Grade90【例 4、4】求计算机系选修课程超过 2 门课的学生的学号、姓名、平均成绩,并按平均成绩从高到低排序。SELECT Students、Sno,Sname,AVG(Grade)Average FROM Students,Enrollment WHERE Students、Sno=Enrollment、Sno AND Sdept=Computer GROUP BY Students、Sno,Sname HAVING COUNT(*)=2 ORDER BY SUM(Grade)DESC【例 4、5】查询与 Sue 在同一个系学习的所有学生的学号与姓名。SELECT S2、Sno,S2、Sname FROM Students S1,Students S2 where S1、Sdept=S2、Sdept AND S1、Sname=Sue【例 4、6】查询所有学生的选修情况,要求包括选修了课程的学生与没有修课的学生,显示她们的学号、姓名、课程号、成绩。SELECT Students、Sno,Sname,Cno,Grade FROM Students,Enrollment WHERE Students、Sno*=Enrollment、Sno 上述左外连接可可以用右外连接等价表示:号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 SELECT Students、Sno,Sname,Cno,Grade FROM Students,Enrollment WHERE Enrollment、Sno=*Students、Sno 在 SQLSERVER2000 中,以上左外连接还可等价表示为:SELECT Students、Sno,Sname,Cno,Grade FROM Students LEFT JOIN Enrollment ON Students、Sno=Enrollment、Sno-或者表示为:SELECT Students、Sno,Sname,Cno,Grade FROM Enrollment RIGHT JOIN Students ON Enrollment、Sno=Students、Sno/*实验 5 数据库的子查询、组合查询实验答案*/【例 5、1】查询与 Sue 在同一个系学习的学生学号、姓名。SELECT Sno,Sname FROM Students WHERE Sdept=(SELECT Sdept FROM Students WHERE Sname=Sue)【例 5、2】查询其她系中比计算机系任一学生年龄都小的学生基本情况。SELECT*FROM Students WHERE Sdept!=Computer AND Sage ALL(SELECT Sage FROM Students 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 WHERE Sdept=Computer)【例 5、3】查询其她系中比计算机系某一学生年龄小的学生的基本情况。SELECT*FROM Students WHERE Sdept!=Computer AND Sage 80)【例 5、5】查询选修了课程名为 English 的课程并且成绩大于 80 分的学生学号、姓名。SELECT Sno,Sname FROM Students WHERE Sno IN(SELECT Sno FROM Enrollment WHERE Grade 80 AND Cno=(SELECT Cno FROM Courses WHERE Cname=English)【例 5、6】查询选修了 C2 课程的学生的学号与姓名。SELECT Sno,Sname FROM Students 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 WHERE EXISTS(SELECT*FROM Enrollment WHERE Sno=Students、Sno AND Cno=C2)【例 5、7】查询没有选修 C2 课程的学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE NOT EXISTS(SELECT*FROM Enrollment WHERE Sno=Students、Sno AND Cno=C2)【例 5、8】查询选修了 C1 课程或选修了 C2 课程的学生学号。SELECT Sno FROM Enrollment WHERE Cno=C1 UNION SELECT Sno FROM Enrollment WHERE Cno=C2【例 5、9】查询选修了 C1 课程并且也选修了 C2 课程的学生学号。SELECT Sno FROM Enrollment WHERE Cno=C1 SQLSERVER2000中不能运行 INTERSECT SELECT Sno FROM Enrollment WHERE Cno=C2 上述查询在 SQL SERVER 2000中应表示为:SELECT Sno FROM Enrollment E1 WHERE Cno=C1 AND EXISTS(SELECT Sno FROM Enrollment E2 WHERE E1、Sno=E2、Sno AND E2、Cno=C2)【例 5、10】查询选修了 C1 课程但没有选修了 C2 课程的学生学号。SELECT Sno FROM Enrollment WHERE Cno=C1 SQLSERVER2000号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 中不能运行 MINUS SELECT Sno FROM Enrollment WHERE Cno=C2 上述查询在 SQLSERVER2000 中应表示为:SELECT Sno FROM Enrollment E1 WHERE Cno=C1 AND NOT EXISTS(SELECT Sno FROM Enrollment E2 WHERE E1、Sno=E2、Sno AND E2、Cno=C2)/*实验 6 数据库的更新实验答案*/【例 6、1】向 Students表中添加一个学生记录,学生学号为 20010105,姓名为 Stefen,性别为男,年龄 25 岁,所在系为艺术系 Art。INSERT INTO Students VALUES(20010105,Stefen,F,25,Art)【例 6、2】向 Enrollment表中添加一个学生的选课记录,学生学号为20010105,所选的课程号为 C2。INSERT INTO Enrollment(Sno,Cno)VALUES(20010105,C2)【例 6、3】假定当前数据库中有一个临时表 Temp,见表。把它的所有行一次性地加到 Students表中。要求先定义 Temp 表,输入若干行数据。具体内容表 3-7 INSERT INTO Students SELECT*FROM Temp【例 6、4】将所有学生选课的成绩加 5。号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 UPDATE Enrollment SET Grade=Grade+5【例 6、5 将姓名为 Sue 的学生所在系改为计算机系。UPDATE Students SET Sdept=Computer WHERE Sname=Sue【例 6、6】将选课了课程名为 Database课程的学生成绩加 10。UPDATE Enrollment SET Grade=Grade+10 WHERE Cno=(SELECT Cno FROM Courses WHERE Cname=Database)【例 6、7】删除所有成绩为空值的选修记录。DELETE FROM Enrollment WHERE Grade IS NULL【例 6、8】删除学生姓名为 Deepa的学生记录。DELETE FROM Students WHERE Sname=Deepa【例 6、9】删除计算机系选修成绩不及格的学生选修记录。DELETE FROM Enrollment WHERE Grade 80 GO【例 7、5】查询计算机系选修了课程名为 Database并且成绩大于 90 分的学生的姓名、成绩。SELECT 姓名,成绩 FROM CompStudentView1 WHERE 成绩90【例 7、6】删除 CompStudentView1视图。DROP VIEW CompStudentView1 3、数据库安全与保护内容 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程数据库实习答案 号工程号日期具体职务红色部分为主键绿色部分为外键查询语句练习实验数据库的简单查询实验答案数据库实习答案号成绩成绩值都加例查询全体学生的学号姓名并为原来的英文列名设置中文列别名以下三种方法等价学号姓名学号姓学生的学号学号等价于学号例显示所有选课学生的学号并去掉重复行学号例查询学生选课成绩大于分的学生学号课程
展开阅读全文