1.分组介绍:用group by 结合合计函数,根据一个或多列对结果集进行分组
2.格式:
select 列名1,聚合函数(计算的列名)
from 表名
group by 列名1
3.分组操作:
求各个班的总分数
分析:
1.要显示的列名是class_id
select class_id
2.要计算的列是语文+英语+数学
select class_id,sum(语文+英语+数学)
3.分组是要分班级
select class_id,sum(语文+英语+数学)
from student
group by class_id
4.分组条件:having
1.通常和group by一起使用,是分组的条件,类似于where,只不过where后面不能加聚合函数,having可以
2.格式:
select 列名,聚合函数
from 表名
group by 列名
having 条件
例子:显示各个学号,总成绩小于600的学生总成绩 成绩表
SELECT 学号,SUM(成绩) FROM 成绩表
GROUP BY 学号
HAVING SUM(成绩)<600;
例子:求总成绩大于1300的班级 student表
select class_id,sum(语文+英语+数学)
from student
group by class_id
having sum(语文+英语+数学)>1300
排序(重点)
1.order by语句用于对指定的结果集进行排序
2.order by的默认排序是升序
3.如果要降序加上desc
4.格式:
select * from 表名 order by 列名 desc; --desc如果不写,默认是升序,如写了就是降序
5.操作
1.student表,以数学成绩排序,显示学生的信息
select *from student order by 数学
2.student表,以学生的总成绩排序,显示学生的信息
select 姓名,语文+英语+数学 from student order by 语文+英语+数学
1.表连接:在多个表中获取数据,这时要连接表
2.内连接:只有两个表中匹配到的数据才会有查询结果
1.where:用来连接表
格式:
select 表名1.列名,表名2.列名 from 表1,表2
where 表1.列1=表2.列1
显示学号,姓名,性别,籍贯,成绩
select 学生信息.学号,学生信息.姓名,学生信息.性别,学生信息.籍贯,成绩表.成绩
from 学生信息,`成绩表`
where 学生信息.学号=成绩表.学号
连接操作时遵守的原则
1.select 子句列表中,每个目标列前都要加上基表名称
2.from 子句应包括所有使用的基表
3.where 子句应定义一个连接
注意:连接时,最核心的是找到表与表之间能关联的列,这个关联的列,列名可以不一致,但是数据和数据类型要一致
2.用 inner join on来连接
格式:select 表1.列,表2.列 from 表1 inner join 表2
on 表1.列=表2.列
注意:如果显示的列是唯一的,那么可以不写基表
3.给表取别名
格式:
select 别名1.列,别名1.列,别名2.列
from 表1 别名1,表2 别名2
where 别1.列1=别2.列
显示学生的姓名,性别,籍贯,班级编号,年级,人数 -- 要给表取别名
select s.姓名,s.性别,s.籍贯,s.班级编号,b.年级,b.人数
from 学生信息 s,班级信息 b --注意,别名不取数字,要取有意义的字符
where s.班级编号=b.班级编号
4.用join on来连接表,可以分为等值连接和非等值连接
1.等值连接,就是条件连接是等号
格式:elect 表1.列,表2.列 from 表1 inner join 表2
on 表1.列=表2.列
2.非等值连接,就是条件不是等号
格式:elect 表1.列,表2.列 from 表1 inner join 表2
on 表1.列>表2.列
5.表连接后面可以添加条件
格式一:select 表1.列,表1.列,表2.列
from 表1,表2
where 表1.列=表2.列
and 条件
and 条件
格式二:
select 表1.列,表2.列
from 表1 inner join 表2
on 表1.列=表2.列
and 条件
and 条件
格式三:
select 表1.列,表2.列
from 表1 inner join 表2
on 表1.列=表2.列
where 条件
6.针对多表(>2)的表进行连接
1.where
格式:
select 表1.列,表2.列,表3.列
from 表1,表2,表3
where 表1.列=表2.列 and 表2.列=表3.列 and ...
2.inner join on
select 表1.列,表2.列,表3.列
from 表1 inner join 表2
on 表1.列=表2.列 inner join 表3
on 表2.列=表3.列 ...