MYSQL内外连接查询实践

发布时间 2023-10-29 17:15:36作者: 菜鸟的奋斗之路

自身连接查询

自身连接,就是将表本身和表进行笛卡尔积计算,得到结果,但是由于表名相同,因此要先起一个别名:

SELECT * FROM 表名 别名1, 表名 别名2

自身连接查询的连接对象变成自己和自己了。

例如1:student 表自身连接查询

# 自身连接查询,笛卡尔积:81 条数据
select * from student t1, student t2;

# 自身连接查询,只展示出:t1.sid = t2.sid,有 9 条数据
select * from student t1, student t2 where t1.sid = t2.sid;

 重点:表名后续再跟一个表的名称,意为:给表起别名!

例如2:查询学生表自身连接,只展示出:t1.sid = t2.sid 的 t1学生姓名,t2学生年龄

select t1.name as 't1姓名', t2.age as 't2年龄' from student t1, student t2 where t1.sid = t2.sid;

外连接查询

外连接就是专门用于联合查询情景的,比如现在有一个存储所有用户的表,还有一张用户详细信息的表,我希望将这两张表结合到一起来查看完整的数据,我们就可以通过使用外连接来进行查询,外连接有三种方式:

  • 通过使用inner join进行内连接,只会返回两个表满足条件的交集部分:

  • 通过使用left join进行左连接,不仅会返回两个表满足条件的交集部分,也会返回左边表中的全部数据,而在右表中缺失的数据会使用null来代替(右连接right join同理,只是反过来而已,这里就不再介绍了):

 例如1:查询出 teach 表中有被授课学生的学生详情【使用 inner join 包含了老师的编号 stu.sid = teach.sid】

select stu.*, teach.tid as '老师编号' from student stu inner join teach on stu.sid = teach.sid;

重点理解:inner join 取两张表的交集部分!

例如2:查询出 teach 表中有授课老师的老师详情,学生学号

-- 查询有被授课的学生详情
select t.*, teach.sid from teacher t inner join teach on t.tid = teach.tid;

查询的结果中:表名.* 意为:展示表中所有的属性信息,例如:stu.* 展示student表中所有属性信息!