sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)

1 表之间的关系 1.1 一对一
sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)
文章图片

1.2 一对多
sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)
文章图片

1.3 多对多
sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)
文章图片

2 连接方式 2.1 横向连接
2.1.1 内连接 inner join 按照连接条件连接两个表,返回满足条件的行
sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)
文章图片

select 字段1[,…] from 表1[ inner] join 表2 on 连接条件;

2.1.2 左连接 left join 结果中除了包括满足连接条件的行外,还包括左表的所有行
sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)
文章图片

select 字段1[,…] from 表1 left join 表2 on 连接条件;

2.1.3 右连接 right join 结果中除了包括满足连接条件的行外,还包括右表的所有行
sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)
文章图片

select 字段1[,…] from 表1 right join 表2 on 连接条件;

2.1.4 笛卡尔积 cross join 假设集合A={a,b},集合B={1,2,3},则两个集合的笛卡尔积为{(a,1),(a,2),(a,3),(b,1),(b,2),(b,3)}
select 字段1[,…] from 表1,表2[,…]; select 字段1[,…] from 表1cross join 表2[,…];

消除笛卡尔积:
逐行判断,相等的留下,不相等的排除
select 字段1[,…] from 表1,表2[,…] where 筛选条件;

2.1.5 自连接 通过设置表别名,将同一张表虚拟为多张表进行连接
select * from tabel a inner join table b on a.id = b.id

2.2 纵向连接
2.2.1 概念 【sql|Mysql数据库轻松学09—数据分析师常用(数据查询语言DQL之多表查询)】把多条select语句的查询结果合并为一个结果集
被合并的结果集的列数、顺序和数据类型必须完全一致
2.2.2 union去重:
#select 字段1[,字段2,…] from 表名 union select 字段1[,字段2,…] from 表名; select * from t1 union select * from t2;

2.2.3 union all不去重:
#select 字段1[,字段2,…] from 表名 union all select 字段1[,字段2,…] from 表名; select * from t1 union all select * from t2;

3 连接条件 3.1 等值连接
表1.id=表2.id

3.2 不等值连接
表1.id 比较 表2.id

    推荐阅读