mysql练习题-2016.12.16

>>>>>>>>>>

练习时间:2016.12.16

编辑时间:2016-12-20-->22:12:08

题:

涉及:多表查询、exists、count()、group by、order by

1.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语言完成表的创建以及数据的插入

#创建student

CREATE 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创建course

CREATE 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创建表SC

CREATE 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 sc

SELECT 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`))

(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`))

(注:个人所写,并不保证全部正确、写法最优,如有意见,欢迎指出)

>>>>>>>>>>

时间: 2024-10-06 15:04:08

mysql练习题-2016.12.16的相关文章

12.16~12.23工作日志

12.16~12.23工作日志 2016.12.16 1.cick事件调用的函数中加入touchmove等事件会发生事件穿透,详情(http://www.tuicool.com/articles/6NfaUnM) 移动设备的click事件有300ms延迟,用于判断是否双击 2.ios设备会有一个默认的css样式,如input按钮在电脑上默认为方形,而在iPhone上默认为圆形,清除ipone默认样式方法: Input{-webkit-appearance:none;} 3.border-radi

Linux(CentOS 7)+ Nginx(1.10.2)+ Mysql(5.7.16)+ PHP(7.0.12)完整环境搭建

首先安装Linux系统,我以虚拟机安装来做示例,先去下载 VitualBox,这是一款开源的虚拟机软件,https://www.virtualbox.org 官网地址.或者是VMware,www.vmware.com,不过这个软件是收费的.当然同时还要去下载一个Linux镜像,我下载是CentOS 7系统,https://www.centos.org/download 下载好了之后打开虚拟机,我用的是VMware,选择创建自定义虚拟机: 继续下一步: 点击完成. 看到这个界面后,点击CD/DVD

【读书笔记】2016.12.10 《构建高性能Web站点》

本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.10 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.1

Python/ MySQL练习题(一)

Python/ MySQL练习题(一) 2.查询"生物"课程比"物理"课程成绩高的所有学生的学号 1 SELECT 2 * 3 FROM 4 ( 5 SELECT 6 * 7 FROM 8 course 9 LEFT JOIN score ON score.course_id = course.cid 10 WHERE 11 course.cname = '生物' 12 ) AS A 13 INNER JOIN ( 14 SELECT 15 * 16 FROM 17

python/MySQL练习题(二)

python/MySQL练习题(二) 21.查询各科成绩前三名的记录:(不考虑成绩并列情况) 1 select score.sid,score.course_id,score.num,T.first_num,T.second_num from score left join 2 ( 3 select 4 sid, 5 (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1

ERROR 2003 (HY000): Can&#39;t connect to MySQL server on &#39;10.16.115.101&#39; (111)

ubuntu安装完mysql,使用apt-get命令安装的,默认是只允许本地访问的 [email protected]:~/software# mysql -uroot -p123456 -h10.16.115.101 -P3306 ERROR 2003 (HY000): Can't connect to MySQL server on '10.16.115.101' (111) 默认配置文件: 需要把bind-address注释掉 重启mysql服务 [email protected]:~/s

Linux安装mysql.8.0.12

1. linux安装mysql8.0.12,亲测可用. 以下是安装过程中出现的问题: 1 [[email protected] file]# systemctl start mysqld 2 Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe"

关于2016.12.12——T1的反思:凸包的意义与应用

2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度来判断. 这就是下切线(我自己瞎编的名字): 好像是对的啊: 然后我就保证必AC的希望,用这种写法交了,然后就只得了N=2的暴力分... 自以为是正解,却落得如此下场... 为什么?这样不对吗?借用学长的力量,果然被Hack掉了: 这种情况,圆心排序后,检测的顺序并不是圆上的切点的顺序,自然就会挂. 蓝瘦

rhel 7.0 配置centos yum源(2016/12/8),成功!

1.首先查看redhat 7.0系统本身所安装的那些yum 软件包: rpm -qa | grep yum #列出所有已安装的yum包 2.删除这些包: rpm -e *.rpm --nodeps #删除所有以前的yum包 3.下载新的yum rpm包:(2016/12/8 最新版本rpm,如果404 NOT FOUND错误,自己进去网址,换成最新的rpm包的名字) wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-3.4.3