MySQL学习笔记(8)--链接查询

·概念

将多张表连在一块儿查询(会致使记录数行和字段数列发生改变)
意义:
在关系型数据库设计过程当中,实体与实体之间是存在不少联系的。
在关系型数据库表的设计过程当中,遵循着关系来设计:一对一,一对多,多对多。一般在实际操做中,须要利用这层关系来保证数据的完整性。web

·交叉链接

将两张表的数据与另一张表彼此交叉(笛卡尔积)sql

1 cross join2
--实例
select * from my_student cross join my_teacher;

笛卡尔积没有意义,应该尽可能避免,存在的意义是保证这种结构的完整性。数据库

·内链接

[inner] join,从左表中取出每一条记录,去右表中与全部的记录进行匹配:匹配必须是某个条件在左表中与右表中相同最终才会保留结果,不然不保留。数据库设计

1 [inner] join2 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;

注:设计

  1. 内链接链接匹配的时候必须匹配到才会保存(不匹配的记录直接丢掉)
  2. 内链接还可使用where代替on关键字(where是在交叉链接以后再筛选,因此建议用on)
  3. 内链接一般是在对数据有精确要求的地方使用:必须保证两种表中都能进行数据匹配

·外链接

outer join,按照某一张表做为主表(表中全部记录在最后都被被保留),取出里面的全部记录,而后每条与另一张表(从表)进行链接:无论能不能匹配上条件,最终都会保留:能匹配,正确保留;不能匹配,从表的字段都置空NULL。
外链接分为两种:code

  1. Left join:左外链接(左链接),以左表为主表
  2. Right join:右外链接(右链接),以右表为主表
    左链接对应的主表数据在左边,右链接对应的主表数据在右边。
左链接:主表 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 join2
--实例
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;

在这里插入图片描述

·using 关键字

在链接查询中用来代替on关键字的,进行条件匹配。
原理:

  1. 在使用链接查询时使用on的地方用using代替
  2. 使用using的前提是对应的两张表链接的字段是同名(相似天然链接自动匹配)
  3. 若是使用using关键字,那么对应的同名字段,最终在结果中只会保留一个
1 [inner, left, right] join2 using (同名字段列表)
--实例
select * from my_student left join my_class using (id)  --结果同上

一般不会用到由于设计表的时候不会出现同名字段