SQL Server分组查询和连接查询

使用GROUP BY进行分组查询

语法:

SELECT 列名1,列名2
FROM 表名
GROUP BY 分组的列名

如:查询每个年级的人数

SELECT COUNT(*) AS 年级人数,Grade
FROM Students
GROUP BY Grade                --可以使用排序语句
ORDER BY COUNT(*) DESC   --以每个年级的人数进行逆序排序

多列分组查询

如:查询每个学期的男生女生人数

SELECT COUNT(*) AS 人数,Grade AS 年级,Sex AS 性别
FROM Students
GROUP BY Grade,Sex
ORDER BY Grade           --以年级顺序排序

使用HAVING子句进行分组筛选

由于WHERE子句只能对没有分组前的数据进行筛选,所以分组后的数据必须使用HAVING子句来筛选

如: 查询年级总人数超过300人的年级

SELECT COUNT(*) AS 人数,Grade AS 年级
FROM Students
GROUP BY Grade
HAVING COUNT(*)>300

注: HAVING和WHERE子句可以在同一个SELECT语句中一起使用

顺序: WHERE – GROUP BY – HAVING

连接查询

在多个表中查询数据就要使用到连接查询了。

常用的连接查询有: 内连接和外连接

内连接查询

1.在WHERE子句中指定连接条件

如:查询学生姓名和成绩

SELECT Students.SName, Score.CourseID,Score.Score
FROM Students,Score
WHERE Students.SCode = Score.StudentID
2.在FROM子句中使用INNER JOIN···ON

–INNER JOIN 用来连接两个表 INNER可以省略
ON 用来设置条件

扫描二维码关注公众号,回复: 12660689 查看本文章
SELECT 表名1.列名,表名2.列名···
FROM1
INNER JOIN2
ON 条件
SELECT ST.SName, SC.CourseID,SC.Score
FROM Students AS ST
INNER JOIN Score AS SC
ON ST.SCode = SC.StudentsID

外连接查询

在外连接查询中参与连接的表有主从之分,以主表的每行数据匹配从表的数据列,将符合连接条件的数据直接返回到结果集中;对于不符合连接条件的列,将被填上NULL值后再返回到结果集中。

1.左外连接查询
SELECT 表名1.列名,表名2.列名···
FROM 主表(左表)
LEFT OUTER JOIN 从表
ON 主表.通用列=从表.通用列

如:查询学生的姓名、班级、成绩

以Students为主表(左表)中的数据逐条匹配表Score中的数据

1.匹配:返回到结果集

2.无匹配:赋NULL值后返回到结果集

SELECT S.SName,C.CourseID,C.Score 
FROM Students AS S
LEFT OUTER JOIN Score AS C
ON S.Score = C.StudentID
2.右外连接查询

右外连接与左外连接相似

SELECT 表名1.列名,表名2.列名···
FROM 从表
RIGHT OUTER JOIN 主表(右表)
ON 主表.通用列=从表.通用列

猜你喜欢

转载自blog.csdn.net/aclts/article/details/114311023