连接查询和分组查询

时间:2022-09-16 12:43:09

一.使用group by 进行分组查询

语法:

Select 列名

From  表名

Group by 列名

1.查询男女学生的人数格式多少

分析:

首先按照性别进行分组:group by SSex

其次对每个组进行总数的统计,用到聚合函数count()。

完整的T-SQL语句如下:

Select count(*) AS 人数,SSex from Students

Group by SSex

2.查询每个科目的平均分,并且按照由低到高的顺序排列显示

 Select CourseID,avg(Score) AS 课程平均成绩

From Score

Group by CourseID

Order by avg(Score) DESC

二.多列分组查询

Select count(*) AS 人数,SGrade AS 年级, SSex AS 性别

From Students

Group by SGrade,SSex

Order by SGrade

二.使用having 子句进行分组筛选

1.查询年纪总人数超过15的年级

Select count(*) AS 人数,SGrade AS 年级

From Students

Group by SGrade

Having count(*)>15

2.查询平均分及格的课程信息

Select CourseID AS 课程编号,avg(Score) AS 课程平均成绩

From students

Group by GourseID

Having avg(score)>=60

Having ,where,order by 和group by句子可以在同一个select语句中哟起使用,使用顺序如下

Where→group by → having →order by

3.查询每门课程及格总人数和及格学生的平均分

Select count(*) AS 人数,avg(Score) AS 平均分, CrouseID AS 课程

From SCore

Where Score>=60

Group by CrouseID

1.查询每门课程及格人数和及格平均分在80分以上的记录

Select count(*) AS 人数,avg(Score) AS 平均分,CrouseID AS 课程

From Score

Where Score>=60

Group by CrouseID

Having avg(Score)>80

Order by CrouseID

四.多表连接查询

1.多表连接查询的分类

多表连接查询实际上是通过各个表之间共同列的关联性来查询数据的,他是关系数据库查询最主要的特征。

常用的连接:内链接,外连接

A.内链接

内链接是最典型,最常用的连接查询,它根据表*同的列来进行匹配,特别是两个表存在主外建关系时通常会使用到内链接查询

B.外连接

外连接是至少返回一个表中的所有记录,根据匹配条件有选择性地返回另一张表的记录。外连接可以是左外连接,有外链接

2.内链接查询

内链接查询通常会使用向“=”或“<>”等比较运算符来判断两列数据值是否相等

内链接使用inner join 、、、on关键字或where子句来进行表之间的关联。内链接查询可以通过两种方式实现

1.where子句中指定连接条件

   例如:查询学生姓名和成绩的T-SQL如下

Select Student、Sname,Score、CourseID,Score、Score

From Student,Score

Where Students.Scode=Score.StudentID

2.from子句中使用insert join 、、、on

上面查询也可一通过这种方式来实现

Select s.Sname,c.courseID ,c.Score

From Students AS s

Inner join Score AS c on(s.Score=c.StudentID)

在上面的内链接查询中:

A:insner join 用来连接两个表

B:inner 可以省略

C:on用来设置条件

D:AS指定表的“别名”,如果查询的别名在用到两个或多个表中不重复,则对这一列的引用不必用表名来限定

五、外连接查询

与内部连接相对的方式称为外部链接。在外部联接中参与联

接的表有主从之分,以主表的每行数据匹配从表的数据列,江都和联接条件的数据直接返回到结果集中;对那些不符合连接条件的列,将被填上NULL值(空值)后在返回到结果集中

1.左外连接查询

左外连接的结果集包括left join 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行

左外连接使用left join 、、、on 或 left outer join 、、、on 关键字来进行表之间的关联

例如 :要统计所有学生的考试情况,要求显示所参加考试学生的每次考试分数,没有参加考试的学生也要显示出来。这时候,以学生信息表为主表(有时也叫做左表),学生成绩表为从表的做外连接查询如下:

Select s.sname,c.CourseID,c.Score

From Students AS S

Left outer join Score AS C on S.Scode=C.studentID

2.右外联接查询

右外联接查询与左外联接查询类似,只不过要包含右表中所有匹配的行

右外联接使用right join 、、、on或right outer join 、、、ou 关键字来进行之间的关联

例如:在某数据库中,存在书=书籍表Titles 和出版商表

Publishers之间的右外联接将包含所有的出版商,在Titles 中没有书名的(很久没出书了)也会被列出

Select  Titles.Titles_Id,Titles.Titles,Publishers.Pub_name

From Titles

Right outer join Publishers on Titles.Pub_id=Publishers.Pub_id