外连接
目标:理解外连接的语法和原理,掌握外连接的需求和解决方案。
概念: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,结果是一样(但是不建议使用)