leftjoin、rightjoin和join,傻傻分不清?

讨论MySQL中左链接、右链接、内部链接、短链接的区别。
我们首先构建两个表:第一个表称为课程表(kemu),第二个表称为结果表(分数)。
###LEFTJOIN左连接,顾名思义,依赖左表进行连接。
这意味着主要使用左表中的数据,右表中的数据是相关的,结果集显示左表中的所有数据,并且右表和左表之间的交集也会显示。

例如:结果集显示左表的所有信息,并且右表和左表的交集也会列出。
###右连接(RIGHTJOIN)右连接依赖于右表。
这意味着主要使用右表中的数据,而左表中的数据与查询相关。
结果集显示右表中的所有数据以及左表和右表的交集数据。
例如:结果集显示右表的所有信息,同时也会列出左表和右表的交集。
###内连接(INNERJOIN)内连接实际上是两个表之间的连接,缩写为JOIN,意思是两个表的交集是两个表之间的主要交集,其余的两个表都找到不相关的部分不是附加视图。
这个在实际操作中经常用到。
示例如下:结果集显示为两个表的交集。
总结以上三种连接的区别,左连接基于左表,右连接基于右表,内连接侧重于两个表的交集。
选择连接类型时,应根据实际需要确定。

MySQL多表查询与左连接、右连接、内连接、全连接

因为大多数情况下,数据无法在同一个表中居中,跨多个表进行匹配就解决了上述查询的语法问题。
Innerjoin:内连接,最常见的连接方式(用的最多,查询效率最高)leftjoin:也叫左外连接(left[outerlink])rightjoin:我也叫右外连接(right[outer]join)全连接:全[外]连接,MySQL无法直接支持。
下面以经典学生查询数据集的四张表为例,演示MySQL中的四种join方法。
这四个表的字段、数据和ER图如下:字段说明1、成绩表:s_id、c_id、分数、多表、无主键2、课程表:c_id、c_name、t_id、a表、c_id为主键,结果表中对应字段c_id3.学生表:s_id、s_name、s_age、s_sex、一表,s_id为主键,对应表中的点字段s_id4.教师表:t_id,t_name,一张表,t_id为主键,对应课程表中的t_id字段,一般是多张表主表,主要存储数据,每个字段可以有重复值,没有主键,不可能根据给定的字段找到准确的记录,这大多是存储辅助数据,存储的数据不重复,并且可以通过主键找到数据。
左连接:左连接[outer],左连接提取左表(t1)中的所有记录并匹配到右表(t2)。
如果没有匹配,则空值代表右表列。
不需要写outer默认情况下不写outer关键字RightJoin:右连接提取右表(t2)中的所有记录。
)。
如果没有匹配,则使用空值来表示左表列。
语法:其实右连接得到的结果和左连接得到的结果是一样的。
唯一的区别是字段顺序颠倒了连接是在右连接的右边,而左连接右连接表的结果是在右连接的左边,先写哪个表,默认情况下,该表将出现在所选结果左侧的字段(除非选择后指定了字段)。
内连接,也叫等值连接,innerjoin结果得到一个包含表t1和表t2的数据集,简单来说就是求两个表的交集。
语法:与左、右连接不同,在内连接代码中,“内连接”两侧的表t1和表t2的位置是可以互换的,结果是相同的。
上述s_id=8的记录没有出现在结果表中,因此不是交集,被排除。
还应该注意的是,为了代码简单起见,通常给表和字段都赋予别名(又名),如果查询(派生表)用作子查询,则应对派生表命名。
表别名直接跟在字段名或表名后面,中间可以加也可以不加“as”关键字。
MySQL目前不支持这种类型的语句,但是可以使用union来“聚合”两个结果集一起,使用left和rightjoin去除重复数据,然后使用union将数据连接并去除重复。
交叉连接返回两个表的笛卡尔积。
它的作用是计算结果集中每一种可能的组合。
如果你读过之前的文章《MySQL写入顺序和执行顺序》,你可能知道多表查询的第一步就是做笛卡尔积生成虚拟表。
最后总结一下七种连接方式(交叉连接比较难画,大家可以通过描述来想象):上面是很多表、多种连接类型的查询,比较容易理解,但这也是基础初学者应该明白。
数据来源在这里:基础练习-经典学生50级题数据来源