MySQL一万字深度总结,基础+进阶(三),建议收藏。

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

👨‍🎓作者:Java学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:太阳请不要晒黑我的皮肤,请晒黑我爸爸妈妈的头发。

👋大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小编精心为大家整理的一万字MySQL数据库核心知识、在接下来的几天为大家持续分享,💘关注不迷路呦!!!💘。数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。🦄

1.单行处理机

1.1 什么是单行处理机?

  • 输入一行,输出一行。

1.2计算每个员工的年薪

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

使用ifnull函数处理:

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

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

1.3 ifnull() 空处理函数?

语法格式:

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

1.4 将津贴中的 NULL 转换为 0

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

2.分组查询 group by 和 having

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

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

select max(sal) from emp group by job;

注意:

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

2.2多字段分组查询

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// 错误,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;

4.2 以下语句是错误的

select ename,distinct job from emp;

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

4.3 多个字段联合去重

select distinct deptno,job from emp;

4.4 统计岗位数量

select count(distinct job) from emp;

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 表:

select deptno,dname from dept;

DEPT 表 :

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

select ename,dname from emp,dept;

其中一共有 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

今天就先分享到这里,明天继续给大家分享,关注不迷路呦,我们明天见😊。

以上项目的源代码,点击星球🌍进行免费获取 星球(Github地址)如果没有Github的小伙伴儿。可以搜索🔍微信公众号:Java学术趴,📭发送MySQL,免费给发给大家项目源码,代码是经过小编亲自测试🔧的,绝对可靠,免费拿去使用。

--------💘看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!💝---------

点击🌍星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦💪!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值