2、查询‘生物’课程比‘物理’课程成绩高的所有学生的学号

思路:

获取所有生物课程的人(学号,成绩)-临时表

获取所有物理课程的人(学号,成绩)-临时表

根据学号连接两个临时表:

学号 生物成绩 物理成绩

  1. SELECT A.student_id,sw,wl from
  2. (SELECT student_id,num as sw from score LEFT JOIN course on score.course_id=course.cid where course.cname='生物')as A
  3. LEFT JOIN
  4. (SELECT student_id,num as wl from score LEFT JOIN course on score.course_id=course.cid where course.cname='物理')as B
  5. on A.student_id =B.student_id where sw > if (ISNULL(wl),0,wl);

自己写了一段

  1. SELECT A.student_id,sw,wl from
  2. (SELECT student_id,num as sw from score where course_id=(SELECT cid from course WHERE cname='生物')) as A
  3. LEFT JOIN
  4. (SELECT student_id,num as wl from score where course_id=(SELECT cid from course WHERE cname='物理')) as B
  5. on A.student_id=B.student_id where sw > if (ISNULL(wl),0,wl)

3、查询平均成绩大于60分的同学的学号和平均成绩

思路:

根据学生分组,使用avg获取平均值,通过having对avg进行筛选

  1. select student_id,avg(num) from score group by student_id having avg(num) > 60

4、查询所有同学的学号、姓名、选课数、总成绩

  1. select score.student_id,student.sname,count(score.student_id),sum(score.num)
    from
    score left join student on score.student_id=student.sid group by score.student_id

5、查询姓‘李’的老师的个数

  1. select count(tid) from teacher where tname like '李%'

6、查询没学过‘叶平’老师课的同学的学号、姓名

思路:

先查询‘李平老师’老师教的所有课的ID

然后获取选了李平老师课的学生ID

最后从学生表中筛选

  1. select sid,sname from student where sid not in (
  2. select DISTINCT student_id from score where score.course_id in (
  3. select cid from course left join teacher on course.teacher_id = teacher.tid where tname = '李平老师'
  4. )
  5. )

7、查询学过‘001’并且也学过编号‘002’课程的同学的学号、姓名

思路:

先查到既选择001又选择002课程的所有同学

根据学生进行分组,如果学生数量等于2表示,两门均已选择

  1. select student_id,sname FROM
  2. (SELECT student_id,course_id from score where course_id =1 or course_id =2)as B
  3. LEFT JOIN
  4. student on B.student_id=student.sid GROUP BY student_id having count(student_id)>1

8、查询学过‘叶平’老师所教的所有课的同学的学号、姓名

  1. select sid,sname from student where sid in (
  2. select DISTINCT student_id from score where score.course_id in (
  3. select cid from course left join teacher on course.teacher_id = teacher.tid where tname = '李平老师'
  4. )
  5. )

9、查询课程编号‘002’的成绩比课程编号‘001’课程低的所有同学的学号、姓名

同第一题,把大于号改成小于号

  1. SELECT A.student_id,sw,wl from
  2. (SELECT student_id,num as sw from score LEFT JOIN course on score.course_id=course.cid where course.cname='生物')as A
  3. LEFT JOIN
  4. (SELECT student_id,num as wl from score LEFT JOIN course on score.course_id=course.cid where course.cname='物理')as B
  5. on A.student_id =B.student_id where sw < if (ISNULL(wl),0,wl)

我写了个更简单的

  1. SELECT A.student_id,one,two from
  2. (SELECT student_id,num as one FROM score where course_id=1)as A
  3. LEFT JOIN
  4. (SELECT student_id,num as two FROM score where course_id=2)as B
  5. on A.student_id =B.student_id where one < if (ISNULL(two),0,two);

10、查询有课程成绩小于60分的同学的学号、姓名

  1. SELECT sid,sname from student where sid in (SELECT DISTINCT student_id from score where num < 60 )

11、查询没学全所有课的同学的学号、姓名

思路:

在分数表中根据学生进行分组,获取每一个学生选课数量

如果数量==总课程数量,表示已经选择了所有课程

  1. select student_id,sname from score left join student on score.student_id =student.sid group by student_id having count(course_id) =(select count(1) from course)

12、查询至少有一门课与学号为‘001’的同学所学相同的同学的学号和姓名(没有理解)

思路:

获取001同学选择的所有课程

获取课程在其中的所有人以及所有课程

根据学生筛选,获取所有学生信息

再与学生表连接,获取姓名

  1. SELECT student_id,sname,count(course_id)
  2. from score LEFT JOIN student on score.student_id=student.sid
  3. where student_id!=1 and course_id in (SELECT course_id from score where student_id=1)GROUP BY student_id

13、查询至少学过学号为‘001’同学的所有课的其他同学学号和姓名(没有理解)

思路:

先找到和001的学过的所有人

然后个数=001所有学科   ==》》其他人可能选择的更多

  1. select student_id,sname, count(course_id)
  2. from score left join student on score.student_id = student.sid
  3. where student_id != 1 and course_id in (select course_id from score where student_id = 1) group by student_id having count(course_id) (select count(course_id) from score where student_id = 1)
14、查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名;
思路:      
个数相同
002学过的也学过
  1. select student_id,sname from score left join student on score.student_id = student.sid where student_id in (
  2. select student_id from score where student_id != 1 group by student_id HAVING count(course_id) = (select count(1) from score where student_id = 1)
  3. ) and course_id in (select course_id from score where student_id = 1) group by student_id HAVING count(course_id) = (select count(1) from score where student_id = 1)

15、删除学习‘李平’老师课的score表记录

  1. delete from score where course_id in(select cid from course left join teacher on course.teacher_id = teacher.tid where teacher.tname = '李平老师')

