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

作者:HuiHui 时间:2024-01-21 11:40:01 

一、mysql自连接

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

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

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


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

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

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

注意点:

别名 a,b虽然名称不同,但是同一个表,定义别名的目的是更方便在自身进行删选。

执行select通过(中间表)所得到的b.*,,就是最终结果。

子查询

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

实现代码如下:


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

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

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

二、JOIN

INNER JOIN

内关联的主要作用是在表中存在至少一个匹配时,就返回结果集,这里的inner join和join作用相同,所以一起介绍。
下面给出两张表,分别为goods和category表:

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

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


SELECT * FROM goods INNER JOIN category
ON goods.id=category.goods_id
ORDER BY gods.id

结果如下所示:

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

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

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

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

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

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

总结

标签:mysql,自连接,join关联
0
投稿

猜你喜欢

  • Python中__init__.py文件的作用详解

    2021-12-22 13:04:05
  • Python给你的头像加上圣诞帽

    2023-08-28 11:30:41
  • 对Golang中的runtime.Caller使用说明

    2024-05-21 10:24:43
  • SQL Server触发器及触发器中的事务学习

    2024-01-27 08:48:02
  • vuejs实现下拉框菜单选择

    2023-09-23 08:49:54
  • python批量识别图片指定区域文字内容

    2021-04-26 13:59:54
  • Python实现获取汉字偏旁部首的方法示例【测试可用】

    2022-10-26 16:42:16
  • MySQL使用LVM快照实现备份

    2024-01-26 20:21:17
  • Python实现的生成自我描述脚本分享(很有意思的程序)

    2023-08-14 20:21:06
  • Python中的type与isinstance的区别详解

    2021-12-06 19:30:57
  • windows10下python3.5 pip3安装图文教程

    2023-02-25 02:06:44
  • 用python的seaborn画数值箱型图

    2021-04-26 20:43:04
  • 获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用

    2024-01-27 04:21:20
  • uni-app常用的几种页面跳转方式总结

    2023-08-23 20:31:26
  • vue3 setup语法糖之组件传参(defineProps、defineEmits、defineExpose)示例详解

    2024-04-27 16:01:39
  • 使用Go进行单元测试的实现

    2024-04-25 15:11:07
  • MySql nion与Limit查询介绍

    2024-01-23 15:53:52
  • 详解MySQL中的死锁情况以及对死锁的处理方法

    2024-01-20 05:33:33
  • Pyecharts 动态地图 geo()和map()的安装与用法详解

    2023-08-16 17:07:34
  • Vue-cli创建项目从单页面到多页面的方法

    2024-05-21 10:17:04
  • asp之家 网络编程 m.aspxhome.com