分享一些简单的SQL查询面试题
/*
3. 在StudentInfo数据库中,用DDL进行下列查询操作
*/
/*--单表查询-- */
--1)查询全体学生的学号、姓名、性别、出生日期及所在系。
USE StudentInfo;
SELECT * FROM Student;
2)查询全体学生的选课情况,其成绩列值都加5,并为各列设置中文的别名。
SELECT Sno '学号',Cno '课程号',Grade+5 '成绩'
FROM SC;
3)显示所有选课学生的学号,并去掉重复行。
SELECT DISTINCT Sno FROM Student;
4)查询学生选课成绩在80~90分之间的学生的学号、课程号、成绩。
SELECT * FROM SC WHERE Grade between 80 and 90;
5)查找姓名以S开头的所有学生的学号、姓名。
SELECT Sno,Sname FROM Student
WHERE Sname like 's%';
6)查询有考试成绩(即成绩不为空值)的学生的学号、课程号。
SELECT Sno,Cno FROM SC
WHERE Grade is not null;
7)查询计算机系(计科0701)年龄在18岁以上的学生的学号、姓名。
SELECT Sno,Sname FROM Student
WHERE Sage>18 and Sdept='CS0701';
--8)求选修课程超过2门课的学生学号、平均成绩和选课门数,并按平均成绩降序排列
SELECT Sno,AVG(Grade) AvgGrade,COUNT(cno) '选课门数'
FROM SC
GROUP BY Sno HAVING COUNT(*)>=2
ORDER BY AvgGrade desc;
/*--查询及更新-- */
--9)查询每个学生的学号、姓名、选修的课程名、成绩。(连接查询)
SELECT Student.Sno,Sname,Cname,Grade FROM Student,Course,SC
WHERE Student.Sno=SC.Sno and Course.Cno=SC.Cno;
--10)查询与Sue在同一个系学习的所有学生的学号和姓名。(嵌套查询)
SELECT Sno,Sname FROM Student
WHERE Sdept in(
SELECT Sdept FROM Student
WHERE Sname='Sue'
);
--11)查询选修了课程名为English的课程并且成绩大于80分的学生学号、姓名。(可改为嵌套查询)
SELECT Student.Sno,Sname FROM Student,Course,SC
WHERE Student.Sno=SC.Sno and Course.Cno=SC.Cno and Cname='English' and Grade>80;
/* 12)向Student表中添加一个学生记录,学生学号为20010115,姓名为Stefen ,性别为男,
年龄为25岁,所在系为艺术系Art。*/
INSERT INTO Student
VALUES('20010115','Stefen','男',25,'艺术系Art');
--13)向SC表中添加一个学生的选课记录,学生学号为20010115,所选的课程号为C2。
INSERT INTO SC(Sno,Cno)
VALUES('20010115','C2');
--14)将姓名为Sue的学生所在系改为计算机系。
UPDATE Student SET Sdept='计算机系'
WHERE Sdept in(
SELECT Sdept FROM Student
WHERE Sname='Sue'
);
--15)将选了课程名为Database课程的学生成绩加10。
UPDATE SC SET Grade=Grade+10
WHERE Cno in(
SELECT Cno FROM Course
WHERE Cname='Database'
);
--16)删除所有成绩为空值的选修记录。
DELETE FROM SC
WHERE Grade is null;
--17)删除计算机系选修成绩不及格的学生的选修记录。
DELETE FROM SC
WHERE Cno in(
SELECT SC.Cno FROM Student,SC
WHERE Sdept='计算机' AND Grade<60 AND Student.Sno=SC.Sno
);