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

·概念

将多张表连在一起查询(会导致记录数行和字段数列发生改变)
意义:
在关系型数据库设计过程中,实体与实体之间是存在很多联系的。
在关系型数据库表的设计过程中,遵循着关系来设计:一对一,一对多,多对多。通常在实际操作中,需要利用这层关系来保证数据的完整性。

·交叉连接

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

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;

在查询数据的时候,不同表可能会有同名字段,这个时候需要加上表名才能区分

select * from my_student inner join my_class on my_student.class_id = my_class.id;

而表名太长时,通常可以使用别名。

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。
外连接分为两种:

  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班

在这里插入图片描述
注:非常常用的一种获取数据的方式,作为数据获取对应主表以及其他关联数据

·自然连接

自然连接:natural join,自然连接,就是自动匹配连接条件:系统以字段名字作为匹配模式(同名字段就作为条件,多个同名字段都作为条件)。
1.自然内连接

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)  --结果同上

通常不会用到因为设计表的时候不会出现同名字段

发布了19 篇原创文章 · 获赞 20 · 访问量 9544

猜你喜欢

转载自blog.csdn.net/qq_39323164/article/details/104125677