MySql 笛卡尔积(交叉连接)

751 阅读1分钟

实验数据

  • beauty表
  • boys表

查询两张表(笛卡尔积)

目的: 查询两张表的字段每个女神对应的男朋友的名字, 比如周芷若的男朋友张无忌.

  • 用最朴素的查询思想
select name, boyName from beauty, boys; 

这里发现问题了, 柳岩有四个男朋友???

分析原因

  • 相当于查询了第一个表的第一个字段(柳岩)去找另一个表的所有字段做匹配, 由于没有任何筛选条件都会加入到结果

笛卡尔积

  • 由于没有任何条件, 最终结果会是表1行数 x 表2行数, 称为笛卡尔积.

解决方案

  • 需要加上条件避免, 比如beauty表的boyfriend_id = boys表的id

测试

查询beauty表和boys表id相同的字段, 由于两个表都有id字段, 因此要给表取上别名, 利用别名.字段作为区分.

select name, boyName from beauty girl, boys boy where girl.boyfriend_id = boy.id;

Mysql 99语法

99年的sql语句, 更进一步给了笛卡尔积的语法称为交叉连接 加入了cross join关键字, 和前面内容的结果一样

select be.name, bo.boyName from beauty be cross join boys bo;