将多张表连在一块儿查询(会致使记录数行和字段数列发生改变)
意义:
在关系型数据库设计过程当中,实体与实体之间是存在不少联系的。
在关系型数据库表的设计过程当中,遵循着关系来设计:一对一,一对多,多对多。一般在实际操做中,须要利用这层关系来保证数据的完整性。web
将两张表的数据与另一张表彼此交叉(笛卡尔积)sql
表1 cross join 表2 --实例 select * from my_student cross join my_teacher;
笛卡尔积没有意义,应该尽可能避免,存在的意义是保证这种结构的完整性。数据库
[inner] join,从左表中取出每一条记录,去右表中与全部的记录进行匹配:匹配必须是某个条件在左表中与右表中相同最终才会保留结果,不然不保留。数据库设计
表1 [inner] join 表2 on 匹配条件 --实例 select * from my_student inner join my_class; --不给定条件结果仍然是笛卡尔积 select * from my_student inner join my_class on class_id = id;
在查询数据的时候,不一样表可能会有同名字段,这个时候须要加上表名才能区分svg
select * from my_student inner join my_class on my_student.class_id = my_class.id;
而表名太长时,一般可使用别名。spa
select * from my_student [as] s inner join my_class [as] t on s.class_id = c.id;
注:设计
outer join,按照某一张表做为主表(表中全部记录在最后都被被保留),取出里面的全部记录,而后每条与另一张表(从表)进行链接:无论能不能匹配上条件,最终都会保留:能匹配,正确保留;不能匹配,从表的字段都置空NULL。
外链接分为两种:code
左链接:主表 left join 从表 on 链接条件 右链接:从表 right join 主表 on 链接条件 --实例 select * from my_student s left join my_class t on s.class_id = t.id; --class 表里只有1班和2班
注:很是经常使用的一种获取数据的方式,做为数据获取对应主表以及其余关联数据xml
天然链接:natural join,天然链接,就是自动匹配链接条件:系统以字段名字做为匹配模式(同名字段就做为条件,多个同名字段都做为条件)。
1.天然内链接blog
表1 natural join 表2 --实例 alter table my_student change class_id id int after stu_name; select * from my_student natural join my_class;
2.天然外链接
左表 natural left/right join 右表 --实例 select * from my_student natural left join my_class;
在链接查询中用来代替on关键字的,进行条件匹配。
原理:
表1 [inner, left, right] join 表2 using (同名字段列表) --实例 select * from my_student left join my_class using (id) --结果同上
一般不会用到由于设计表的时候不会出现同名字段