MySQL多表查询及原理分析

多表查询

what是多表查询

先建好两张表供等下学习使用:   多表查询的作用:查询多个表的不同列,组成我们想要的数据。

多表查询的分类:

笛卡尔积现象

  如图,如果不设置条件的话,dept的每条数据和emp的每条数据组合,这样就形成了笛卡尔积现象,这样的查询结果不是我们想要的。

  如何清除笛卡尔积现象的影响 我们发现不是所有的数据组合都是有用的,只有员工表.dept_id = 的数据才是有用的。所以需要 通过条件过滤掉没用的数据。

内连接

  用左边表的记录去匹配右边表的记录,如果符合条件的则显示。如:从表.外键=主表.主键

  隐式内连接:看不到 JOIN 关键字,条件使用 WHERE 指定 SELECT 字段名 FROM 左表, 右表 WHERE 条件

显式内连接
显示内连接:使用 INNER JOIN … ON 语句, 可以省略 INNER。SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件。
从这里我们发现取别名用的as是可以省略的,并且表名可以写首字母即可。
内连接查询步骤 确定查询哪些表 确定表连接的条件 确定查询的条件 确定查询的字段

左外连接

左外连接:使用 LEFT OUTER JOIN … ON,OUTER 可以省略:SELECT 字段名 FROM 左表 LEFT JOIN 右表 ON 条件 。

  用左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示 NULL 可以理解为:在内连接的基础上保证左表的数据全部显示(左表是部门,右表员工)

右外连接

右外连接:使用 RIGHT OUTER JOIN … ON,OUTER 可以省略:SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件

  用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示 NULL 可以理解为:在内连接的基础上保证右表的数据全部显示

一定注意:这里的左连接右连接,并不是代表表出现在左或者右的位置,表左右的位置在于join,在jion前面写的表,它的字段就会在前面,而join后面的表它的字段就是在后边。看上面两张图,都是dept在前。所谓左连接,右连接里的左右两个字,这是用来决定那边是重要的表,左连接保证的是左表,右连接偏向右表。

经验分享 程序员 微信小程序 职场和发展