【MySQL】近2万字,138张图解,我终于把mysql总结完整了,建议收藏( 九 )
?可以对 job 表中员工薪水进行统计 , 选出总共的薪水、最大薪水、最小薪水
看起来 where 和 having 意思差不多 , 不过它们用法不一样 , where 是使用在统计之前 , 对统计前的记录进行过滤 , having 是用在统计之后 , 是对聚合之后的结果进行过滤 。 也就是说 where 永远用在 having 之前 , 我们应该先对筛选的记录进行过滤 , 然后再对分组的记录进行过滤 。
?
select sum(salary) from job;
select max(salary)min(salary) from job;
比如我们要统计 job 表中人员的数量
select count(1) from job;
统计完成后的结果如下
我们可以按照 job 表中的年龄来进行对应的统计
select agecount(1) from job group by age;
既要统计各年龄段的人数 , 又要统计总人数
select agecount(1) from job group by age with rollup;
在此基础上进行分组 , 统计数量大于 1 的记录
select agecount(1) from job group by age with rollup having count(1) > 1;
表连接表连接一直是笔者比较痛苦的地方 , 曾经因为一个表连接挂了面试 , 现在来认真撸一遍 。
表连接一般体现在表之间的关系上 。 当需要同时显示多个表中的字段时 , 就可以用表连接来实现 。
为了演示表连接的功能 , 我们为 job 表加一个 type 字段表示工作类型 , 增加一个 job_type 表表示具体的工作种类 , 如下所示
下面开始我们的演示
查询出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作类型
select job.namejob_type.name from jobjob_type where job.type = job_type.type;
上面这种连接使用的是内连接 , 除此之外 , 还有外连接 。 那么它们之间的区别是啥呢?
?外连接分为两种
内连接:选出两张表中互相匹配的记录;
外连接:不仅选出匹配的记录 , 也会选出不匹配的记录;
?
- 左外连接:筛选出包含左表的记录并且右表没有和它匹配的记录
- 右外连接:筛选出包含右表的记录甚至左表没有和它匹配的记录
下面我们进行左外连接查询:查询出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作类型
select job.namejob_type.name from job left join job_type on job.type = job_type.type;
查询出来的结果如下
可以看出 cxuan06 也被查询出来了 , 而 cxuan06 他没有具体的工作类型 。
使用右外连接查询
select job.namejob_type.name from job right join job_type on job.type = job_type.type;
可以看出 , job 表中并没有 waiter 和 manager 的角色 , 但是也被查询出来了 。
子查询有一些情况 , 我们需要的查询条件是另一个 SQL 语句的查询结果 , 这种查询方式就是子查询 , 子查询有一些关键字比如 「in、not in、=、!=、exists、not exists」 等 , 例如我们可以通过子查询查询出每个人的工作类型
- 产业气象站|“不敢自诩为MySql专家,岂能错过这本神书”,MySql领域经典之作
- 「MySQL」很多人在安装数据库时,都遇到过这个问题
- Java架构师Saber|90%MySQL问题全解,技术老兵十年专攻MySQL:编写了763页核心总结
- 中国IDC圈|具备自动扩容等超高性能,华为云MySQL混合SSD盘实例发布
- MySQL@中国首富又换人! 新首富比马云多283亿, 拼多多创始人成第三
- #MySQL#RabbitMQ 的使用场景,安装,爬坑必备。