1. 一、设计表
  2. 1、设计表
  3.  
  4. 查询语句之前先设计四张表:studentteachercoursescore
  5.  
  6. studentsid(学号)、sname(姓名)、sage(年龄)、ssex(性别)
  7.  
  8. teachertid(老师编号)、tname(老师名字)
  9.  
  10. coursecid(课程序号)、cname(课程名字)、tid(代课老师id
  11.  
  12. scoresid(学生id)、cid(课程id)、score(成绩)
  13.  
  14. 2、找表关系
  15.  
  16. 可以看到四张表之间是有联系的

  1. 二、查询语句实线
  2. 1、查询(“001”课程比“002”课程成绩高)的所有的学生的学号。
  3.  
  4. 思路:先找出上过001课程的学生,再找出上过002课程的学生,再找出两门课都上过且001002成绩高的学生。所以这里将SELECT sid,score FROM score WHERE cid='001'SELECT sid,score FROM score WHERE cid='002'的结果集作为查询对象
  5.  
  6. SELECT a.sid AS '学号'
  7. FROM (SELECT sid,score FROM score WHERE cid='001')AS a,
  8. (SELECT sid,score FROM score WHERE cid='002')AS b
  9. WHERE a.sid=b.sid AND a.score>b.score;
  10. 2、查询平均成绩大于等于60分的同学的学号和平均成绩
  11.  
  12. 思路:此处需要注意不加group by的话,没有分组,聚合函数只会以score表的数据计算,所以avgscore)只有一个结果,但是sid却有多个。所以此处应该使用group by,这样的话,avg(score)计算的是分组后每个组的平均成绩
  13.  
  14. SELECT sid,avg(score)
  15. FROM score
  16. GROUP BY sid HAVING AVG(score)>=60;
  17. 3、查询所有同学的学号、姓名、选课数、总成绩
  18.  
  19. 思路:一般应该是能够将要查询的内容都联系在一起的情况下查询尽可能少的表
  20.  
  21. SELECT s.sid '学号',sname '姓名',COUNT(score) '选课数',AVG( score) '平均成绩'
  22. FROM student s,score WHERE s.sid=score.sid GROUP BY s.sid;
  23. 4、查询姓“李”的老师的个数
  24. SELECT count(tname) FROM teacher WHERE tname LIKE "李_%" ;
  25. 5、查询没学过“叶平”老师的课程的同学的学号、姓名
  26.  
  27. Not In:不在范围内
  28.  
  29. SELECT sid,sname
  30. FROM student
  31. WHERE sid NOT IN(SELECT score.sid FROM teacher,course,score where course.tid=teacher.tid AND teacher.tname='叶平' AND course.cid=score.cid);
  32. 6、查询所有有挂科的同学的学号和姓名
  33.  
  34. SELECT s.sid '学号',sname '姓名'
  35. FROM student s,score o
  36. where s.sid=o.sid AND score<60 GROUP BY sname;
  37. 7、查询至少一门课程与学生学号为“2”的同学所学课程相同的学生学号和姓名
  38.  
  39. SELECT s.sid,s.sname
  40. FROM student s,score o
  41. WHERE s.sid=o.sid AND o.cid IN (SELECT cid FROM score WHERE sid=2) AND s.sid<>2 GROUP BY s.sid;
  42. 8、统计列印各个科目的成绩,各个科目按分数段 课程ID,课程名称,【100-85】,【85-70】,【70-60】,【60-0
  43.  
  44. SELECT course.cid '课程id',course.cname '课程名称',SUM(CASE WHEN score.score>=85 AND score.score<=100 THEN 1 ELSE 0 END) '100~85',
  45. SUM(CASE WHEN score.score>=70 AND score.score<85 THEN 1 ELSE 0 END) '85~70',SUM(CASE WHEN score.score>=60 AND score.score<70 THEN 1 ELSE 0 END) '70~60',
  46. SUM(CASE WHEN score.score>0 AND score.score<60 THEN 1 ELSE 0 END) '60~0'
  47. FROM course,score WHERE course.cid=score.cid GROUP BY course.cid;
  48. 9、查询每门课程被选修的学生数
  49.  
  50. SELECT course.cid,COUNT(score.cid)
  51. FROM course,score
  52. WHERE course.cid=score.cid GROUP BY course.cid;
  53. 10、查询出只选修了一门课程的学生的学号、姓名
  54.  
  55. SELECT student.sid '学号',student.sname '姓名'
  56. FROM student,score
  57. WHERE student.sid=score.sid GROUP BY student.sid HAVING COUNT(cid)=1;
  58. 11、查询男生、女生的总人数
  59.  
  60. (SELECT student.ssex '性别',COUNT(ssex)
  61. FROM student WHERE ssex='男')
  62. UNION
  63. (SELECT student.ssex '性别',COUNT(ssex)
  64. FROM student WHERE ssex='女');
  65. 12、姓李的师生名单
  66.  
  67. (SELECT sname FROM student where sname LIKE "李_%")
  68. UNION
  69. (SELECT tname FROM teacher where tname LIKE "李_%")
  70. 13、查询出同名同姓的学生名单,并统计人数
  71.  
  72. SELECT sname ,COUNT(sname)
  73. FROM student
  74. GROUP BY sname HAVING COUNT(*)>1;
  75. 14、查询每门课程的平均成绩,结果按平均成绩升序排列,如果平均成绩相同,就按课程号降序排列。
  76.  
  77. SELECT cid,AVG( score)
  78. FROM score
  79. GROUP BY cid ORDER BY AVG(score) ASC,cid DESC;
  80. 15、查询平均成绩大于85的所有的学生的学号、姓名、平均成绩
  81.  
  82. SELECT student.sid,student.sname,AVG( score)
  83. FROM student,score
  84. WHERE student.sid=score.sid GROUP BY student.sid HAVING AVG( score)>85;
  85. 16、查询课程名称为“离散数学”,且分数低于60分的学生姓名和分数
  86.  
  87. SELECT sname,score
  88. FROM student,score,course
  89. where student.sid=score.sid AND score.cid=course.cid AND cname="离散数学" HAVING score<60;
  90. 17、查询所有学生的选课情况:包括学号、课程号、姓名、课程名。
  91.  
  92. SELECT student.sid '学号',course.cid '课程号',sname '姓名',cname '课程名'
  93. FROM student,course,score
  94.  
  95. select * from teacher left JOIN course on teacher.tid=course.tid;
  96. WHERE student.sid=score.sid AND score.cid=course.cid;
  97.  
  98. 18、查询有学生不及格的课程的课程号和课程名,并按照课程号从大到小排列
  99.  
  100. SELECT course.cid '课程号',cname
  101. FROM score,course
  102. where course.cid=score.cid AND score<60 GROUP BY course.cid ORDER BY score.cid desc;
  103. 19、查询课程号为003且成绩在80分以上的学生的学号、姓名
  104.  
  105. SELECT student.sid '学号',sname
  106. FROM student,score
  107. WHERE student.sid=score.sid AND cid='003' AND score>80;
  108. 20、查询各个老师相应的学生总人数
  109.  
  110. SELECT course.tid,count(DISTINCT(sid))
  111. FROM score,course
  112. WHERE course.cid=score.cid GROUP BY course.tid;
  113. 21、查询不同课程成绩相同的学生的学号、课程号、学生成绩
  114.  
  115. SELECT a.sid,a.cid,a.score
  116. FROM score a,score b
  117. WHERE a.sid=b.sid AND a.score=b.score AND a.cid<>b.cid;
  118. 22、查询选“001”课程的所有学生的平均分(去掉一个最高分,去掉一个最低分)
  119.  
  120. SELECT ((SUM(score)-MIN(score)-MAX(score))/(COUNT(score)-2)) '平均成绩'
  121. FROM score
  122. WHERE cid='001';
  123. 23、左连接版本
  124.  
  125. select * from teacher left JOIN course on teacher.tid=course.tid;
  126. 24、右连接版本
  127.  
  128. select *from course right JOIN teacher on teacher.tid=course.tid;

  

