前言:孩子有幸在更新系统之后尝到了SQL Server突然崩掉的滋味😵,折腾了几天🚑试了N多种方法最后,在烁老板的帮助下选择了在虚拟机上重装💔💔💔
文章目录
1.集合查询
集合查询操作主要包含并操作(UNION),交操作(INTERSECT),差操作(EXCEPT)
查询计算机科学与技术系的学生及年龄不大于19岁的学生
查询选修了课程1或者选修了课程2的学生
查询计算机科学系的学生与年龄不大于19岁的学生的交集
查询既选修了课程1又选修了课程2的学生
这里会有问题,如果将 Sno 换成 * ,会返回空表
原因在于,使用select *
进行交操作的时候,(Sno,Cno,Grade)会被看做一个整体,在两个表中进行交操作时没有完全相同的整体集合,所以就不会出现任何结果了。
嵌套查询方法
查询计算机科学系的学生与年龄不大于19岁的学生的差集
也可以普通查询
SELECT *
FROM Student
WHERE Sdept='CS' AND Sage>19;
1.基于派生表的查询
找出每个学生超过他自己选修课程平均成绩的课程号
查询所有选修了1号课程的学生姓名
2.数据更新
1.插入数据
之前的文章中已记录过具体方法,在这就不赘述了
2.插入子查询结果
对每一个系,求学生的平均年龄,并把结果存入数据库
建立新表:
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;
3.修改数据
将学生201215121 的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno='201215121';
将所有学生的年龄增加1岁
UPDATE Student
SET Sage=Sage+1;
将计算机科学系全体学生的成绩置零
UPDATE SC
SET Grade =0;
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');
4.删除数据
删除学号为201215128的学生记录
DELETE
FROM Student
WHERE Sno='201215128';
删除所有学生的选课记录。
DELETE
FROM SC;
删除计算机科学系所有学生的选课记录。
DELETE
FROM SC