钟阳 整理
例1:查询全体学生的学号与姓名。 SELECT Sno, Sname FROM Student
例2.查询全体学生的姓名、学号、所在系 SELECT Sname, Sno, Sdept FROM Student 例3.查询全体学生的详细信息 SELECT * FROM Student
例4.查询全体学生的姓名及其出生年份。 SELECT Sname,2015-Sage FROM Student
例5.查询全体学生的姓名和出生年份所在系,并在出生年份列前加入一个列,此列的每行数据均为“出生年份”常量值。
SELECT Sname,'出生年份:', 2015-Sage FROM Student 例6.查询选修了课程的学生的学号 SELECT 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.查询年龄在20~23岁之间的学生的姓名、所在系和年龄。 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
WHERE Sname LIKE '[张李刘]%'
例17.查询名字中第2个字为‘小’或‘大’的学生的姓名和学号。 SELECT Sname, Sno FROM Student WHERE Sname LIKE '_[小大]%'
钟阳 整理
例18.查询所有不姓“王”也不姓“张”的学生姓名 SELECT Sname FROM Student WHERE Sname NOT LIKE '[王张]%'
例19.查询姓“王”且名字是2个字的学生姓名。 SELECT Sname FROM Student
WHERE Sname LIKE '王_'
例20.查询姓王且名字是3个字的学生姓名 SELECT Sname FROM Student
WHERE Sname LIKE '王__'
例21. 在Student表中查询学号的最后一位不是2、3、5的学生信息。 SELECT * FROM Student WHERE Sno LIKE '%[^235]'
例22.查询没有考试成绩的学生的学号和相应的课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NULL
例23.查询所有有考试成绩的学生的学号和课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL
例24.查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student
WHERE Sdept = '计算机系' AND Sage < 20
例25.查询计算机系和信息系年龄大于等于20岁的学生姓名、所在系和年龄。 SELECT Sname,Sdept, Sage FROM Student WHERE (Sdept = '计算机系'
OR Sdept = '信息系')
AND Sage >= 20
例26.将学生按年龄的升序排序。 SELECT * FROM Student ORDER BY Sage
例27.查询选修了c02号课程的学生的学号及其成绩,查询结果按成绩降序排列。 SELECT Sno, Grade FROM SC
WHERE Cno='c02' ORDER BY Grade DESC
例28.查询全体学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。
SELECT * FROM Student
ORDER BY Sdept, Sage DESC
例29.统计学生总人数。
SELECT COUNT(*) FROM Student
例30.统计选修了课程的学生的人数。 SELECT COUNT (DISTINCT Sno) FROM SC
例31.统计9512101号学生的考试总成绩之和。 SELECT COUNT(*) AS 选课门数,SUM(Grade) AS 总成绩 FROM SC
WHERE Sno = ‘9512101’
COUNT(*) 数个数,数选课表每个同学的选课记录就是选课门数
钟阳 整理
例32.计算C01号课程学生的考试平均成绩。 SELECT AVG(Grade) AS 平均成绩 FROM SC WHERE Cno='C01'
例33.查询C01号课程的考试最高分和最低分。
SELECT MAX(Grade) AS 最高分, MIN(Grade) AS 最低分 FROM SC WHERE Cno='C01'
例34.查询“9512101”学生的选课门数、已考试课程门数以及考试最高分、最低分和平均分。
SELECT COUNT(*) AS 选课门数, COUNT(Grade) AS 考试门数, MAX(Grade) AS 最高分, MIN(Grade) AS 最低分, AVG(Grade) AS 平均分
FROM SC WHERE Sno = '9512101‘
例35.统计每门课程的选课人数,列出课程号和人数。 SELECT Cno as 课程号, COUNT(Sno) as 选课人数 FROM SC GROUP BY Cno
例36.查询每个学生的选课门数和平均成绩。 SELECT Sno as 学号, COUNT(*) as 选课门数, AVG(Grade) as 平均成绩 FROM SC GROUP BY Sno
例37.统计每个系的学生人数和平均年龄。 SELECT Sdept, COUNT(*) AS 学生人数, AVG(Sage) AS 平均年龄 FROM Student GROUP BY Sdept
例38. 带WHERE子句的分组。统计每个系的女生人数。 SELECT Sdept, Count(*) 女生人数 FROM Student WHERE Ssex = '女' GROUP BY Sdept
例39. 按多列分组。统计每个系的男生人数和女生人数,以及男生的最大年龄和女生的最大年龄。结果按系名的升序排序。 SELECT Sdept, Ssex, Count(*) 人数, Max(Sage) 最大年龄 FROM Student
GROUP BY Sdept, Ssex ORDER BY Sdept
例40. 查询选修了3门以上课程的学生的学号和选课门数。 SELECT Sno, Count(*) 选课门数 FROM SC GROUP BY Sno
HAVING COUNT(*) > 3
钟阳 整理
例41.查询修课门数等于或大于4的学生的平均成绩和选课门数。 SELECT Sno, AVG(Grade) 平均成绩, COUNT(*) 修课门数 FROM SC
GROUP BY Sno
HAVING COUNT(*) >= 4
例42. 查询计算机系和信息管理系的学生人数。 SELECT Sdept, COUNT(*) FROM Student GROUP BY Sdept
HAVING Sdept IN ( '计算机系', '信息管理系')
例43. 查询每个系年龄小于等于20岁的学生人数。 SELECT Sdept, COUNT (*) FROM Student WHERE Sage <= 20 GROUP BY Sdept
例44.查询每个学生及其选课的详细信息。 SELECT * FROM Student INNER JOIN SC ON Student.Sno = SC.Sno
例46.查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。 SELECT Sname, Cno, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno WHERE Sdept = '计算机系'
例47. 查询信息系修了“计算机文化学”课程的学生信息,要求列出学生姓名、课程名和成绩。
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 = '计算机文化学'
例48.查询所有修了VB课程的学生的修课情况,要求列出学生姓名和所在系。 SELECT Sname, Sdept FROM Student S JOIN SC ON S.Sno = SC. Sno
JOIN Course C ON C.Cno = SC.cno WHERE Cname = 'VB'
例49.有分组的多表连接查询。统计每个系的学生考试平均成绩。 SELECT Sdept, AVG(grade) as AverageGrade FROM student S
JOIN SC ON S.Sno = SC.Sno GROUP BY Sdept
钟阳 整理
例50.有分组和行选择条件的多表连接查询。统计计算机系每门课程的选课人数、平均成绩、最高成绩和最低成绩。 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
例51. 查询与刘晨在同一个系学习的学生的姓名和所在的系。 SELECT S2.Sname, S2.Sdept
FROM Student S1 JOIN Student S2 ON S1.Sdept = S2.Sdept
WHERE S1.Sname = '刘晨' AND S2.Sname != '刘晨'
例52.查询与“操作系统”学分相同的课程的课程名和学分。 SELECT C1.Cname, C1.Credit FROM Course C1 JOIN Course C2 ON C1.Credit = C2. Credit
WHERE C2.Cname = '操作系统'
例53. 查询学生的修课情况,包括修了课程的学生和没有修课的学生。 SELECT Student.Sno, Sname, Cno, Grade FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno
例54. 查询哪些课程没有人选,列出其课程名。 SELECT Cname
FROM Course C LEFT JOIN SC ON C.Cno = SC.Cno WHERE SC.Cno IS NULL
例55. 查询计算机系没有选课的学生,列出学生姓名和性别。 SELECT Sname,Sdept,Cno,grade FROM Student S LEFT JOIN SC ON S.Sno = SC.Sno
WHERE Sdept = '计算机系'
例56. 统计计算机系每个学生的选课门数,包括没有选课的学生,结果按选课门数递减排序。
SELECT S.Sno AS 学号,
COUNT(SC.Cno) AS 选课门数 FROM Student S LEFT JOIN SC ON S.Sno = SC.Sno
WHERE Sdept = '计算机系' GROUP BY S.Sno
ORDER BY COUNT(SC.Cno) DESC AND SC.Sno IS NULL