为什么使用表连接
- 什么是表连接?
- 如果数据来自多个表,那么可以采用链接查询的方式来实现。因此表连接就是多个表连接合在一起实现查询效果
- 表连接的原理
- 表连接采用的是笛卡尔乘积,称之为横向连接。
- 笛卡尔乘积
- 表连接的基本原理就是采用笛卡尔乘积。笛卡尔乘积是指将两张表的所有数据相连,最后连接的结果数为两张表数量的乘积。
从上面图示可以看出表联接是将两张表的数据相乘而得到的结果,第一张表的每条记录都会和第二张表的所有记录相连。
在数据库中将多表相连需要使用JOIN关键字。
标准结构
- 笛卡尔乘积出来的结果数量太多,其中有不少数据是没用的。因为我们在建表时为了表示他们的关系,都会建立外键来确定关系,所以在表联接时就要根据其外键来过滤没用的数据。使用ON关键字来确定其是否匹配。
完整结构
--MySQL中表连接分为:内连接,外链接,都是横向连接 还有oracle的纵向连接
--使用表连接 -- 内连接 第一种语法 inner join inner可以省略
- select * from 主表名 as 主别名 join 连接表名 as 连接的别名 on 主表名.列名=连接表名.列名 where 条件
-- 外链接:
定义:外联接是指不管有没有匹配,被定义了外联接的表数据都要出现在结果中。比如左外联接,那么在JOIN左边的表就被定义为外联接,那么此表中所有数据都会出现在查询结果中。右外联接则是JOIN右边的表为外联接表。全外联接就是JOIN左右两张表都是外联接表。
- 左外联接
用法:LEFT OUTER JOIN 或 LEFT JOIN - 右外联接
用法:RIGHT OUTER JOIN 或 RIGHT JOIN -
全外联接
用法:FULL OUTER JOIN 或 FULL JOIN
- 注意:MYSQL不支持全外联接
--自连接
定义:自联接其实就是内联接或外联接的一种特例,同样可以使用INNER JOIN 或 OUTER JOIN。
自联接所联接的表是来自于同一张表。
- 举例:一张存放员工信息的表,每个员工有个直属领导。当然直属领导也是员工,所以员工信息和他们的领导信息都再一张表中。下面是表结构: