MySQL--多表连接(内连接、外连接、交叉连接--笛卡尔积)

本文详细介绍了MySQL中的多表连接,包括纵向拼接(UNION)、外连接(LEFT JOIN、RIGHT JOIN)、内连接(INNER JOIN)以及交叉连接(笛卡尔积)。通过具体的例子和题目解析,展示了各种连接方式的使用场景和语法,帮助读者理解和掌握MySQL的多表查询技巧。
摘要由CSDN通过智能技术生成

@toc
     更多关于数据库知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:
     QQ:3327908431
     微信:ZDSL1542334210

        前言:MySQL一系列操作猛如虎,代码易懂清晰,结构也简单,今天我们来谈一谈MySQL强大的多表连接,将表连接后,不但方便查询、处理,而且更加便于做数据分析,为我们省去了诸多麻烦,废话不多说,直接进入今天的讲解画面。**

1、多表连接种类与语法

1.1、纵向拼接

        Union 拼接也称为纵向拼接,根据每个表共有的列的值匹配两个表中的行,要进行连接的两张表必须有相同的列名才可以,若两表字段不全相同或者顺序不同,那么就用查询来代替。语法为:

select * from t1 union select * from t2;  # 两表列名和列顺序完全相同

select 列名称 from t1 union select 列名称 from t2;
1.2、外联接

        该种连接方式是最常用也是比较难理解的一种连接方式。外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
        1)left join或left outer join左向外联接的结果集包括left outer子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值,但是需要指定主键id,该两个表格的主键名字要一样,语法为:

select * from t1 left join t2 on t1.id=t2.id;

        2)right join或 right outer join右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

select * from t1 right join t2 on t1.id=t2.id;
1.3、内联接

         inner join只显示两表中有关联的数据,就是当两个表没有相同主键时,不会显示结果。如下面的例子,当scores 里面的s_id不全的时候,那么内连接就不会显示scores 没有的s_id相应的行。

select * from stu inner join scores on stu.s_id = scores.s_id;
1.4、交叉联接(笛卡尔积)

        交叉联接中 join=full join 都是返回左表中的所有行,左表中的每一行与右表中的所有行组合,不需要指定主键。交叉联接也称作笛卡尔积。from 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。

select * from t1 join t2;  # 法一

select * from t1 full join t2;# 法二

2、表格创建

创建学生信息表stu

create table stu(s_id varchar(5),
   s_name varchar(5),
   s_sex varchar(1),
   s_age int(3),s_day date);

insert into stu values
("001","李华","男",23,'1996-8-16'),
("002","王二","男",24,'1997-3-16'),
("003","赵敏","女",23,'1990-5-26'),
("004","张莹莹","女",22,'1995-2-16'),
("005","朱亚军","男",25,'1999-8-16')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值