• 分组查询和连接查询


    “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

    SELECT列表中只能包含:

    1.被分组的列

    2.位每个分组返回一个值的表达式,如聚合函数

      按照年级分组

      SELECT  GradeId,count(*)  AS  人数

      FROM  student

      GROUP  BY  GradeId

      --案例1:统计每学期男女同学的人数

    --按照学期分组

    --按照性别分组

      SELECT  COUNT(*) AS 人数,GradeId AS 学期,Gender AS 性别

      From Student

      GROUP BY GradeId,Gender

      ORDER BY GradeId

    --说明:可以按照多列分组,列名使用逗号隔开

    --案例2:如何过得总人数超过15人的年级

      SELECT COUNT(*) AS 总人数,GradeId AS 年级

      FROM Student

      Group by Gradeid

      Having COUNT(*)>4

    --说明:where 列名条件  Having 聚合函数条件,Having一般和Group by连用,位置固定

      WHERE与HAVING对比

      WHERE子句:

    用来筛选FROM子句中指定的操作所产生的行

      GROUP BY子句:

    用来分组 WHERE 子句的输出

      HAVING子句:

    用来从分组的结果中筛选行

    ---案例1:统计平均分大于60分 的课程号和平均分

      SELECT SubjectNO AS 课程号,AVG(SubjectResult) AS 平均分

      From Result

      Where SubjectResult>=60

    常用的表连接查询

      1.内连接(INNER JOIN)

      2.外连接

       2.1左外连接(LEFT JOIN)

       2.2右外连接(RIGHT JOIN)

    3.内连接

    内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行

    --案例:使用内连接完成 查询学员姓名,科目号和分数

    --表连接: 主键列=外键列

      SELECT s.studentName AS 姓名,SubjectNo as 科目号,StudentResult AS 分数

      FROM Student AS s,Result AS R

      WHERE s.StudentNo=r.Result

    /*表连接:

     格式:SELECT 表2.列1,表2.列2,表1.列名2

           FROM 表1 AS 别名,表2 AS 别名

           WHERE 表1.主键列=表2.外键列

    */
    --使用内连接方式完成

        SELECT s.StudentName AS 姓名,SubjectNo as 科目号,StudentResult AS 分数

        FROM Student AS s

        INNER JOIN result AS r

        ON s.StudentNO=r.Result

    /*

        SELECT 表2.列名1,表2.列名2,表1.列名3

        FROM 表1 AS 别名

        INNER JOIN 表2

        ON 表1.主键列=表2.外键列

    */

    4.外连接

     4.1.左外连接

      --左外连接

      --查询所有学生的考试成绩和姓名,科目号

      --方法1:

        SELECT StudentName AS 姓名,SubjectNo AS 科目号,StudentResult AS 成绩

        FROM Student

        left ourer join Result

        on student.studentNo=result.studentNo

      --方法2:

        SELECT StudentName AS 姓名,SubjectNo AS 科目号,StudentResult AS 成绩

        FROM Result

        left ourer join Student

        on student.studentNo=result.studentNo


      主表(左表)Student中的数据逐条匹配表Result中的数据

      1.匹配,返回到结果集

      2.无匹配,NULL值返回到结果集

      /*

       SELECT 

       FROM 主表

       LEFT OUTER JOIN 从表

       ON 主表.通用列=从表.通用列

      */

  • 相关阅读:
    分页控件(后台拼接html方式)
    精子发生过程
    FSH 促卵泡激素
    LH 黄体生成素
    linux常用命令
    [C#]使用RabbitMQ模拟抽奖系统的例子
    自己写的一个关于Linq to Entity 动态查询的例子
    [C#]记一次解析XML转对象的笔记
    初次使用C#中的yield
    OI回忆录
  • 原文地址:https://www.cnblogs.com/wxl941549541/p/7745891.html
Copyright © 2020-2023  润新知