当前位置: 代码网 > it编程>数据库>Mysql > mysql中的自连接与join关联

mysql中的自连接与join关联

2024年09月05日 Mysql 我要评论
mysql自连接mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息。一般情况我们看到这张表我们第一

mysql自连接

mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。

我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息。

一般情况我们看到这张表我们第一时间用语句进行操作:

select * from shoping where price>27

可想而知,这是有多么简单,假设你并不知道数据库表详细数据或者数据量相当庞大呢?

作为一个数据库管理员,我们就要用别的方式迅速找出所需要的数据。

分步查询

最简单的一种方式,也是最容易想到操作:

select price from shopping where name='惠惠' //得出price查询结果为27
select * from shopping where price>27

与采用自连接的方式相比,这种方法需要对中间结果进行人工干预,显然不利于程序中的自动处理操作。

自连接方式

select b.* 
from shopping as a,shopping as b
where a.name='惠惠' 
and a.price<b.price 
order by b.id

我们可以获取到如下表信息:

注意点:

  • 别名 a,b虽然名称不同,但是同一个表,定义别名的目的是更方便在自身进行删选。
  • 执行select通过(中间表)所得到的b.*,,就是最终结果。

子查询

子查询也是常用的一种方式,就是在select里嵌套select。

实现代码如下:

select * from shopping 
where price>(select price from 'shopping' where name='惠惠')

所得结果如下所示,可见两种方式所得结果相同:

join

inner join

内关联的主要作用是在表中存在至少一个匹配时,就返回结果集,这里的inner join和join作用相同,所以一起介绍。

下面给出两张表,分别为goods和category表:

select * from goods inner join category 
on goods.id=category.goods_id 
order by gods.id

left join

left join 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

做项目时建议使用左关联。但是存在很多表关联的,一个表对a是左连接,但同时对b是右连接,这时加上右连接,写起来可能方便一些。

套用一开始的两张表,进行左关联查询:

select goods.*,category.cate_name 
from goods left join category 
on goods.id=category.goods_id 
order by goods.id

right join

right join 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

套用一开始的两张表进行右关联查询:

select a.goods_name,a.price,b.*
from goods as a
right join category as b
on a.id=b.goods_id
order by b.id

对于多表关联的情况,就是多加几条关联语句。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com