香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > MYSQL >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

深入理解mysql的自连接和join关联


时间:2020-11-03 13:29 作者:admin610456


一、mysql/' target='_blank'>mysql自连接

MySQL有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息。

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

SELECT * FROM shoping WHERE price>27

可想而知,这是有多么简单,假设你并不知道数据库表详细数据或者数据量相当庞大呢?作为一个数据库管理员,我们就要用别的方式迅速找出所需要的数据。

分步查询

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

SELECT price FROM shopping WHERE name='惠惠' //得出price查询结果为27SELECT * FROM shopping WHERE price>27

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

自连接方式:

SELECT b.* from shopping as a,shopping as bwhere 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 aRIGHT JOIN category as bON a.id=b.goods_idORDER BY b.id


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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)