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在前。所谓左连接,右连接里的左右两个字,这是用来决定那边是重要的表,左连接保证的是左表,右连接偏向右表。