表的创建:
① 创建一数据库Temp,在数据库中创建教材中的Student 表、Course 表和SC表。
② 向表中插入内容并设定表的主码、外码约束关系。
2)基于以上创建的表,完成如下基本SQL查询语句。
① 查询信息系和计算机系的学生,并按学生所在系和学号排序。
② 查询学生表中最小的年龄。
③ 查询课程名中包含“设计”的课程名。
④ 查询先行课程为空值的课程号、课程名及学分。
⑤ 查询李勇选修的数据库课程的成绩。
⑥ 查询平均成绩80分以上的学生的学号。
⑦ 求计算机系没有选修数据库课程的学生姓名。
⑧ 求至少选修了学号为S1所选修的全部课程的学生学号。
⑨ 求各系的系的学生人数,并将结果按学生人数的降序排序。
⑩ 查询选修了数据库课程并且成绩高于该门课程平均分的学生学号和成绩。
3)基于以上创建的表,利用SQL语句完成如下操作。
① 将学习了数据库课程的学生成绩加5分。
② 将选修了2号课程且成绩为空的选课记录删除。
③ 从课程表中删除在选课表中没有选课记录的课程记录。
④ 求各系的系名及男女生人数并将结果保存到另一个表中。
⑤ 将平均成绩80分以上的学生的学号、选学的课程数和平均成绩保存到另一个表中。
⑥ 创建一个视图,求选修了2号课程且成绩高于该门课程平均分的学生学号和成绩。
⑦ 创建用户user1,将学生表select权限赋给用户user1,然后以user1登录,检查权限情况。
⑧ 收回用户user1的对学生表的select权限,然后以user1登录,检查权限情况。
①
/* 查询信息系和计算机系的学生,并按学生所在系和学号排序。*/
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;
/*Sdept升序 Sage降序*/
②
/*查询学生表中最小的年龄。*/
SELECT MIN(Sage)
FROM Student
/*最小年龄为18*/
③
/*查询课程名中包含“设计”的课程名。*/
SELECT *
FROM Course
WHERE Cname = '设计';
④
/*查询先行课程为空值的课程号、课程名及学分。*/
SELECT Cno,Cname,Ccredit
FROM Course
WHERE Cpno IS NULL;
/*IS不能用等号代替*/
⑤
/*查询李勇选修的数据库课程的成绩。*/
SELECT Grade
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND
Student.Sname='李勇' AND
Course.Cno=SC.Cno AND
Course.Cname='数据库';
⑥
/*查询平均成绩80分以上的学生的学号。*/
SELECT Sno
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>80;
⑦
/*求计算机系没有选修数据库课程的学生姓名。*/
SELECT Sname
FROM Student
WHERE Sdept = 'CS' AND NOT EXISTS
(
SELECT *
FROM SC,Course
WHERE Student.Sno = SC.Sno AND
Course.Cno = SC.Cno AND
Course.Cname = '数据库'
);
⑧
/*求至少选修了学号为201215127所选修的全部课程的学生学号。*/
SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISTS
(
SELECT *
FROM SC SCY
WHERE SCY.Sno = '201215127' AND
NOT EXISTS
(
SELECT *
FROM SC SCZ
WHERE SCZ.Sno = SCX.Sno AND
SCZ.Cno = SCY.Cno
)
)
⑨
/*求各系的系的学生人数,并将结果按学生人数的降序排序。*/
SELECT Sdept,COUNT(*) 学生人数
FROM Student
GROUP BY Sdept
ORDER BY COUNT(*) DESC;
⑩
/* 查询选修了数据库课程并且成绩高于该门课程平均分的学生学号和成绩。*/
SELECT SC.Sno,Grade
FROM SC,Course
WHERE SC.Cno = Course.Cno AND
Course.Cname = '数据库' AND
SC.Grade >
(
SELECT AVG(Grade)
FROM Course,SC
WHERE Course.Cname = '数据库' AND
Course.Cno = SC.Cno
);
(2)
①
/*将学习了数据库课程的学生成绩加5分。*/
UPDATE SC
SET Grade = Grade + 5
WHERE Cno IN
(
SELECT Cno
FROM Course
WHERE Cname = '数据库'
);
②
/*将选修了2号课程且成绩为空的选课记录删除。*/
DELETE
FROM SC
WHERE Cno = 2 AND Grade IS NULL;
③
/*从课程表中删除在选课表中没有选课记录的课程记录。*/
DELETE
FROM Course
WHERE Cno NOT IN
(
SELECT DISTINCT Cno
FROM SC
);
④
/*求各系的系名及男女生人数并将结果保存到另一个表中。*/
CREATE TABLE TB4
( Sdept CHAR(15),
Sex CHAR(10),
Num CHAR(10)
);
INSERT
INTO TB4(Sdept,Sex,Num)
SELECT Sdept,Ssex,COUNT(Sno)
FROM Student
GROUP BY Sdept,Ssex;
⑤
/*将平均成绩80分以上的学生的学号、选学的课程数
和平均成绩保存到另一个表中。*/
CREATE TABLE TB5
( Sno CHAR(20),
CouNum CHAR(10),
AvgGrade CHAR(15)
);
INSERT
INTO TB5(Sno,CouNum,AvgGrade)
SELECT Sno,COUNT(Cno),AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(GRADE) > 80;
⑥
/*创建一个视图,求选修了2号课程且成绩
高于该门课程平均分的学生学号和成绩。*/
CREATE VIEW BT6(Sno,Grade)
AS
SELECT Sno,Grade
FROM SC
WHERE Cno = 2 AND Grade >(
SELECT AVG(Grade)
FROM SC
WHERE Cno = 2
);
⑦
/*创建用户user1,将学生表select权限赋给用户user1,
然后以user1登录,检查权限情况。*/
CREATE LOGIN user1 WITH PASSWORD='123456'
CREATE USER user1
USE Temp
GO
GRANT SELECT
ON Student
TO user1;
⑧
/*收回用户user1的对学生表的select权限,
然后以user1登录,检查权限情况。*/
USE Temp
GO
REVOKE SELECT
ON Student
FROM user1;