不用连表写了一次

  1. DELETE from score where course_id in (SELECT cid from course where teacher_id=(SELECT tid from teacher WHERE tname='李平老师'))

16、向sc表中插入一些记录,这些记录要求符合以下条件:没有上过编号‘002’课程的同学学号;插入'002'号课程的平均成绩

思路:

由于insert支持

insert into tb1(xx,xx) select x1,x2 from tb2;

所以,获取所有没上过002课的所有人,获取002的平均成绩

  1. insert into score(student_id,course_id,num)
  2. SELECT sid,2,(SELECT avg(num) from score where course_id=2)
  3. from student WHERE sid not in (SELECT student_id from score where course_id=2)

17、按平均成绩从低到高,显示所有学生的‘生物’、‘物理’、‘体育’三门的课程成绩,按如下形式显示:学生ID,生物,物理,体育,有效课程数,有效平均分(没有理解)

  1. select sc.student_id,
  2. (select num from score left join course on score.course_id = course.cid where course.cname = "生物" and score.student_id=sc.student_id) as sy,
  3. (select num from score left join course on score.course_id = course.cid where course.cname = "物理" and score.student_id=sc.student_id) as wl,
  4. (select num from score left join course on score.course_id = course.cid where course.cname = "体育" and score.student_id=sc.student_id) as ty,
  5. count(sc.course_id),
  6. avg(sc.num)
  7. from score as sc
  8. group by student_id desc

18、查询各科成绩最高和最低分:以如下形式显示:课程ID,最高分,最低分

  1. select course_id,MAX(num) as max_num,min(num) as min_num from score GROUP BY course_id;

19、按各科平均成绩从低到高和及格率的百分数从高到低顺序(没有理解)

思路:

case when .. then

  1. select course_id, avg(num) as avgnum,sum(case when score.num > 60 then 1 else 0 END)/count(1)*100 as percent from score group by course_id order by avgnum asc,percent desc;

20、课程平均分从高到低显示(现实任课老师)没有理解并且sql运行失败

  1. select avg(if(isnull(score.num),0,score.num)),teacher.tname from course
  2. left join score on course.cid = score.course_id
  3. left join teacher on course.teacher_id = teacher.tid
  4. group by score.course_id

mysql练习(待补充)的更多相关文章

  1. MySQL安全优化

    一.数据库相关 1. MySQL版本的选择 在正式生产环境中,建议使用5.6或以上系列的版本(5.7不建议,曾经用过这个版本,问题有点多). 2. 运行用户与端口的配置 2.1.确保MySQL运行用户 ...

  2. mysql存储引擎(待补充)

    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎 存储引擎说白了就是如何存取数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在 ...

  3. MYSQL手工注入(详细步骤)—— 待补充

    0x00 SQL注入的分类: (1)基于从服务器接收到的响应         ▲基于错误的 SQL 注入         ▲联合查询的类型         ▲堆查询注射         ▲SQL 盲注 ...

  4. 待补充 MySQL必知必会第29章--------数据库维护

    备份数据 由于MySQL数据库是基于磁盘的文件,普通的备份系统和里程就能备份MySQL的数据.但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是生效.

  5. mysql数据库常见问题修改(待补充)

    1.修改mysql最大连接数的方法:临时修改:1.使用命令show variables 来查看当前最大连接数 show variables like '%max_connections%'; 使用命令 ...

  6. MySQL运维相关工具汇总(待补充)

    1.orztop查看show full processlist http://hidba.org/?p=841 2.orzdba查看系统状态信息 http://code.taobao.org/p/or ...

  7. nodejs 访问mysql

    安装 $ npm install mysql 简介 这个一个mysql的nodejs版本的驱动,是用JavaScript来编写的.不需要编译 这儿有个例子来示范如何使用: var mysql = re ...

  8. 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)

    原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_ ...

  9. MySQL数据库如何解决大数据量存储问题

    利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开 ...

随机推荐

  1. Android 热修复使用Gradle Plugin1.5改造Nuwa插件

    随着谷歌的Gradle插件版本号的不断升级,Gradle插件如今最新的已经到了2.1.0-beta1,相应的依赖为com.android.tools.build:gradle:2.0.0-beta6, ...

  2. 最简单的基于FFmpeg的移动端样例附件:Android 自带播放器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  3. Ajax系列之中的一个:ajax旧貌换新颜

    什么是ajax? 什么是Ajax? Ajax就是Asynchronous +JavaScript+XML.中文翻译为:异步的javascript与XML,它是利用javascript语言和xml数据实 ...

  4. Centos7 搭建最新 Nexus3 Maven 私服

    Maven 介绍 Apache Maven 是一个创新的软件项目管理和综合工具.Maven 提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文 ...

  5. Ffmpeg音频转码 卡顿(MP2转AAC)

    最好经手一个小的功能将mp2实时流转成AAC并发布成rtmp音频流,本身不是很难的一个需求, 一个晚上就能将功能开发好.功能开发完毕后,找来一音频文件利用Ffmpeg命令将音视频文件推成 实时udp格 ...

  6. Vim使用个人心得

    个人最近在Windows上使用gVim 1.移动光标 h,j,k,l 键为左,下,上,右,方向键,控制光标移动,插入状态下不可用,插入状态下,按V键进入查看状态,可使用. 2.进入编辑模式:按 i 键 ...

  7. POJ 1654 area 解题

    Description You are going to compute the area of a special kind of polygon. One vertex of the polygo ...

  8. 在Ubuntu下编译FFmpeg

    第一步:准备编译环境 .tar.bz2 -2245/ ./configure --enable-static--enable-shared--prefix=/usr/localmakesudomake ...

  9. Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin

    前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...

  10. android--SDK Manager下载Connection to http://dl-ssl.google.com refused

    错误 Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connec ...