2022年数据库查询daan 3.pdf
例 1:查询全体学生的学号与姓名。SELECT Sno,Sname FROM Student例 2:查询全体学生的姓名、学号和所在系SELECT Sname,Sno,Sdept FROM Student 例 4查询全体学生的姓名及其出生年份SELECT Sname,2009-Sage FROM Student例 5查询全体学生的姓名和出生年份所在系,并在出生年份列前加入一个列,此列的每行数据均为 出生年份 常量值。SELECT Sname,出生年份 ,2009-SageFROM Student 在修课表中查询有哪些学生修了课程,要求列出学生的学号。SELECT Sno FROM SC结果有重复的行,是SC表 Sno列的全部内容。用 DISTINCT关键字可以去掉结果中的重复行DISTINCT关键字放在SELECT 词的后边、目标列名序列的前边。SELECT DISTINCT Sno FROM SC 例 7查询计算机系全体学生的姓名。SELECT Sname FROM Student WHERE Sdept=计算机系 例 8查询年龄在20 岁以下的学生的姓名及年龄。SELECT Sname,Sage FROM Student WHERE Sage 20例 9查询考试成绩有不及格的学生的学号SELECT DISTINCT Sno FROM SC WHERE Grade 60 例 10查询年龄在2023 岁之间的学生的姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23例 11查询年龄不在20 23 之间的学生姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 例 13查询信息系、数学系和计算机系学生的姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept IN(信息管理系,通信工程系,计算机系)例 14查询既不是信息系、数学系,也不是计算机系学生的姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN(信息管理系,通信工程系,计算机系)例 15查询姓 张 的学生的详细信息。SELECT*FROM Student WHERE Sname LIKE 张%例 16查询学生表中姓 张 、李 和 刘 的学生的情况。SELECT*FROM Student 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -WHERE Sname LIKE 张李刘%例 17查询名字中第2 个字为 小 或 大 的学生的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _ 小大%例 18查询所有不姓“刘”的学生。SELECT Sname FROM Student WHERE Sname NOT LIKE 刘%例 19查询学号的最后一位不是2、3、5 的学生情况。SELECT*FROM Student WHERE Sno LIKE%235 例 20查询无考试成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL例 21查询所有有考试成绩的学生的学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL 例 22查询计算机系年龄在20 岁以下的学生姓名。SELECT Sname FROM Student WHERE Sdept=CS AND Sage 3 例 38查询选课门数大于等于4 门的学生的平均成绩和选课门数。SELECT Sno,AVG(Grade)平均成绩,名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -COUNT(*)修课门数FROM SC GROUP BY Sno HAVING COUNT(*)=4 查询计算机系和信息管理系的学生人数。SELECT Sdept,COUNT(*)FROM Student GROUP BY Sdept HAVING Sdept IN(计算机系,信息管理系)SELECT sdept,COUNT(*)FROM Student WHERE Sdept IN(计算机系,信息管理系)GROUP BY Sdept 第二种写法比第一种写法执行效率高例 41.查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩SELECT Sname,Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno WHERE Sdept=计算机系 例 42.查询“信息管理系”选修了“计算机文化学”课程的学生的成绩,要求列出学生姓名、课程名和成绩。SELECT Sname,Cname,Grade FROM Student s JOIN SC ON s.Sno=SC.Sno JOIN Course c ON c.Cno=SC.Cno WHERE Sdept=信息管理系 AND Cname=计算机文化学 例 43查询所有修了VB 课程的学生的修课情况,列出学生姓名和所在的系。SELECT Sname,Sdept FROM Student S JOIN SCON S.Sno=SC.Sno JOIN Course C ON C.Cno=SC.cno WHERE Cname=VB 例 44有分组的多表连接查询。统计每个系的学生的考试平均成绩。SELECT Sdept,AVG(grade)as AverageGrade FROM student S JOIN SC ON S.Sno=SC.Sno GROUP BY Sdept例 45.有分组和行过滤的多表连接查询。统计计算机系每门课程的选课人数、平均成绩、最高成绩和最低成绩。SELECT Cno,COUNT(*)AS Total,AVG(Grade)as AvgGrade,MAX(Grade)as MaxGrade,MIN(Grade)as MinGrade FROM Student S JOIN SC ON S.Sno=SC.Sno WHERE Sdept=计算机系 GROUP BY Cno 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -例 46.查询与刘晨在同一个系学习的学生的姓名和所在的系。SELECT S2.Sname,S2.SdeptFROM Student S1 JOIN Student S2ON S1.Sdept=S2.Sdept-同一个系WHERE S1.Sname=刘晨 AND S2.Sname!=刘晨 例 47.查询与“数据结构”课程在同一个学期开设的课程的课程名和开课学期。SELECT C1.Cname,C1.Semester FROM Course C1 JOIN Course C2 ON C1.Semester=C2.Semester-同一学期WHERE C2.Cname=数据结构 例 49.查询哪些课程没有人选,列出课程名。SELECT Cname FROM Course C LEFT JOIN SC ON C.Cno=SC.Cno WHERE SC.Cno IS NULL 例 50.查询年龄最大的三个学生的姓名、年龄及所在的系。SELECT TOP 3 Sname,Sage,Sdept FROM Student ORDER BY Sage DESC或:包括并列结果:SELECT TOP 3 WITH TIES Sname,Sage,Sdept FROM Student ORDER BY Sage DESC 例 51.查询 VB 课程考试成绩前三名的学生的姓名、所在系和成绩。SELECT TOP 3 WITH TIES Sname,Sdept,Grade FROM Student S JOIN SC ON S.Sno=SC.Sno JOIN Course C ON C.Cno=SC.Cno WHERE Cname=VB ORDER BY Grade DESC 例 52.查询与刘晨在同一个系的学生。SELECT Sno,Sname,Sdept FROM StudentWHERE Sdept IN(SELECT Sdept FROM StudentWHERE Sname=刘晨 )AND Sname!=刘晨 查询成绩为大于90 分的学生的学号、姓名。SELECT Sno,Sname FROM StudentWHERE Sno IN(SELECT Sno FROM SCWHERE Grade 90)查询选修了“VB”课程的学生学号、姓名。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -SELECT Sno,Sname FROM StudentWHERE Sno IN(SELECT Sno FROM SCWHERE Cno IN(SELECT Cno FROM CourseWHERE Cname=VB)例 55.统计选修了“VB”课程的学生的选课门数和平均成绩。SELECT Sno 学号,COUNT(*)选课门数,AVG(Grade)平均成绩FROM SC WHERE Sno IN(SELECT Sno FROM SC JOIN Course C ON C.Cno=SC.Cno WHERE Cname=VB)GROUP BY Sno 例 56.查询选了“C004”课程且成绩高于此课程的平均成绩的学生的学号和成绩。SELECT Sno,Grade FROM SCWHERE Cno=C004and Grade (SELECT AVG(Grade)from SC WHERE Cno=C004)例 57.查询计算机系年龄最大的学生的姓名和年龄。SELECT Sname,Sage FROM Student WHERE Sdept=计算机系 AND Sage=(SELECT MAX(Sage)FROM Student WHERE Sdept=计算机系)例 58.查询选修了 C002 号课程的学生姓名。SELECT Sname FROM Student WHERE EXISTS(SELECT*FROM SCWHERE Sno=Student.Sno AND Cno=C002)名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -