一、连接查询
1、连接查询:将多张表连接到一起进行查询(会导致记录数(行)和字段数(列)发生改变)
2、连接查询的意义:关系型数据库,实体(表)与实体之间存在很多联系。表的设计,遵循着关系来设计(一对一、一对多和多对多)。通常,在实际操作的过程中,需要利用这层关系来保证数据的完整性
3、连接查询:join。使用方式:左表 join 右表
(1)左表:在join关键字左边的表
(2)右表:在join关键字右边的表
4、连接查询分类:MySQL中将连接查询分成四类:交叉连接、内连接、外连接(左连接+右连接)和自然连接
二、交叉连接
1、交叉连接:cross join。将两张表的数据彼此交叉,结果全保留
2、原理
(1)从一张表中依次取出每一条记录
(2)将取出的每一条记录都与另外一张表的所有记录进行匹配
(3)没有任何匹配条件,所有的结果都保留(无条件匹配)
(4)记录数 = 第一张表的记录数 * 第二张表的记录数
字段数 = 第一张表的字段数 * 第二张表的字段数
(5)最终形成的结果叫做笛卡尔积
3、基本语法
-- 交叉连接
左表 cross join 右表; -- 等价于:多表数据源 "from 左表, 右表;"
-- 交叉连接
-- my_student cross join my_class:是数据源
select * from my_student cross join my_class;
-- 等价于
select * from my_student, my_class;
4、交叉连接是为了保证结构的完整性。但实际上交叉连接(笛卡尔积)没有任何意义,应该尽量避免使用(因为交叉连接没有数据的需要,而且会导致数据量指数级别增长,导致内存消耗,服务器负荷增加)
5、应用:交叉连接产生的结果是笛卡尔积,没有实际应用
三、内连接
1、内连接:[inner] join。从一张表中取出所有的记录去另外一张表中,使用匹配条件进行匹配。匹配成功则保留,匹配失败则放弃。最终获取的是能在另一张表中匹配到的数据(左右两张表中有连接条件匹配,不匹配的忽略)
注:内连接匹配的时候,必须保证匹配到才会保存(左表根据条件,匹配到右表的数据,左表中的对应记录才会保存)
2、原理
(1)从第一张表中取出一条记录,然后去另外一张表中进行匹配
(2)使用匹配条件进行匹配
(3)匹配成功,左表数据保留;匹配失败,左表数据被舍弃
3、基本语法
-- 内连接
-- on表示连接条件。条件字段代表相同的业务含义
-- 匹配条件:右表.字段 = 左表.字段
左表 [inner] join 右表 on 匹配条件;
左表 [in