💖✨MySQL一万字深度总结,基础+进阶(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。

1.单行处理机


1.1 什么是单行处理机?


  • 输入一行,输出一行。


1.2计算每个员工的年薪


select ename,(sal+comm) * 12 as yearsal from emp; // 错误写法

微信截图_20220608085038.png

使用ifnull函数处理:

select ename,(sal + ifnull(comm,0)) * 12 as yearsal from emp; // 正确写法

微信截图_20220608085048.png


重点: 所有数据库都是这样规定的,只要有NULL参与的运算结果一定是NULL。


1.3 ifnull() 空处理函数?


语法格式:

ifnull(可能为NULL的数据,被当做什么处理) : 属于单行处理函数。


1.4 将津贴中的 NULL 转换为 0


select ename,ifnull(comm,0) as comm from emp;

微信截图_20220608085100.png

2.分组查询 group by 和 having


  • group by : 按照某个字段或者某些字段进行分组。
  • having : 是对分组之后的字段再次过滤。


2.1找出每个岗位的最高薪资


select max(sal) from emp group by job;

微信截图_20220608085237.png

注意:

  • 分组函数一般都会和group by 联合使用。这也是为什么被称为分组函数的原因。
  • 并且任何一个分组函数(count,sum,max,min,avg)都是在group by语句执行结束之后才会执行的。
  • 当一条 sql 语句没有group by的话,整张表的数据会自成一组。


2.2多字段分组查询


select ename,max(sal),job from emp group by job;

微信截图_20220608085253.png

// 以上在 mysql当中,查询结果是有的,但是结果没有意义,在Oracle数据库当中会报错,语法错误。

重点: 记住一个规则,当一条语句中有 group by 的话,select后面只能跟分组函数和参与分组的字段。


2.3每个工作岗位的平均工资


select obj,avg(sal) from emp group by job;

微信截图_20220608085310.png

2.4多个字段联合起来一块分组,找出每个部门不同工作岗位的最高薪资。


select deptno,job,max(sal) from emp group by deptno,job;

微信截图_20220608085322.png

2.5 找出每个部门的最高薪资,要求显示薪资大于2900的数据

第一步: 找出每个部门的最高薪资

select deptno,max(sal) from emp group by deptno;

微信截图_20220608085503.png

第二步: 找出薪资大于2900 这种方式效率低

select deptno,max(sal) from emp group by deptno having max(sal) > 2900;

微信截图_20220608085520.png

完美方案:效率较高,要求显示薪资大于2900的数据。

select deptno,max(sal) from emp where sal > 2900 group by deptno;

微信截图_20220608085530.png

2.6 找出每个部门的平均薪资

第一步 : 找出每个部门的平均薪资

select deptno,avg(sal) from emp group by deptno;

微信截图_20220608085541.png

第二步 : 要求显示薪资大于2000的数据

select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

微信截图_20220608085649.png

// 错误,where后边不能使用分组函数,这种情况只能使用 having 过滤

select deptno,avg(sal) from emp where avg(sal) > 2000 group by deptno; // 错误


3.总结一个完整的 DQL 语句怎么写


select
  ...
  from
  ...
  where
  ...
  group by
  ...
  having
  ...
  order by
  ... 
复制代码


4.连接查询


4.1 关于查询结果的去重 (关键字 distinct ,去除重复记录)


select distinct job from emp;

微信截图_20220608085704.png

4.2 以下语句是错误的


select ename,distinct job from emp;

微信截图_20220608085718.png

重点: distinct只能出现在所有字段的最前面。


4.3 多个字段联合去重


select distinct deptno,job from emp;

微信截图_20220608085729.png

4.4 统计岗位数量


select count(distinct job) from emp;

微信截图_20220608085846.png

5.链接查询的概念


  • 在实际的开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。
  • 在实际的开发中,一般一个业务都会对应多张表,比如 :学生和班级,起码两张表。


如果学生和班级信息存储到一张表中,结果就像上面一样,数据会存在大量的重复,导致数据的沉余。


5.1连接查询的分类


5.1.1 根据语法出现的年代划分的话,包括:

  • SQL92 (一些老的DBA可能还在使用这种语法。DBA : DataBase Administrator,数据库管理员)
  • SQL99 (比较新的语法)

5.1.2 根据表的连接方式来划分,包括:

  • 内连接 :
  1. 等值连接
  2. 非等值连接
  3. 自连接
  • 外连接 :
  1. 左外连接 (左连接)
  2. 右外连接 (右连接)
  • 全连接 (这个不经常使用!!)

5.1.3连接查询有一种现象: 笛卡尔积现象。


5.2案例:找出每一个员工的部门名称,要求显示员工名和部门名。


select ename.deptno from emp;

EMP 表:微信截图_20220608090010.png

select deptno,dname from dept;

DEPT 表 :微信截图_20220608090022.png

ename 和 dname要联合在一块显示,粘到一块。

select ename,dname from emp,dept;

微信截图_20220608090035.png

其中一共有 14 * 4 行数据,一个名字对应四个部门名称

原理 : 两张表通过 deptno 进行查询连接

笛卡尔积现象 : 当两张表进行连接查询的时候,没有任何条件的限制,最终的查询结果条数是两张表记录条数的乘积。


6.关于表的别名 :


select e.ename,d.dname from emp e,dept d; (此处省略了 as )


6.1 表的别名有什么好处:


  • 执行效率高
  • 可读性好
  • 怎么避免笛卡尔积现象?当然是加入条件进行过滤
  • 避免了笛卡尔积现象,会减少记录的匹配次数嘛? 1.不会,次数还是 56 次,只不过显示的都是有效记录。

6.2找出每一个员工的部门名称,要求显示员工名和部门名。

这个是SQL92,以后不用
 select 
 e.ename,dname
 from
 emp e,dept d
 where
 e.deptno = d.deptno



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
53 0
|
3月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
43 0
|
3月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
40 0
|
4月前
|
关系型数据库 MySQL 数据库
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
168 0
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
55 0
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
|
4月前
|
SQL 关系型数据库 MySQL
MySQL进阶之性能优化与调优技巧
MySQL进阶之性能优化与调优技巧
|
4天前
|
SQL 关系型数据库 MySQL
MySQL数据库的约束+进阶版新增与查询-2
MySQL数据库的约束+进阶版新增与查询
12 1
|
3月前
|
SQL 关系型数据库 MySQL
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
|
3月前
|
SQL 监控 关系型数据库
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
49 0
|
3月前
|
关系型数据库 MySQL 数据库
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
25 0

推荐镜像

更多