点击

多表查询实现

多表查询可以分为

image-20221210114615223

什么是join

​ join具有连接的作用,即当两个以上的表有关系时,需要用join来连接这些相关的表,来处理或分析数据。

join的作用:连接

这里有两张表,使用join将两个表连接,不会改变原来的表

image-20221210133144354

rili join ret 会生成一个新表

image-20221210133653129

select *from rili join ret; from先查找rili表,让后join 把 ret 添加上来 rili表+ret表

join后的列名是两个表列名加起来的,可能会出现相同的列名,如id和name

​ rili的每一行数据与ret中的所有数据不断拼接

​ 然后再用rili的第二行去和ret中的每一行数据拼接,以此类推

​ 表rili共3行,表ret共2行,所以2*3=6行

如果不想产生表1中的每一行都与表2中的所有数据不断拼接

​ 则需要在join 后加入 on

即join rili on 条件

on的用法:添加约束

​ select * from ret join rili on rili.id=ret.id;

当只有join时,其后面的on可以用where替换

​ select * from ret join stu where stu.id=ret.id;

image-20221210135809299

一般join 都是与on连用的

​ 即:join on

外连接

左外连接(left join)

​ left join 必须有on

left join 会检查左边表的数据是否都包含在新生成的表中

​ 若是:则和join一样

​ 若不是:则用NULL和不包含的行组成新的行加入到新的表中

image-20221210133144354

select * from rili left join ret on rili.id=ret.id;

image-20221210141626388

select *from ret left join ret on rili.id =ret.id;

image-20221210143243791

left join 左右两边的表是不能交换的,交换过后,意思会变

​ 但join左右两边的表可以交换,意思不变

右外连接(right join)

​ right join 也必须有on

right join会检查右边表的数据是否都包含在新生的表中

​ 若是:则和join没有区别

​ 若不是:则用NULL和不包含的行组成新的行加入到新表中

image-20221210133144354

select * from ret join rili on ret.id=rili.id;

image-20221210143114518

select *from rili join ret on ret.id=rili.id;

image-20221210143344405

总结:

​ 简单来说:就是看左表的行数是否与右边的行数相等,两边数据是否一样多,如果缺少则用NULL来补足

​ 如果是左外连接则左表为主表,右表为副表

​ 如果是右外连接则右表为主表,左表为副表

​ 根据主表来决定副表的多少,副表与主表一样多

可以根据以下来快速分析

​ A right join B:是以B为基准

​ B left join A:也是以B为基准的

join:将两个表按照条件连接起来

left join:以左表为基准,看左表的数据是否都包含在新生成的表中,

​ 若是:则和join一样

​ 若不是:则用NULL和不包含的行组成新的行加入到新表中;

right join:以右表为基准,看右边表的数据是否都包含在新生成的表中

​ 若是:则和join一样

​ 若不是:则用NULL和不包含的行组成新的行加入到新表中

posted @ 2023-01-23 15:01  RILI520  阅读(34)  评论(0)    收藏  举报