MySQL基础多表查询
多表关系
一对一:
多用于单表的拆分,比如将用户信息拆分为基础信息和其他详情字段,提升操作效率
需要在外键上加上unique约束,一对多就不用。
一对多:
在多的一方建立外键,指向一的一方的主键
多对多:
建立中间表,中间表包含另外两个表的主键
多表查询概述
从多张表中进行数据查询
笛卡尔积
怎么消除无效的笛卡尔积
多表查询分为:连接查询和子查询
连接查询又有:内连接、外连接、自连接
内连接
返回交集部分数据
如果给表起了别名,那原来的表名就没用了,和执行顺序也有关
外连接
自连接
自己连接自己进行查询
表必须起别名。
想象成两张表,进行内连接、外连接。
联合查询 union/union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集合
union all直接将查询结果合并,union将查询结果去重
上下两个查询的字段要相同,不然不能使用union
子查询
标量子查询
列子查询
子查询只返回一个字段,可以有多个数据
行子查询
查询的是一条数据,但是有多个字段
表子查询
子查询返回的结果是一张表,将返回的表再作为一张临时表再和其他表进行联查操作
总结
子查询的位置可以出现在:where、from、select之后