浅聊 mysql连接查询本质

浅聊 mysql连接查询本质1 什么是连接查询 为什么需要连接查询 连接查询 我们想要的结果需要多张表联合起来查询才可以得到 为什么需要联合查询 所有数据放在一张表里面不行吗 答 数据会存在大量的重复 导致数据的冗余 查询速度降低 占用磁盘空间 2 连接查询的分类

大家好,欢迎来到IT知识分享网。

1、什么是连接查询,为什么需要连接查询?

连接查询:我们想要的结果需要多张表联合起来查询才可以得到;

为什么需要联合查询,所有数据放在一张表里面不行吗?答:数据会存在大量的重复,导致数据的冗余、查询速度降低、占用磁盘空间;

2、连接查询的分类?

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

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

2、SQL99(比较新的语法)

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

内连接:

等值连接

非等值连接

自连接

外连接:

左外连接(左连接)

右外连接(右连接)

全连接(这个不讲,很少用!)

3、在表的连接查询方面有一种现象被称为:笛卡尔积现象。(笛卡尔乘积现象)

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

我们演示下笛卡尔积现象,现有员工表和部门表两张表如下:

浅聊 mysql连接查询本质

员工表

浅聊 mysql连接查询本质

部门表

笛卡尔积现象:

SELECT ename , dname FROM emp , dept; /* 1、上面sql语句使用员工表和部门表联合查询,员工表14条数据,部门表4条数据, 最终执行结果为:14 * 4 = 56条数据 2、执行流程:每一条员工数据都会匹配部门的4条数据联合得到一个结果 */

4、那么怎么解决笛卡尔积现象呢?

当然是加条件进行过滤。

5、思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?

不会,次数还是56次。依然会将员工表里面的每条记录和部门表里面的4条数据进行匹配,只不过显示的是有效记录。

//查询每个员工对应的部门名称 SELECT e.ename , t.dname FROM emp e INNER JOIN dept t ON e.deptno = t.deptno;
浅聊 mysql连接查询本质

总结:两表联查的本质是依次拿一张表里面的一条数据,跟另外一张表里面的每条数据进行匹配,匹配成功就显示。添加where过滤语句并不会减少匹配的次数,匹配的总次数依然是:A表记录 * B表记录

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/95697.html

(0)
上一篇 2026-03-13 10:33
下一篇 2023-07-02 21:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信