MySQL什么是笛卡尔现象?消除笛卡尔积现象的解决方法

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

笛卡尔现象形成原因

  • 连接条件被省略
  • 连接条件无效
  • 第一个表的所有记录连接到第二个表的所有记录

➢为了避免笛卡尔结果我们总是在 WHERE 子句中使用有效连接

设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 叫做A与B的笛卡尔积,记作AxB.

图片[1] - MySQL什么是笛卡尔现象?消除笛卡尔积现象的解决方法 - 三酷猫
mysql笛卡尔积现象

连接查询的分类

内链接:

  • 等值连接
  • 非等值连接
  • 自连接

外链接:

  • 左外连接(左连接)
  • 右外连接(右连接)

全链接:这个很少用

多表连接时使用别名的优势

第一: 执行效率高; 以上sql语句为了,如果不使用别名,查询enme字段,它先会去emp找,再去dept表中找。
有时候,两张表中可能会存在字段名一样的情况。

第二:可读性好;

怎么避免笛卡尔积现象?

当然是加条件进行过滤。

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

答案是:不会。 以以上查询案例为例,查询次数还是56次。只不过显示的是有效记录。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享