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