MySql查询语句的使用实例的更多相关文章

  1. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  2. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  3. MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)

    在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:

  4. mysql查询语句,通过limit来限制查询的行数。

    mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...

  5. MYSQL查询语句大全集锦

    MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> C ...

  6. mysql查询语句集

    1. mysql 查询出某字段的值不为空的语句 1.不为空 select * from table where id <> ""; select * from tabl ...

  7. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  8. Mysql查询语句中字符型字段不区分大小写解决方法

    项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...

  9. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

随机推荐

  1. 牛客国庆集训派对Day_1~3

    Day_1 A.Tobaku Mokushiroku Kaiji 题目描述 Kaiji正在与另外一人玩石头剪刀布.双方各有一些代表石头.剪刀.布的卡牌,每局两人各出一张卡牌,根据卡牌的内容决定这一局的 ...

  2. vs2010 坑爹的BUG

    以前用VS2005的时候,就遇到过一些很奇怪的BUG,比如始终报错,然后把项目文件删除,重新创建一个项目文件,就好了. 今天用VS2010测试程序时,又发现一个坑爹的BUG,这绝对不是我的错! sta ...

  3. 18.5.2动态代理和AOP

    ----此处是JDK动态代理----package d18_5_2; public interface IDog { void info(); void run(); } package d18_5_ ...

  4. mysql索引命中规则

    转于:https://blog.csdn.net/claram/article/details/77574600 首先明确:为什么要用联合索引? 对于查询语句“SELECT E.* FROM E WH ...

  5. spring在非容器管理的类里获取bean

    package com.qmtt.tools; import org.springframework.beans.BeansException; import org.springframework. ...

  6. Git之master ->! [rejected] master (non-fast-forward)

    出现这个情况可能是在克隆项目的时候强制关闭或者是在pull的时候强制关闭 运行命令:git pull --rebase origin master 然后就可以 git push origin mast ...

  7. Cognos添加关联字段

    (这是另一个表)

  8. 原生js的容易忽略的相似点(一)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. SAP云平台架构概述

    在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他云产品.这些云产品方案可以分为公有云和私有云两种. SAP公有云解决方案见下图最右侧,比较著名的有SAP SuccessFac ...

  10. 关于websocket的代码,实现发送信息和监听信息(前端 后端(node.js))

    文件结构 node.js代码 // 需要HTTP 模块来启动服务器和Socket.IOvar http= require('http');var fs = require('fs');// 在8080 ...