MYSQL内连接和外连接

外连接

目标:理解外连接的语法和原理,掌握外连接的需求和解决方案。

概念:outer join,是一种不严格的连接方式。

重点:
一.外连接分为两种
1.左外连接(左连接):

left join

2.右外连接(右连接):

right join

二.外连接有主表和从表之分
1.左连接,左表为主表
2.右连接,右表为主表
三.外连接是将主表的记录去匹配从表的记录
1.匹配成功保留
2.匹配失败(全表):也保留,只是从表字段置空。

步骤:
1.确定进行连表操作。
2.确定要有数据保护,即表中数据匹配失败也要保留。
3.确定主从表。
4.选择对应外连接。

示例:
1.查出所有的学生信息,包括所在班级(左连接)**
主要数据是学生,并且是全部学生,外连接,且学生表是主表。

select a.*,b.class_name from studentinfo a left join classinfo b on
a.class_num=b.class_num;

2.查出所有班级里的所有学生(右连接)

select a.*,b.class_name from studentinfo a right join classinfo b on
a.class_num=b.class_num;

增一个新的班级,里面没有任何学生,提问此时查询记录有多少条。

小结:
1.外连接与内连接的区别在于数据匹配失败的时候,外连接会保留一条记录(主表数据保留,从表数据置空)。
2.外连接不论是左连接还是右连接,字段的顺序不影响,都是先显示左表数据,后显示右表数据。
3.外连接必须使用on作为连接条件,不能没有和使用where替代。

内连接

目标:理解内连接的概念和原理,掌握内连接的应用场景和解决方法。

概念:内连接是指用比较运算符设置连接条件,只返回满足连接条件的数据行,是将交叉连接生成的结果集按照连接条件进行筛选后形成的。

重点:
一.内连接是将一张表的每一条记录去另外一张表根据条件匹配。
1.匹配成功:保留连接的数据。
2.匹配失败:都不保留。
二.内连接语法:左表 join 右表 on 连接条件。

步骤:
1.确定需要从多张表中获取数据组成记录。
2.确定连接的要求是保留链接成功的,不成功的数据不要。
3.使用内连接。

演示案例:
学生表和班级表:学生对班级多对一关系。

1.获取已经有了班级的学生信息,包括所选班级。
学生和班级在两个表中,所以需要连接
学生必须有班级,而班级也必须存在,所以是内连接
连接条件:班级编号
表名的使用也可以使用别名

select * from studentinfo a inner join classinfo b on
a.class_num=b.class_num;

优化后:

select a.*,b.class_name from studentinfo a inner join classinfo b on
a.class_num=b.class_num;

根据案例应知道:
字段冲突的话在mysql里倒是不影响,只是会同时存在,但是后续其他地方使用就不方便了。(java或者php用的时候)

小结
1.内连接匹配规则就是必须保证左表和右表同时存储连接关系,这样的数据才会保留。
2.扩展:内连接可以没有on条件,那么得到的结果就是交叉连接(笛卡尔积),无意义。
3.扩展:内连接的on关键字可以换成where,结果是一样(但是不建议使用)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL中的连接是用于将多个表中的数据进行关联查询的操作。连接分为内连接外连接两种类型。 1. 内连接(INNER JOIN):内连接返回两个表中满足连接条件的行,即只返回两个表中有匹配关系的数据。内连接使用JOIN关键字来进行连接操作。例如,假设有两个表A和B,通过某个共同的字段进行连接,可以使用以下语法进行内连接: ```sql SELECT * FROM tableA INNER JOIN tableB ON tableA.column = tableB.column; ``` 2. 外连接(OUTER JOIN):外连接返回两个表中满足连接条件的行,同时还返回一个表中没有匹配关系的行。外连接分为左外连接、右外连接和全外连接三种类型。 - 左外连接(LEFT JOIN):左外连接返回左表中所有的行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则对应的字段值为NULL。语法如下: ```sql SELECT * FROM tableA LEFT JOIN tableB ON tableA.column = tableB.column; ``` - 右外连接(RIGHT JOIN):右外连接返回右表中所有的行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则对应的字段值为NULL。语法如下: ```sql SELECT * FROM tableA RIGHT JOIN tableB ON tableA.column = tableB.column; ``` - 全外连接(FULL JOIN):全外连接返回两个表中所有的行,如果某个表中没有匹配的行,则对应的字段值为NULL。MySQL中没有直接支持全外连接的语法,但可以通过左外连接和右外连接的组合来实现。 需要注意的是,连接操作需要使用ON关键字指定连接条件,即连接两个表的字段。在使用连接操作时,需要确保连接条件是正确的,并且表中有适当的索引来提高查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的可达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值