-- 新建学生表
CREATE TABLE student(
sno VARCHAR(20),
sname VARCHAR(10),
ssex VARCHAR(10),
sbirthday DATETIME,
class VARCHAR(20)
)
INSERT INTO student VALUES (108,'曾华','男',19770901,95033);
INSERT INTO student VALUES (105,'匡明','男',19751002,95031);
INSERT INTO student VALUES (107,'王丽','女',19760123,95033);
INSERT INTO student VALUES (101,'李军','男',19760220,95033);
INSERT INTO student VALUES (109,'王芳','女',19750210,95031);
INSERT INTO student VALUES (103,'陆君','男',19740603,95031);
-- 新建课程表
CREATE TABLE course (
cno VARCHAR(20),
cname VARCHAR(10),
tno VARCHAR(20)
)
INSERT INTO course VALUES( '3-205','计算机导论',825);
INSERT INTO course VALUES( '9-245','操作系统',804);
INSERT INTO course VALUES( '6-166','数字电路',856);
INSERT INTO course VALUES( '9-888','高等数学',831);
-- 新建成绩表
CREATE TABLE score(
sno VARCHAR(20),
cno VARCHAR(20),
degree DECIMAL(4,1)
)
INSERT INTO score VALUE (103,'3-245',86);
INSERT INTO score VALUE (105,'3-245',75);
INSERT INTO score VALUE (109,'3-245',68);
INSERT INTO score VALUE (103,'3-105',92);
INSERT INTO score VALUE (105,'3-105',88);
INSERT INTO score VALUE (109,'3-105',76);
INSERT INTO score VALUE (101,'3-105',64);
INSERT INTO score VALUE (107,'3-105',91);
INSERT INTO score VALUE (108,'3-105',78);
INSERT INTO score VALUE (101,'6-166',85);
INSERT INTO score VALUE (107,'6-166',79);
INSERT INTO score VALUE (108,'6-166',81);
-- 新建教师表
CREATE TABLE teacher (
tno VARCHAR(20),
tname VARCHAR(10),
tsex VARCHAR(20),
tbirthday DATETIME,
prof VARCHAR(20),
depart VARCHAR(20)
)
INSERT INTO teacher VALUE (804,'李诚','男',19581202,'副教授','计算机系');
INSERT INTO teacher VALUE (856,'张旭','男',19690312,'讲师','电子工程系');
INSERT INTO teacher VALUE (825,'王萍','女',19770814,'助教','计算机系');
INSERT INTO teacher VALUE (831,'刘冰','女',19770814,'助教','电子工程系');
-- 1查询Student表中的所有记录的Sname、Ssex和Class列
SELECT sname,ssex,class FROM student;
-- 2查询教师所有的单位即不重复的Depart列
SELECT DISTINCT depart FROM teacher;
-- 3查询Student表的所有记录
SELECT * FROM student;
-- 4查询Score表中成绩在60到80之间的所有记录
SELECT * FROM score WHERE degree>=60 AND degree<=80;
-- 5查询Score表中成绩为85,86或88的记录
SELECT * FROM score WHERE degree=85 OR degree=86 OR degree=88;
-- 6 查询Student表中“95031”班或性别为“女”的同学记录
SELECT * FROM student WHERE class=95031 OR ssex='女';
-- 7以Class降序查询Student表的所有记录
SELECT * FROM student ORDER BY class DESC;
-- 8以Cno升序、Degree降序查询Score表的所有记录
SELECT * FROM score ORDER BY cno ASC, degree DESC;
-- 9查询“95031”班的学生人数
SELECT COUNT(*) FROM student WHERE class=95031;
-- 10查询每门课的平均成绩
SELECT cno,AVG(degree) FROM score GROUP BY cno;
-- 11、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECT AVG(degree) FROM score WHERE cno LIKE '3%' GROUP BY cno HAVING COUNT(cno)>4
SELECT AVG(Degree) FROM score WHERE Cno IN
(SELECT Cno FROM score GROUP BY Cno HAVING COUNT(*)>5)
AND Cno LIKE '3%' GROUP BY Cno
SELECT AVG(Degree) FROM score WHERE Cno LIKE '3%'
GROUP BY Cno HAVING COUNT(*)>5
-- 12、查询分数大于70,小于90的Sno列。
SELECT sno AS '分数' FROM score WHERE degree BETWEEN 70 AND 90
-- 13、查询所有学生的Sname、Cno和Degree列。
SELECT sname,cno,degree FROM student JOIN score ON
student.Sno=score.Sno
-- 15、查询所有学生的Sname、Cname和Degree列。
SELECT * FROM student JOIN score ON
student.`sno`=score.`sno` JOIN course ON
score.`cno` = course.`cno`
-- 16、查询“95033”班学生的平均分。
SELECT AVG(degree) AS '平均分'FROM score
WHERE sno IN
(SELECT sno FROM student WHERE class='95033')
-- 17、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
SELECT sno AS '编号',sname AS '姓名',sbirthday AS '出生日期' FROM student
WHERE YEAR(student.`sbirthday`)=(SELECT YEAR(sbirthday)
FROM student WHERE sno='108')
-- 18、查询“张旭“教师任课的学生成绩(姓名)。
SELECT degree AS '分数'FROM score,teacher,course
WHERE teacher.tname='张旭' AND teacher.`tno`=course.`tno`
AND course.`cno`=score.`cno`
SELECT tno FROM teacher WHERE tname='张旭'
SELECT cno FROM course WHERE tno=856
SELECT sno,degree FROM score JOIN student
ON score.`sno` WHERE cno='6-116'
-- 19、查询考计算机导论的学生成绩
SELECT sno,cno,degree FROM score WHERE cno IN (SELECT cno FROM course WHERE tno IN (SELECT tno FROM teacher WHERE depart='计算机系'))
-- 20、查询李诚老师教的课程名称
-- 21、教高等数学的老师是哪个系的
-- 22、查询选修某课程的同学人数多于5人的教师姓名。
SELECT tname FROM teacher WHERE tno IN (selecet tno FROM course WHERE cno IN(SELECT cno FROM score GROUP BY cno HAVING COUNT(*)>5))
-- 23、查询95033班和95031班全体学生的记录。
SELECT * FROM Student WHERE Class IN('95031','95033')
-- 24、查询存在有85分以上成绩的课程Cno.
SELECT DISTINCT Cno FROM Score WHERE Degree > 85
-- 25、查询出“计算机系“教师所教课程的成绩表。
SELECT * FROM Score WHERE Cno IN(SELECT Cno FROM Course
WHERE Tno IN(SELECT Tno FROM Teacher WHERE depart = '计算机系'))
-- 26、 查询所有教师和同学的name、sex和birthday.
SELECT Sname,Ssex,Sbirthday FROM Student UNION
SELECT Tname,Tsex,Tbirthday FROM Teacher
-- 27、查询所有“女”教师和“女”同学的name、sex和birthday.
SELECT Sname,Ssex,Sbirthday FROM Student WHERE Ssex='女' UNION
SELECT Tname,Tsex,Tbirthday FROM Teacher WHERE Tsex='女'
-- 28、 查询所有任课教师的Tname和Depart.
SELECT tname,depart FROM teacher WHERE tname IN (SELECT DISTINCT tname FROM teacher,course,score
WHERE teacher.`tno`=course.`tno` AND course.cno=score.`cno`)
-- 29、查询所有未讲课的教师的Tname和Depart.
SELECT Tname,depart FROM Teacher WHERE Tno IN(SELECT Tno FROM Course
WHERE Cno NOT IN(SELECT Cno FROM Score))
-- 30、查询至少有2名男生的班号。
SELECT class AS '班级'班号 FROM student WHERE ssex='男' GROUP BY class HAVING COUNT(*)>1
-- 31、查询Student表中不姓“王”的同学记录。
SELECT * FROM student WHERE sname NOT LIKE (‘王%’)
-- 32、查询Student表中每个学生的姓名和年龄。
SELECT Sname,YEAR(NOW())-YEAR(Sbirthday) FROM Student
-- 33、查询Student表中最大和最小的Sbirthday日期值。
SELECT MAX(Sbirthday) FROM Student UNION SELECT MIN(Sbirthday) FROM Student
-- 34、以班号和年龄从大到小的顺序查询Student表中的全部记录。
SELECT * FROM Student ORDER BY Class DESC,Sbirthday
-- 35、查询“男”教师及其所上的课程。
SELECT * FROM Teacher JOIN Course ON Teacher.Tno = Course.Tno
WHERE Teacher.Tsex='男'
-- 36、查询最高分同学的Sno、Cno和Degree列。
SELECT * FROM Score WHERE Degree = (SELECT MAX(Degree) FROM Score )
-- 37、查询和“李军”同性别的所有同学的Sname.
SELECT Sname FROM Student WHERE Ssex = (SELECT Ssex FROM Student WHERE Sname='李军')
-- 38、查询和“李军”同性别并同班的同学Sname.
SELECT Sname FROM Student WHERE Ssex = (SELECT Ssex FROM Student WHERE Sname='李军')
AND Class=(SELECT Class FROM Student WHERE Sname = '李军')
-- 39、查询所有选修“计算机导论”课程的“男”同学的成绩表。
SELECT * FROM Score WHERE Sno IN(SELECT Sno FROM Student WHERE Ssex='男')
AND Cno IN(SELECT Cno FROM Course WHERE Cname='计算机导论')