持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
Express-学习之路 19,mysql-多表查询
引言
本系列会以我的一个理解,来介绍并开始学习 Express。
中间会插入自己所联系到的 乱七八糟 的 知识点。
多表关系
主要是通过 外键的方式,将多张表进行关联。
-
在一对多的时候,可以直接通过外键来处理
-
在多对多的时候,需要建立一张中间表,来进行关联维护
中间表字段为外键,与其他表的主键进行关联。
多表查询
-
xxx 和 yyy 是分别两张表
-
a1是xxx表中的字段,b1是yyy表中的字段
找到 xxx.a1 与 yyy.b1 相等的 关联数据
select * from xxx, yyy where xxx.a1 = yyy.b1
内连接
表 xxx 和 表 yyy 交集部分
关键字 inner join ... on ...,这个是可以省略的
-
c1 是连接的条件
-
a1 和 a2 均为字段,可以为 xxx.a1 或者 yyy.a1 是看需要这两个表里面哪个数据。
-
隐式是可以省略上面的关键字
// 隐式
select a1,a2 from xxx,yyy where c1
// 显式
select a1,a2 from xxx inner join yyy on c1
外连接
outer 是可以省略的
左外连接 比 右外连接 使用的场景多
左外连接
查找到 表 xxx 所有数据,以及表 xxx 和 表 yyy 的交集部分
select a1,a2 from xxx left outer join yyy on c1
右外连接
查找到 表 yyy 所有数据,以及表 xxx 和 表 yyy 的交集部分
select a1,a2 from xxx right outer join yyy on c1
自连接
主要是 一张表 自己连接自己
关键字 join
select a1 from xxx as x1 join xxx as x2 on ...
联合查询
将多次查询的结果进行合并,得到一个新的查询结果集
关键字为 union 或者 union all
-
union all 如果数据存在重复的话,无法去重
-
union 如果数据存在重复的话,可以去重
select a1,a2 from xxx union select a1,a2 from yyy
使用这个注意,两个查询得到的列数需要相同,并且字段也需要相同,才可以进行合并。
嵌套查询(子查询)
主要是 sql 语句中,可以继续嵌套 sql 语句。
-
select
-
insert
-
update
-
delete
标量子查询
查询返回的是一个数据,对该数据再进行使用
主要是一些运算符
列子查询
查询返回的是一列数据,可以为多行
-
in 只要值 在 所在的数据集合里,就可以
-
not in 不在
-
any 满足一个即可
-
some 与 any 相同
-
all 所有值 都必须满足
行子查询
查询返回的是一行数据,可以为多列
表子查询
查询返回的是多行数据 和 多列数据
总结
学习了 mysql 数据库中的 多表查询。