目录
🍋聚合查询
🍓sum
🍓avg
🍓max
🍓min
🍓结合用
🍋分组查询
🍓内连接:
🍆实例:
🍓外连接:
🍆右外链接
🍆总结:
聚合查询
聚合查询是进行行与行之间的运算
其中使用sum,avg,max,min函数时,参数必须是数字,否则结果没意义。
接下来我们用一张exam_result成绩表来向大家介绍。
count
注意的是,如果当id这一列的值有一个为null,此时使用count函数返回的结果不包括这一行。
可以看到结果仍然为7。。
sum
如果当chinese这一列的值有一个为null,此时使用sum函数返回的结果也不包括这一行。
此时结果仍为524.
avg
同样,当某列的数据为null时,avg函数会跳过这一行的数据。
结果仍为221.1429.
max
min
结合用
当然这些函数可以在一个sql语句中使用
分组查询
我们先创建一个员工表。有id(主键)、name(姓名)、role(职位)、salary(薪水)
注意:在使用分组查询时,select 后面指定的列要么是聚合函数,要么是group by 后面指定的 列, 否则没有意义!!!
分组查询搭配查询条件
使用where条件:
where 条件是在分组前进行条件筛选。
此时就是在按照职位分组前先将沙悟净的数据筛除后,再将剩下的数据进行分组查询进而求出平均薪资。
使用having条件:
having是在分组后进行的条件筛选。
此时就是先按照职位进行分组之后,再通过having筛除老板这一职位的数据。
联合查询(多表查询)
联合查询使用的是笛卡尔积,也就是将多张表进行一个排列组合,得到一张更大的表,行数为多张表的行数之积,列数为多张表的列数之和。
需要注意的是,笛卡尔积也是以一种低效的操作,如果表数据过大,可能导致带宽吃满导致电脑卡死。
内连接:
首先我们先创建几张表,班级表,学生表,课程表,成绩表。
其中根据我们篇四中讲的实体间关系,我们可以看出在设计表的时候,班级表和学生表之间是一对多的关系。学生表和课程表之间是多对多的关系,所以我们设计了第三张表,(score)成绩表来同步管理我们的学生表和课程表。
实例:
首先根据我们上面讲的五个步骤来。
然后我们根据这些步骤来写:
最终我们就可以得到结果。
外连接:
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。
左外连接:
我们可以看到,此时使用左外链接和使用内链接所得到的结果都是一样的,但是当我们修改一下成绩表中的数据。
此时我们再使用外连接。
右外链接
跟左外连接一样,当没修改score表中数据时,外连接和内连接的所得到的结果一样 。修改score表中的数据后。
总结:
当两张表的数据是一一对应的,也就是(第一个表的每个记录在第二个表里都有体现,第二个表的每个记录在第一个表也都有体现) ,此时内连接和外连接的查询结果一样。