多表查询

## 一、聚合函数与分组

分组需要在mysql的配置文件中sql_mode加入ONLY_FULL_GROUP_BY

max()求最大值
min()求最小值
avg()求平均值
sum() 求和
count() 求总个数
group_concat() 连接分组结果

#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组

# 每个部门有多少个员工
select post,count(id) from employee group by post;
# 每个部门的最高薪水
select post,max(salary) from employee group by post;
# 每个部门的最低薪水
select post,min(salary) from employee group by post;
# 每个部门的平均薪水
select post,avg(salary) from employee group by post;
# 每个部门的所有薪水
select post,sum(age) from employee group by post;

二、多表查询

#语法
SELECT 字段列表
    FROM 表1 INNER|LEFT|RIGHT JOIN 表2
    ON 表1.字段 = 表2.字段;
#分为左表和右表
#左表为多,右表为1;
#左为1表,右为2表

主要是笛卡尔积原理

1、内连接,只连接匹配的行,

select id from t1 inner t2 on t1.id=t2.id;

2、外连接之左连接,优先显示左表的全部信息,不管右表是否为空都会显示

select id from t1 left t2 on t1.id=t2.id;

3、外连接值右连接,优先显示右表的全部信息,不管左表对应的信息是否为空都会显示

select id from t1 right t2 on t1.id=t2.id;

4、全外连接,显示左边两个表全部记录 :直接记 union all

select * from t1 left join t2 on t1.id=t2.id union all select * from t1 right join t2 on t1.id=t2.id;

三、子查询

#1:子查询是将一个查询语句嵌套在另一个查询语句中,即:将一条sql语句查询的结果作为下一条查询语句的条件
#2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。
#3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
#4:还可以包含比较运算符:= 、 !=、> 、<等
posted @ 2019-10-22 11:19  tiwe  阅读(168)  评论(0编辑  收藏  举报