-- 1、嵌套查询(注意使用ANY、ALL和EXISTS) -- (1)使用IN运算的简单嵌套查询 USE 学生管理; SELECT * FROM 课程表 WHERE 责任教师 IN ('T001','T002'); -- (2)使用NOT IN运算的简单嵌套查询 SELECT * FROM 课程表 WHERE 责任教师 NOT IN ('T001','T002'); -- (3)使用关系运算(如等于)的简单嵌套查询 SELECT * FROM 课程表 WHERE 学时 = 64; -- (4)使用ANY或SOME的简单嵌套查询 SELECT * FROM 课程表 WHERE 学时 = ANY( SELECT MAX(学时) FROM 课程表 ); -- (5)使用ALL的简单嵌套查询 SELECT * FROM 教师表 WHERE 工资 > ALL( SELECT AVG(工资) FROM 教师表 ); -- (6)使用连接查询院系名称含“计算机”、职称为教授、所负责教程为必修课的教师姓名、职称、课程名称和课程学时等信息 SELECT 教师表.姓名,教师表.职称,课程表.课程名称,课程表.学时 FROM 教师表 JOIN 院系表 ON 院系表.负责人=教师表.姓名 JOIN 课程表 ON 课程表.责任教师=教师表.教师编号 WHERE 院系表.名称 LIKE '%计算机%' AND 教师表.职称='教授' AND 课程表.课程性质='必修课'; -- (7)使用EXISTS的嵌套查询 SELECT * FROM 课程表 WHERE EXISTS( SELECT 平均成绩 FROM 学生表 WHERE 平均成绩 > 90 ); -- (8)使用NOT EXISTS的嵌套查询 SELECT * FROM 课程表 WHERE NOT EXISTS( SELECT 平均成绩 FROM 学生表 WHERE 平均成绩 < 60 ); -- 2、汇总和分组查询 -- (1)使用COUNT统计数目的查询 SELECT COUNT(*) FROM 学生表; -- (2)使用SUM计算合计的查询 SELECT SUM(工资) FROM 教师表; -- (3)一次完成求和、计数、计算平均值的查询 SELECT SUM(工资),COUNT(*),AVG(工资) FROM 教师表; -- (4)查询所有课程的成绩都大于60分的学生的平均分最高的学生信息 SELECT TOP 1 学生表.* FROM 学生表 JOIN ( SELECT 学号, AVG(成绩) AS 平均分 FROM 选课表 GROUP BY 学号 HAVING MIN(成绩) > 60 ) AS 成绩表 ON 学生表.学号 = 成绩表.学号 ORDER BY 成绩表.平均分 DESC; -- (5)查询数据库课程的成绩大于70分的、所有课程平均分最高的学生信息 SELECT TOP 1 学生表.* FROM 学生表 JOIN ( SELECT 学号, AVG(成绩) AS 平均分 FROM 选课表 WHERE 课程编号 = ( SELECT 课程编号 FROM 课程表 WHERE 课程名称 LIKE '%数据库%' ) AND 成绩 > 70 GROUP BY 学号 ) AS 成绩表 ON 学生表.学号 = 成绩表.学号 ORDER BY 成绩表.平均分 DESC; -- (6)查询每个学生的平均成绩 SELECT 学号, AVG(成绩) AS 平均成绩 FROM 选课表 GROUP BY 学号; -- (7)查询每个学生的所有成绩的最高成绩、最低成绩、平均成绩和所考课程的门数 SELECT 学号, MAX(成绩) AS 最高成绩, MIN(成绩) AS 最低成绩, AVG(成绩) AS 平均成绩, COUNT(课程编号) AS 课程门数 FROM 选课表 GROUP BY 学号;