第八章 链接查询
一、表链接
1、什么是表链接
如果数据来自多个表,那么可以采用链接查询的方式来实现。因此表链接就是指将多个联合在一起实现查询效果。
2、表链接的原理
3、笛卡尔乘积
表链接的基本原理就是采用笛卡尔乘积。笛卡尔乘积是指将两张表的所有数据相连,最后连接的结果数为两张表数量的乘积。
4、如何实现表链接(ON)
笛卡尔乘积出来的结果数量太多,其中有不少数据是没用的。因为我们在建表时为了表示他们的关系,都会建立外键来过滤没用的数据。使用ON关键字来确定其是否匹配。
完整结构:
练习1:
查询所有学生信息及所在的班级表名称
select 学号,姓名,科目,c.班级名称
from t_student as s join t_class as c
on s.`班级编号` = c.`班级编号`;
二、表链接的分类
1、内连接(inner join):
内部链接两个表中的记录,仅当至少有一个同属于两个标的行符合链接条件时才返回同行。也就是只要记录不符合ON条件,就不会显示在结果集中。
常见格式:
Select 表1 ,属性,属性名 from 表1 (inner)join 表2 on 表1.属性名 = 表2.属性名;
2、外链接(outer join):
1)左外链接(left join / left outer join):
外部链接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配即可,则在相关联的结果集中右表所有选择列均为null值。也就是即使不符合ON条件,左表中的记录也全部显示穿线,而且结果集中该类记录的右表字段为null值。
Select 表1.属性名,表2.属性名 from 表1 left join表2 on 表1.属性名 = 表2.属性名;
2)右表链接(rigth joim / right outer join):
外部链接两个表中的记录,并包含右表中的全部记录。也就是和左表链接相反。
Select 表1.属性名,表2.属性名 from 表1 right join 表2 on 表1.属性名 = 表2.属性名;
3)全外链接(full join / full outer join):
完整外部链接返回左表和右表的所有行,也就是左外链接和右外链接的合并,左右两个表的记录都全部显示。
Select 表1.属性名,表2.属性名 from 表1 full joim表2 on 表1.属性名 = 表2.属性名;
注意: MySQL不支持全外链接。
3、自连接:
自连接其实就是内连接或外链接的一个特列。同样可以使用内连接或外链接。
自连接所连接的表示来自于同一张表。
练习:
查询每位员工姓名及他们直属领导的姓名。
分析:
三、总结:
l 当一个子查询是相关子查询的时候,会严重影响性能。
l 表链接的原理是使用的笛卡尔乘积
l 表链接可分为链接、外链接、自连接
l 在链接中也可以使用From子句中跟多张表用都好分开,where子句中过滤条件。