使用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 用来设置条件
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 主表.通用列=从表.通用列