简单查询
(1) 查询所有学生的基本信息、所有课程的基本信息和所有学生的成绩信息(用三条SQL语句)。
SELECT * FROM student;
SELECT * FROM sc;
SELECT * FROM course;
(2) 查询所有学生的学号、姓名、性别和出生日期。
SELECT sno 学号,sname 姓名,ssex 性别,sbirthday 出生日期
FROM student;
(3) 查询所有课程的课程名称。
SELECT DISTINCT cname
FROM course;
(4) 查询前10门课程的课号及课程名称。
SELECT cno 课号,cname 课程名称
FROM course LIMIT 10;
(5) 查询所有学生的姓名及年龄。
SELECT sname 姓名,YEAR(CURDATE())-YEAR(sbirthday) 年龄
FROM student;
(6) 查询所有年龄大于18岁的女生的学号和姓名。
SELECT sname 姓名,sno 学号
FROM student
WHERE YEAR(CURDATE())-YEAR(sbirthday)>18 AND ssex='女';
(7) 查询所有男生的信息。
SELECT *
FROM student
WHERE ssex='男';
(8) 查询所有任课教师的姓名和所在系别。
SELECT tname,tdept
FROM teacher;
(9) 查询“电子商务”专业的学生姓名、性别和出生日期。
SELECT sname 姓名,ssex 性别,sbirthday 出生日期
FROM student
WHERE speciality='电子商务';
(10) 查询Student表中的所有系名。
SELECT DISTINCT sdept
FROM student;
(11) 查询“C01”课程的开课学期。
SELECT cterm
FROM teaching
WHERE cno='C01';
(12) 查询成绩在80~90分之间的学生学号及课号。
SELECT sno,cno
FROM sc
WHERE degree BETWEEN 80 AND 90;
(13) 查询在1970年1月1日之前出生的男教师信息。
SELECT *
FROM teacher
WHERE Tsex='男'
AND Tbirthday < '1970-01-01';
(14) 输出有成绩的学生学号。
SELECT sno
FROM sc
WHERE degree IS NOT NULL;
(15) 查询所有姓“刘”的学生信息。
SELECT *
FROM student
WHERE sname LIKE '%刘%';
(16) 查询生源地不是山东省的学生信息。
SELECT *
FROM student
WHERE saddress NOT LIKE '%山东省%';
(17) 查询成绩为79分、89分或99分的记录。
SELECT *
FROM sc
WHERE degree = 79 OR degree=89 OR degree=99;
(18) 查询名字中第二个字是“小”字的男生的学生姓名和地址。
SELECT sname,saddress
FROM student
WHERE sname LIKE '_小%';
(19) 查询名称以“计算机”开头的课程名称。
SELECT cname
FROM course
WHERE cname LIKE '^计算机';
(20) 查询计算机工程系和软件工程系的学生信息。
SELECT *
FROM student
WHERE sdept='计算机工程系' OR sdept='软件工程系';
分组与排序
1、统计有学生选修的课程的门数
SELECT COUNT(DISTINCT cno)
#from course;
FROM sc;
2、计算"C01"课程的平均成绩
SELECT AVG(degree)
FROM sc
WHERE cno='C01';
3、查询选修了"C03"课程的学生的学号及其成绩,查询结果按分数降序排列
SELECT sno,degree
FROM sc
WHERE cno='C03'
ORDER BY degree DESC;
4、查询各个课程号及相应的选课人数
SELECT cno,COUNT(*) 选课人数
FROM sc
GROUP BY cno;
5、统计每门课程的选课人数和最高分
SELECT cno 课程号,COUNT(*) 选课人数,MAX(degree) AS 最高分
FROM sc
GROUP BY cno;
6、统计每个学生的选课门数和考试总成绩,并按选课门数降序排列
SELECT sno,COUNT(*) 选课门数,SUM(degree) 总成绩
FROM sc
GROUP BY sno
ORDER BY COUNT(*) DESC;
7、查询选修了3门以上课程的学生学号
SELECT sno
FROM sc
GROUP BY sno
HAVING COUNT(*)>3;
8、查询成绩不及格的学生学号及课程号,并按成绩降序排列
SELECT sno,cno
FROM sc
WHERE degree<60
GROUP BY sno
ORDER BY degree DESC;
9、查询至少选修一门课程的学生学号
SELECT sno
FROM sc
GROUP BY sno
HAVING COUNT(*)>=1;
10、统计输出各系学生的人数
SELECT sdept,COUNT(*)
FROM student
GROUP BY sdept;
11、统计各系的男、女生人数
SELECT sdept,ssex,COUNT(*)
FROM student
GROUP BY sdept,ssex;
12、统计各班级的学生人数
SELECT bno,COUNT(*)
FROM student
GROUP BY bno;
13、统计各班的男、女生人数
SELECT bno,ssex,COUNT(*)
FROM student
GROUP BY bno,ssex;
14、统计各系的老师人数,并按人数降序排列
SELECT tdept,COUNT(*)
FROM teacher
GROUP BY tdept
ORDER BY COUNT(*) DESC;
15、统计不及格人数超过10的课程号
SELECT cno 课程号,COUNT(*) 选修人数
FROM sc
GROUP BY cno
HAVING COUNT(*)>10;
16、查询软件工程系的男生信息,查询结果按出生日期升序排序,出生日期相同的按地址降序排序
SELECT *
FROM student
WHERE sdept='软件系' AND ssex='男'
ORDER BY sbirthday ASC, saddress DESC;
多表查询
#(1)查询计算机工程系女生的学生学号、姓名及考试成绩:SELECT A.sno 学号,sname 姓名,degree 成绩
SELECT A.sno 学号,A.sname 姓名,B.degree 考试成绩
FROM student A,sc B
WHERE A.sno=B.sno AND ssex='女' AND sdept='计算机工程系';
#(2)查询“自己”所选课程的名称、成绩。
SELECT sname 姓名,cno 课程,degree 成绩
FROM student A,sc B
WHERE A.sno=B.sno AND sname='吴兵';
#(3)查询“李新”教师所授课程的课程名称。
SELECT tname 姓名,cname 课程
FROM teacher A,course B,teaching C
WHERE A.tno=C.tno AND B.cno=C.cno AND tname='李新';
#(4)查询女教师所授课程的课程号及课程名称:
SELECT tname 姓名,cname 课程,B.cno 课程号
FROM teacher A,course B,teaching C
WHERE A.tno=C.tno AND B.cno=C.cno AND tsex='女';
#(5)查询至少选修了一门课程的女生姓名,
SELECT sname
FROM student A,sc B
WHERE A.sno=B.sno AND ssex='女'
GROUP BY A.sno
HAVING COUNT(cno)>=1;
#(6)查询姓“王”的学生所学的课称名称。
SELECT sname 姓名,cname 课程
FROM student A,course B,sc C
WHERE A.sno=C.sno AND B.cno=C.cno AND sname LIKE '%王%';
#(7)查询选修“数据库”课程且成绩在80-90分的学生学号及成绩
SELECT sno 学号,degree 成绩
FROM sc A,course B
WHERE A.cno=B.cno AND B.cname LIKE '%数据库%'
HAVING degree BETWEEN 80 AND 90;
#(8)查询课程成绩及格的男生的学生信息、课程号与成绩。
SELECT A.*,cno 课程号,degree 成绩
FROM student A,sc B
WHERE A.sno=B.sno AND degree>60 AND ssex='男';
#(9)查询选修“C04”课程的学生的平均年龄。
SELECT AVG(YEAR(CURDATE())-YEAR(sbirthday)) 平均年龄
FROM student a,sc b
WHERE a.sno=b.sno AND cno='c04';
#(10)查询选修课程名为“数学”的学生学号和姓名。
SELECT A.sno 学号,sname 姓名
FROM student A,sc B,course C
WHERE A.sno=B.sno AND B.cno=C.cno AND cname LIKE '%数学';
#(11)查询“钱军”教师任课的课程号、选修其课程的学生的学号和和成绩。
SELECT B.cno 课程号,cname 课程名,sno 学号,degree 成绩
FROM sc A,course B,teacher C,teaching D
WHERE A.cno=B.cno AND B.cno=D.cno AND C.tno=D.tno
AND tname='钱军';
#(12)查询在第3学期所开课程的课程名称及学生的成绩。
SELECT degree,cname
FROM teaching a,sc b,course c
WHERE a.cno=b.cno AND b.cno=c.cno
AND cterm='3'
GROUP BY sno;
#(13)查询“C02”课程不及格的学生信息。
SELECT *
FROM sc a,student b
WHERE a.sno=b.sno AND cno='C02'
HAVING degree<60;
#(14)查询信息工程系成绩在90分以上的学生姓名、性别和课程名称。
SELECT sname 姓名,ssex 性别,cname 课程名称
FROM sc a,student b,course c
WHERE a.sno=b.sno AND a.cno=c.cno
AND sdept='信息工程系'
AND degree>90;
#(15)查询同时选修了“C04”和“C02”课程的学生姓名和成绩。
SELECT sname 姓名,b.degree 成绩,c.degree 成绩
FROM student a,sc b,sc c
WHERE a.sno=b.sno AND b.sno=c.sno
AND b.cno='C04' AND c.cno='C02'
GROUP BY sname;
嵌套:
#(1)查询“李勇”同学所选课程的成绩。
SELECT degree
FROM sc
WHERE EXISTS(SELECT cno
FROM student
WHERE student.sno=sc.sno AND sname='李勇');
#(2)查询“李新”教师所授课程的课程名称。
SELECT cname
FROM course a
WHERE EXISTS(
SELECT b.cno
FROM teaching b,teacher c
WHERE b.tno=c.tno AND b.cno=a.cno
AND tname='李新'
);
#(3)查询女教师所授课程的课程号及课程名称。
SELECT a.cno,cname
FROM course a
WHERE EXISTS(
SELECT cno
FROM teacher b,teaching c
WHERE b.tno=c.tno AND c. cno=a.cno
AND tsex='女'
);
#(4)查询姓“王”的学生所学的课程名称。
SELECT cname
FROM course a
WHERE EXISTS(
SELECT c.cno
FROM student b,sc c
WHERE a.cno=c.cno AND b.sno=c.sno
AND sname LIKE '王%'
);
#(5)查询“C02”课程不及格的学生信息。
SELECT *
FROM student
WHERE sno IN(
SELECT sno
FROM sc
WHERE cno='c02'
AND degree<60);
#(6)查询选修“数据库”课程且成绩在80-90分的学生学号及成绩。
SELECT sno,degree
FROM sc a
WHERE EXISTS(
SELECT cno
FROM course b
WHERE a.cno=b.cno
AND cname='数据库' AND degree BETWEEN 80 AND 90
);
#(7)查询选修“C04”课程的的学生平均年龄,
SELECT AVG(YEAR(CURDATE())-YEAR(sbirthday)) 平均年龄
FROM student a
WHERE EXISTS(
SELECT a.sno
FROM sc b
WHERE a.sno=b.sno AND cno='c04'
);
#(8)查询选修课程名为“数学”的学生学号和姓名。
SELECT sno,sname
FROM student a
WHERE EXISTS(
SELECT b.cno
FROM sc b,course c
WHERE b.cno=c.cno AND a.sno=b.sno
AND cname LIKE '%数学%'
);
#(9)查询“钱军”教师任课的课程号、选修其课程的学生的学号和成绩。
SELECT sno,degree
FROM sc
WHERE cno=(
SELECT cno
FROM teaching
WHERE tno=(
SELECT tno
FROM teacher
WHERE tname='钱军'
)
);
#(10)查询在第3学期所开课程的课程名称及学生的成绩。
SELECT cno,degree
FROM sc
WHERE cno=ANY(
SELECT cno
FROM teaching
WHERE cterm='3'
);
#(11)查询与“自己”同一个系的学生姓名。
SELECT sname
FROM student
WHERE sdept=(
SELECT sdept
FROM student
WHERE sname='吴兵'
)AND sname<>'吴兵';
#(12)查询学号比“刘晨”学生的大,而出生日期比她的小的学生姓名。
SELECT sname
FROM student
WHERE (sno>(
SELECT sno
FROM student
WHERE sname='刘晨'
))AND(sbirthday>(
SELECT sbirthday
FROM student
WHERE sname='刘晨'
)
);
#(13查询出生日期大于所有女生出生日期的男生的姓名及系别。
SELECT sname,sdept
FROM student
WHERE (sbirthday>ALL(
SELECT sbirthday
FROM student
WHERE ssex='女'
))AND ssex='男';
#(14)查询成绩比该课程平均成绩高的学生的学号及成绩。
SELECT sno,degree
FROM sc
WHERE degree>=
(SELECT AVG(degree)
FROM sc
WHERE sc.cno=sc.cno
);
#(15)查询不讲授“C01"课的教师姓名。
SELECT tname
FROM teacher
WHERE EXISTS(
SELECT tno
FROM teaching
WHERE cno<>'c01'
);
#(16)查询没有选修“C02”课程的学生学号及姓名。
SELECT sno,sname
FROM student
WHERE sno IN(
SELECT sno
FROM sc
WHERE cno<>'c02'
);
#(17)查询选修了“数据库”课程的学生学号、姓名及系别。
SELECT sno,sname,sdept
FROM student
WHERE sno IN(
SELECT sno
FROM sc
WHERE cno=(
SELECT cno
FROM course
WHERE cname='数据库'
));