多表查询

断了今生、忘了曾经 提交于 2019-12-01 22:13:14

一、聚合函数与分组

分组需要在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:还可以包含比较运算符:= 、 !=、> 、<等

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!