一、引言
概述:指的是从多张表中查询数据。
二、实操
打开 DataGrip 进行尝试多表查询。
(1)表结构的准备以及数据的插入
分别是:员工表 emp 以及 部门表。员工表中字段 dept_id 是外键,关联部门表的主键 id。
emp:员工表(增加了17条记录)
补充:set null ,当父表主键删除字段值,对应子表外键字段值变成 null 。
部门表:dept (6条记录)
(2)多表查询
SELECT * FROM emp,dept;
出现这样的问题,就需要我们解决。下面介绍笛卡儿积的相关知识。
(3)笛卡儿积
概述:笛卡尔乘积是指在数学中,两个集合:A集合和B集合的所有组合情况。
(在多表查询时,需要消除无效的笛卡尔积)
例如:
所以刚刚我们查询的两张表:emp、dept ,就是它们所有的组合情况(17*6=102条)。
根据我们的需求,我们需要的是以下这种查询结果就可以了:(需要把无效的笛卡尔积消除掉)
(4)解决方法:
我们要通过它们两张表,所关联的字段去解决这个问题。
所以让表 emp 的字段 dept_id等于 表 dept 的字段 id (dept_id = dept.id)就可以了。
SELECT * FROM emp,dept WHERE(emp.dept_id = dept.id) ORDER BY emp.id;
这就是我们所介绍和学习的多表查询。
三、多表查询的分类
多表查询的分类主要分为两类。
1、连接查询(分为内连接、外连接以及自连接)
内连接:
相当于查询A、B交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:
指的是当前只有一张表。当前表与自身的连接查询,自连接必须使用表别名(后面会提到)
2、子查询