大家好,欢迎来到IT知识分享网。
1、什么是连接查询,为什么需要连接查询?
连接查询:我们想要的结果需要多张表联合起来查询才可以得到;
为什么需要联合查询,所有数据放在一张表里面不行吗?答:数据会存在大量的重复,导致数据的冗余、查询速度降低、占用磁盘空间;
2、连接查询的分类?
根据语法出现的年代来划分的话,包括:
1、SQL92(一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员)
2、SQL99(比较新的语法)
根据表的连接方式来划分,包括:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接(这个不讲,很少用!)
3、在表的连接查询方面有一种现象被称为:笛卡尔积现象。(笛卡尔乘积现象)
笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。
我们演示下笛卡尔积现象,现有员工表和部门表两张表如下:
员工表
部门表
笛卡尔积现象:
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;
总结:两表联查的本质是依次拿一张表里面的一条数据,跟另外一张表里面的每条数据进行匹配,匹配成功就显示。添加where过滤语句并不会减少匹配的次数,匹配的总次数依然是:A表记录 * B表记录
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/95697.html