【MySQL】数据库多表链接的查询方式

​​​​​​​数据库的多表联查可以通过连接运算实现,即将多张表通过主外键关系关联在一起进行查询

多表联查的方式主要分为两大类:非等值联查等值联查

首先先建立了两张表:student表、sc表。基于这两张表演示多表联查。

create table Student(
    Sid int primary key auto_increment, 
    Sname varchar(10), 
    birthday datetime, 
    Ssex varchar(10), 
    classid int
);

create table SC(
    Sid int, 
    Cid int, 
    score decimal(18,1),
    foreign key(Sid) references Student(Sid),
    foreign key(Cid) references Course(Cid)
);

​​​​​​​​​​​​​​

非等值联查:​​​​​​​

select * from student,sc

 

这种查询会产生笛卡尔积:也就是student表内所有数据以及sc表内所有数据的乘积。这种情况是由于没有有效的连接条件产生的,并不适用于表内存在大量数据的情况。为避免笛卡尔积的产生就需要用到等值联查。

等值联查

select * from studend,sc where student.sid = sc.sid

这种使用where子句的等值查询方式只适用于表内数据量小的情况,且只能挑选一次

等值查询有内联查询外联查询

我们先来看看内联查询数据量大时使用,虚拟表按照数据量最大的表创建

语法:select * from 表1 inner join 表2 on 条件

select * from student inner join sc on student.sid = sc.sid

这条内联查询语句得到的数据是筛选两个表内相同sid的记录,至少有一行记录匹配,就能返回结果,如下图所示:

外联查询:左外联、右外联

左外联查询:显示主表全部信息,join左边为主查表

语法:select * from 表1 left join 表2 on 条件

select * from student left join sc on student.sid = sc.sid

 以student表为主表查询记录,所以没有成绩的学生记录也在查询结果中,如下图所示:

右外联查询: 显示主表全部信息,join右边为主查表

语法:select * from 表1 right join 表2 on 条件

select * from student right join sc on student.sid = sc.sid

以sc表为主表查询记录,从sc中返回所有的记录,即便在student中没有匹配的行。

如下图所示:

总结: 

多表联查的方式:

1.非等值联查,产生笛卡尔积,不适合数据量大时使用

2.等值查询,【单独where子句查询,内联查询,外联查询(左外联,右外联)】

        ①单纯使用where子句,同样不适合大量数据时使用

        ②内联查询 inner join 

        ③左外联查询 left join (join左边为主表)

        ④右外联查询 right join (join右边为主表)

以上就是多表联查的几种方式,希望对看到这里的你有所帮助。与君共勉。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值