使用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.列名···
FROM 表1
INNER JOIN 表2
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 主表.通用列=从表.通用列