1 what是多表查询

先建好两张表供等下学习使用:

多表查询的作用: 查询多个表的不同列,组成我们想要的数据。

多表查询的分类:

2 笛卡尔积现象

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

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

3 内连接

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

隐式内连接

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

显式内连接

显示内连接:使用 INNER JOIN ... ON 语句, 可以省略 INNER。SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件。

从这里我们发现取别名用的as是可以省略的,并且表名可以写首字母即可。

内连接查询步骤确定查询哪些表

确定表连接的条件

确定查询的条件

确定查询的字段

4 左外连接

左外连接:使用 LEFT OUTER JOIN ... ON,OUTER 可以省略:

SELECT 字段名 FROM 左表 LEFT JOIN 右表 ON 条件 。

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

5 右外连接

右外连接:使用 RIGHT OUTER JOIN ... ON,OUTER 可以省略:

SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件

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

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