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

 更新时间:2017年04月21日 15:30:04   作者:HuiHui  
这篇文章主要给大家介绍了关于mysql的自连接和join关联的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

一、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


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

总结

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

相关文章

  • Ubuntu安装MySQL的三种方式以及卸载MySQL

    Ubuntu安装MySQL的三种方式以及卸载MySQL

    在Linux系统中,卸载MySQL可通过dpkg-l和grep命令组合来查询已安装的MySQL相关软件包,然后使用适当命令进行卸载,安装MySQL时,可以选择直接安装或编译安装,直接安装需要设置密码,编译安装需选择带boost库的版本,初始化MySQL时要指定data目录
    2024-10-10
  • MySQL主从同步、读写分离配置步骤

    MySQL主从同步、读写分离配置步骤

    根据要求配置MySQL主从备份、读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记
    2012-03-03
  • mysql慢查询优化之从理论和实践说明limit的优点

    mysql慢查询优化之从理论和实践说明limit的优点

    今天小编就为大家分享一篇关于mysql慢查询优化之从理论和实践说明limit的优点,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • MySQL 服务和数据库管理

    MySQL 服务和数据库管理

    今天MySQL总结一些方法和一些基础的内容,下面文章将围绕MySQL 服务与数据库管理得相关资料展开内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • MySQL数据优化-多层索引

    MySQL数据优化-多层索引

    这篇文章主要介绍了MySQL数据优化 多层索引,文章围绕MySQL数据优化 多层索引的相关资料展开详细的内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL server)

    MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL s

    MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL server)
    2011-08-08
  • MySQL中explain使用快速查询手册

    MySQL中explain使用快速查询手册

    我们会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,会用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用索引,下面这篇文章主要介绍了关于MySQL中explain使用快速查询手册的相关资料,需要的朋友可以参考下
    2022-10-10
  • 允许远程访问MySQL的实现方式

    允许远程访问MySQL的实现方式

    这篇文章主要介绍了允许远程访问MySQL的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Mysql中的复合查询详解

    Mysql中的复合查询详解

    这篇文章主要介绍了Mysql中的复合查询的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • mysql中between的用法及说明

    mysql中between的用法及说明

    这篇文章主要介绍了mysql中between的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论