• 连接查询和分组查询


    一、分组查询:用于统计时经常使用分组查询

    1、group by分组

    01.例如查询每个年级的总人数

    --一旦通过group by分组,那么我们只能获取组相关的信息,而不能获取组中成员的信息

    --在select后只能跟聚合函数和group by后面的列,其他列不允许

    1 select gradeid as 年级编号,COUNT(studentno) as 总人数
    2 from student
    3 group by gradeid

    聚合函数:

    sum()--count()--max() min()--avg()

    2、多列分组

    01.每个年级的男生总人数,,以及女生总人数

    1 select gradeid as  年级编号,gender as 性别,COUNT(studentno) as 总人数
    2 from student
    3 group by GradeId,Gender
    4 order by GradeId,Gender

    3、Having的使用

    01.如何查询每门课程的平均分和执行顺序

    1 select SubjectId as 课程编号,AVG(studentresult) as 平均分  --05.投影结果
    2 from Result                          --01。定位到表
    3 where SubjectId<3  --,              --02.分组前第一道过滤
    4 group by SubjectId                   --03.分组
    5 having COUNT(studentno)>3            --04.分组后第二道过滤
    6 order by 课程编号 desc               --06.最后排序

    02获取总人数超过3人的年级编号及人数

    1 select gradeid as 年级编号,COUNT(studentno) as 总人数
    2 from student
    3 group by GradeId
    4 having COUNT(studentno)>3

    注意:

    having是对分组后的数据进行第二次筛选或者过滤,也就是说没有group by就没having

    where之后不能有聚合函数

    二、连接查询

     

    连接分三种:内连接,外连接,交叉连接

    1、内联结

    --A和B两张表,A和B必须有公共字段

    --输出每个学员的姓名和成绩

    --实现方式二:where

    1 select studentname as 姓名,studentresult as 成绩,subjectname as 科目,Gradename  as 年级
    2 from student,Result,Subject,Grade
    3 where student.StudentNo=Result.StudentNo
    4 and Result.SubjectId=Subject.SubjectId
    5 and student.GradeId=Grade.GradeId

    --实现方式一:inner join on

    1 select studentname as 姓名,studentresult as 成绩,subjectname as 科目
    2 from Result inner join student
    3 on student.StudentNo=Result.StudentNo
    4 inner join Subject
    5 on Result.SubjectId=Subject.SubjectId

    2、外联结

    --外连接特点

    --对于左外连接:左边的表叫主表,查询结果会显示左表和右表中公共字段相匹配的

    --结果(内连接)外,还会将左表中在右表中找不到匹配项的记录用null值填充

    --检索所有学员的成绩,如果某个学员没有参加考试,课程及成绩用NULL值代替

    1 select studentName,studentresult,subjectname
    2 from student inner join result 
    3 on student.studentNo=result.studentNo
    4 inner join subject 
    5 on result.subjectid=subject.subjectid
    6 where subjectname='走进Java编程世界'

     

  • 相关阅读:
    [C#.net]获取文本文件的编码,自动区分GB2312和UTF8
    [C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应
    [C#.Net]Window服务调用外部程序
    [Bat]UNC路径不支持的2种解决方法
    [c#.net]未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件
    精读比特币论文
    动态添加Redis密码认证
    扫码登录的安全性分析
    Cookie与Passport安全
    Http压测工具wrk使用指南
  • 原文地址:https://www.cnblogs.com/yejiaojiao/p/4943041.html
Copyright © 2020-2023  润新知