mysql查询

11 篇文章 0 订阅

涉及:多表查询、exists、count()、group by、order by1.1 关系模式 学生student; SNO:学号; SNAME:姓名; AGE:年龄 ; SEX:性别
在这里插入图片描述
课程course:CNO:课程代码,CNAME:课程名称,TEACHER:教师
在这里插入图片描述
学生成绩SC:SNO:学号,CNO:课程代码,SCORE:成绩
在这里插入图片描述
1.2 要求一 用SQL语言完成表的创建以及数据的插入。 1.3 要求二 用SQL语言完成如下要求: (1) 检索至少选修"程军"老师所授全部课程的学生姓名(SNAME);  (2) 检索"李强"同学不学课程的课程号(CNO); (3) 检索选修不少于3门课程的学生学号(SNO); (4) 检索选修全部课程的学生姓名(SNAME)。 (5) 检索不学"C语言"的学生信息  1.4 要求三 请用SQL语言完成如下查询: (1)查询“程军”老师所教授的所有课程; (2)查询“李强”同学所有课程的成绩; (3)查询课程名为“C语言”的平均成绩; (4)查询选修了所有课程的同学信息。  1.5 要求四 (1)检索王老师所授课程的课程号和课程名。 (2)检索年龄大于23岁的男学生的学号和姓名。 (3)检索至少选修王老师所授课程中一门课程的女学生姓名。 (4)检索李同学不学的课程的课程号。 (5)检索至少选修两门课程的学生学号。 (6)检索全部学生都选修的课程的课程号与课程名。 (7)检索选修课程包含王老师所授课的学生学号。 (8)统计有学生选修的课程门数。 (9)求选修K1课程的学生的平均年龄。 (10)求王老师所授课程的每门课程的学生平均成绩。 (11)统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果 按人数降序排列,若人数相同,按课程号升序排列。 (12)检索学号比李同学大,而年龄比他小的学生姓名。 (13)检索姓名以李打头的所有学生的姓名和年龄。 (14)在SC中检索成绩为空值的学生学号和课程号。 (15)求年龄大于女同学平均年龄的男学生姓名和年龄。 (16)求年龄大于所有女同学年龄的男学生姓名和年龄。>>>>>>>>>>答: ########1.2 要求一…用SQL语言完成表的创建以及数据的插入。#创建studentCREATE TABLE student(sno INT(10) COMMENT ‘学号’,sname VARCHAR(10) COMMENT ‘姓名’,age INT(3) COMMENT ‘年龄’,sex VARCHAR(1) COMMENT ‘性别’) #insert插入student数据INSERT INTO student(sno,sname,age,sex) VALUES(1,‘李强’,18,‘男’)INSERT INTO student(sno,sname,age,sex) VALUES(2,‘刘丽’,188,‘女’)INSERT INTO student(sno,sname,age,sex) VALUES(3,‘凤凰’,19,‘女’)INSERT INTO student(sno,sname,age,sex) VALUES(4,‘婕拉’,20,‘女’)INSERT INTO student(sno,sname,age,sex) VALUES(5,‘张友’,21,‘男’)INSERT INTO student(sno,sname,age,sex) VALUES(6,‘孙悟空’,500,‘男’) #create创建courseCREATE TABLE course(cno VARCHAR(10) COMMENT ‘课程代码’,cname VARCHAR(10) COMMENT ‘课程名称’,teacher VARCHAR(10) COMMENT ‘教师’) #insert插入course数据INSERT INTO course(cno,cname,teacher) VALUES(‘K1’,‘C语言’,‘王华’)INSERT INTO course(cno,cname,teacher) VALUES(‘K2’,‘C+语言’,‘薛哥’)INSERT INTO course(cno,cname,teacher) VALUES(‘K3’,‘C++语言’,‘薛哥’)INSERT INTO course(cno,cname,teacher) VALUES(‘K4’,‘java语言’,‘薛哥’)INSERT INTO course(cno,cname,teacher) VALUES(‘K5’,‘数据库原理’,‘程军’)INSERT INTO course(cno,cname,teacher) VALUES(‘K6’,‘linux语言’,‘薛哥’)INSERT INTO course(cno,cname,teacher) VALUES(‘K7’,‘PHP语言’,‘薛哥’)INSERT INTO course(cno,cname,teacher) VALUES(‘K8’,‘编译原理’,‘程军’) #create创建表SCCREATE TABLE sc(sno INT(10) COMMENT ‘学号’,cno VARCHAR(10) COMMENT ‘课程代码’,score INT(10) COMMENT ‘成绩’) #insert插入sc数据INSERT INTO sc(sno,cno,score) VALUES(1,‘K1’,83)INSERT INTO sc(sno,cno,score) VALUES(2,‘K1’,85)INSERT INTO sc(sno,cno,score) VALUES(5,‘K1’,92)INSERT INTO sc(sno,cno,score) VALUES(2,‘K5’,90)INSERT INTO sc(sno,cno,score) VALUES(5,‘K5’,84)INSERT INTO sc(sno,cno,score) VALUES(5,‘K8’,80) ########1.3 要求二…用SQL语言完成如下要求:(1) 检索至少选修"程军"老师所授全部课程的学生姓名(SNAME);#检索学生姓名SELECT sname FROM student  #检索选修 程军 课程的 课程代码SELECT cno FROM course WHERE teacher=‘程军’#检索选修课程的代码的学号SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE teacher=‘程军’)#结合SELECT sname FROM student WHERE sno IN (SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE teacher=‘程军’))##以上结果为错误的查询方法!正确结果如下(运用exists): SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE teacher = ‘程军’ AND NOT EXISTS(SELECT * FROM sc WHERE sno=student.sno AND cno=course.cno)) (2) 检索"李强"同学不学课程的课程号(CNO);SELECT cno FROM course WHERE NOT EXISTS(SELECT * FROM student WHERE sname = ‘李强’ AND EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno)) (2.2)查询所有学生所学的科目编号以及成绩SELECT st.sno,st.sname,cr.cname,sc.score,cr.teacher 
FROM student st,sc,course cr 
WHERE st.sno=sc.sno AND cr.cno = sc.cno(2.3)查询没有选修程军老师课程的学生姓名:SELECT * FROM student st WHERE NOT EXISTS(SELECT * FROM course cr WHERE teacher = ‘程军’ AND EXISTS(SELECT * FROM sc WHERE sc.cno=cr.cno AND sc.sno=st.sno))(2.4)找出李强老师学生SELECT * FROM student st,sc,course cr WHERE sname=‘李强’ AND sc.sno=st.sno AND sc.cno=cr.cno  (3) 检索选修不少于3门课程cno的学生学号(SNO);#检索学号select sno from scSELECT sno FROM sc GROUP BY sno  HAVING COUNT() >= 3 (4) 检索选修全部课程的学生姓名(SNAME)#错误写法:SELECT sname FROM student WHERE sno IN (SELECT sno FROM sc GROUP BY sno  HAVING COUNT() >= 3)#正确写法:SELECT sname FROM student WHERE NOT EXISTS (SELECT * FROM course  WHERE NOT EXISTS(SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno)) (5) 检索不学"C语言"的学生信息(因所有学生都有学习C语言,所以把C语言改为“编译原理”)#错误写法:SELECT * FROM student WHERE sno IN (SELECT sno FROM sc WHERE cno IN (SELECT cno FROM course WHERE cname <> ‘C语言’))#正确写法:SELECT * FROM student WHERE NOT EXISTS(SELECT * FROM course WHERE cname = ‘编译原理’ AND  EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))  #########1.4 要求三 请用SQL语言完成如下查询:(1)查询“程军”老师所教授的所有课程;SELECT cname FROM course WHERE teacher = ‘程军’ (2)查询“李强”同学所有课程的成绩;SELECT course.cname,sc.score FROM course,sc WHERE EXISTS(SELECT * FROM student WHERE sname = ‘李强’ AND EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))  GROUP BY course.cname (3)查询课程名为“C语言”的平均成绩;#C语言课程标号: select cno from course where cname = 'C语言’SELECT AVG(score) FROM sc WHERE cno = (SELECT cno FROM course WHERE cname = ‘C语言’) (4)查询选修了所有课程的同学信息。SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course  WHERE NOT EXISTS(SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))    ########1.5 要求四 (1)检索王华老师所授课程的课程号和课程名。 SELECT cno,cname FROM course WHERE teacher = ‘王华’ (2)检索年龄大于23岁的男学生的学号和姓名。 SELECT sno,sname FROM student WHERE age >= 23 AND sex = ‘男’ (3)检索至少选修王老师所授课程中一门课程的女学生姓名。 SELECT sname FROM student WHERE EXISTS (SELECT * FROM course WHERE teacher = ‘王华’ AND EXISTS (SELECT * FROM sc WHERE sno=student.sno AND cno=course.cno)) AND sex = ‘女’ (4)检索李强同学不学的课程的课程号。SELECT cno FROM course WHERE NOT EXISTS(SELECT * FROM student WHERE sname = ‘李强’ AND EXISTS (SELECT * FROM sc WHERE sno=student.sno AND cno=course.cno)) (5)检索至少选修两门课程的学生学号。SELECT sno FROM sc GROUP BY sno HAVING COUNT(*) >= 2 (6)检索全部学生都选修的课程的课程号与课程名。方式一:SELECT cno,cname FROM course WHERE NOT EXISTS(SELECT * FROM student WHERE NOT EXISTS(SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))方式二:SELECT cno,cname FROM course WHERE cno IN (SELECT cno FROM sc GROUP BY cno HAVING COUNT(sno) = (SELECT COUNT(sno) FROM student)) (7)检索选修课程包含王华老师所授课的学生学号。SELECT sno FROM student WHERE EXISTS(SELECT * FROM course WHERE teacher = ‘王华’ AND EXISTS(SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno)) (8)统计所有学生选修的课程门数。SELECT sname,sc.sno,COUNT(cno) FROM student,sc  WHERE  sc.sno=student.sno GROUP BY sno (9)求选修K1课程的学生的平均年龄。SELECT AVG(age) FROM student WHERE EXISTS (SELECT * FROM sc WHERE cno=‘k1’ AND sc.sno=student.sno) (10)求王华老师所授课程的每门课程的学生平均成绩。  SELECT sno,AVG(score) FROM sc  WHERE EXISTS (SELECT * FROM course WHERE teacher=‘程军’ AND sc.cno=course.cno ) GROUP BY cno(11)统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果 按人数降序排列,若人数相同,按课程号升序排列。SELECT COUNT(sno),cno FROM sc GROUP BY cno HAVING COUNT(sno)>=2 ORDER BY COUNT(sno) ASC (12)检索学号比李强同学大,而年龄比他小的学生姓名。 SELECT sname FROM student WHERE sno>(SELECT sno FROM student WHERE sname=‘李强’) AND age> (SELECT age FROM student WHERE sname=‘李强’) (13)检索姓名以李打头的所有学生的姓名和年龄。 SELECT sname,age FROM student WHERE sname LIKE ‘%李%’ (14)在SC中检索成绩为空值的学生学号和课程号。 SELECT sno,cno FROM student,course WHERE EXISTS (SELECT * FROM sc WHERE score is NULL AND sc.sno=student.sno AND sc.cno=course.cno) (15)求年龄大于女同学平均年龄的男学生姓名和年龄。SELECT sname,age FROM student WHERE sex = ‘男’ AND age >(SELECT AVG(age) FROM student WHERE sex = ‘女’) (16)求年龄大于所有女同学年龄的男学生姓名和年龄。SELECT sname,age FROM student WHERE age>(SELECT max(age) FROM student WHERE sex=‘女’) AND sex=‘男’>>>>>>>>>>>>>>>>>>>> 查询学号为1的学生 选修了的课程#方式一:SELECT * FROM course WHERE cno = (SELECT cno FROM sc WHERE sno=1)#方式二:SELECT * FROM course WHERE  EXISTS (SELECT * FROM student WHERE sno = 1 AND EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno)) 查询学号为1的学生 是否选修“程军”老师的课程SELECT * FROM course WHERE teacher = ‘程军’ AND EXISTS (SELECT * FROM student WHERE sno = 1 AND EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno)) 查询学号为1的学生 是否选修了“程军”老师的课程,如果没有选修,请输出该同学没有选修的课程信息SELECT * FROM course WHERE teacher = ‘程军’ AND NOT EXISTS (SELECT * FROM student WHERE sno = 1 AND EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno)) 查看选修了程军老师课程的学生姓名信息:SELECT * FROM student WHERE EXISTS (SELECT * FROM course WHERE teacher = ‘程军’ AND  EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))查看没有全部选修程军老师课程的学生信息SELECT * FROM student WHERE EXISTS (SELECT * FROM course WHERE teacher = ‘程军’ AND NOT EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))查看没有选修程军老师课程的学生姓名信息:SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE teacher = ‘程军’ AND EXISTS (SELECT * FROM sc WHERE sc.sno=student.sno AND sc.cno=course.cno))查看选修了程军老师所有课程的学生姓名信息:SELECT * FROM student WHERE NOT EXISTS (SELECT * FROM course WHERE teacher=‘程军’ AND NOT EXISTS(SELECT cno FROM sc WHERE sc.sno=student.sno AND course.cno=sc.cno))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值