zoukankan      html  css  js  c++  java
  • MySQL查询(下)

    存在以下四个数据库表
    学生表:student1(sid,sname) Sid学号,sname学生姓名
    教师表:teacher(tid,tname) tid教师编号,tname教师名字
    课程表:course(cid,cname,tid) cid课程编号,cname课程姓名,tid教师编号
    成绩表:cj(sid,cid,score) sid学号,cid选修课程编号,score 成绩

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

      查询:select  字段1,字段2[*]  from  表名

    SELECT student1.sid,student1.sname,count(cj.cid),SUM(cj.score) 
    FROM student1,cj 
    WHERE student1.sid=cj.sid 
    GROUP BY cj.sid,student1.sname

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

    max() 求最大
    min() 求最小值
    avg() 求平均值
    sum() 求和
    count()求个数

    select sid,SUM(cj.score)/COUNT(cj.cid) from cj 
    group by sid
    having  max(score)>60;

    --3、查询选修的课程不少于3门的每个学生的编号,学生姓名

    select student1.sid,student1.sname,COUNT(cj.cid) from student1,cj
    WHERE student1.sid=cj.sid 
    group by student1.sid,student1.sname
    having  COUNT(cj.cid)>=3;

    --4、查询选修了'数学'并且及格的姓名,课程名,成绩

    and : 结果集同时满足所有条件
    or: 结果集只要满足其中一个条件即可

    not  非  一般情况跟 not  like, not between..and   not  in 一起使用

    SELECT student1.sname,cj.cid,cj.score FROM student1,cj
    WHERE student1.sid=cj.sid 
    GROUP BY student1.sname,cj.cid,cj.score
    HAVING     cj.cid=2 AND cj.score>60;

    --5、查询每个学生至少选修了2门看起来像'语'的课程的学生姓名。

    like 看起来像 模糊查询 当知晓某个字段部分值

    匹配符:% 匹配0或者多个任意字符

    SELECT student1.sname,course.cname,cj.cid,COUNT(cj.cid) FROM student1,course,cj
    WHERE student1.sid=cj.sid AND course.cid=cj.cid AND course.cname LIKE '%语'
    GROUP BY student1.sname,course.cname,cj.cid
    HAVING COUNT(cj.cid)>2;

    --6、查询不及格的课程超过2门的学生编号和姓名

    SELECT student1.sid,student1.sname,cj.score FROM student1,cj
    WHERE student1.sid=cj.sid
    HAVING score<60;

    --7、查询选择的课程中"语文"的成绩比"数学"的成绩高的学生编号和姓名

    单行子查询:子查询返回单行多列或者单行多列数据  跟> < = >= <=一起使用

    SELECT * FROM 表名 WHERE 字段名=(
    查询1)
    SELECT student1.sid,student1.sname 
    FROM (student1, 
    (SELECT * FROM cj WHERE cid=(
    SELECT cid FROM course WHERE cname='语文'))AS temp1,
    (SELECT * FROM cj WHERE cid=(
    SELECT cid FROM course WHERE cname='数学'))AS temp2)
    WHERE student1.sid = temp1.sid 
    AND temp1.sid = temp2.sid 
    AND temp1.score>temp2.score;

    --8、查询没有选择看起来像“老”的老师的课程的学生编号和姓名

    not like

    distinct 去重复
    select distinct 字段名 from 表名

    as 临时表名/集名

    -- SELECT student1.sid,student1.sname
    -- FROM (student1,
    (SELECT * FROM cj WHERE cid in(
    -- SELECT cid FROM course WHERE course.cname NOT LIKE '%老'))AS temp3)
    -- WHERE student1.sid=temp3.sid                 #sid和sname会有重复数据
    
    -- select distinct 字段名 from 表名       #去重
    
    SELECT DISTINCT student1.sid,student1.sname
    FROM (student1,
    (SELECT * FROM cj WHERE cid in(
    SELECT cid FROM course WHERE course.cname NOT LIKE '%老'))AS temp3)
    WHERE student1.sid=temp3.sid

    --9、查询选修了课程的学员人数

    
    
    -- SELECT COUNT(sid) FROM (
    -- SELECT * FROM student1 WHERE sid  in(SELECT sid FROM cj))
    SELECT COUNT(sid) FROM (
    SELECT * FROM student1 WHERE sid  in(SELECT sid FROM cj))as temp4;
    
    #Err] 1248 - Every derived table must have its own alias   每个派生出来的表都必须有一个自己的别名,所以在其后面加上 as temp4即可
  • 相关阅读:
    atitit.颜色查找 根据范围 图像处理 inRange
    Atitit 跨平台的系统截图解决方案
    Atitit java opencv 捕获视频
    路法Atiti
    Atitit 获取本机图像设备视频设备列表 设备检索列表解决方案
    Atitit 团队工具链体系打造提升团队效率的一些通用软件 attilax总结
    Atitit gui控件定位解决方案
    Atitit html5.1 新特性attilax总结
    Atitti 模板匹配 List matchTemplate(
    利用CRebar和CDialogBar编写可浮动的dialog类型的工具栏
  • 原文地址:https://www.cnblogs.com/cy-zjs/p/13454136.html
Copyright © 2011-2022 走看看