分组查询和连接查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组查询和连接查询相关的知识,希望对你有一定的参考价值。

“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 主表.通用列=从表.通用列

  */

以上是关于分组查询和连接查询的主要内容,如果未能解决你的问题,请参考以下文章

连接查询和分组查询

连接查询和分组查询

连接查询和分组查询

连接查询和分组查询

sql分组查询和连接查询

分组查询和连接查询