mysql left join的基本用法及on与where的区别是什么

发布时间:2023-05-05 09:55:31 作者:iii
来源:亿速云 阅读:146

mysql left join的基本用法及on与where的区别是什么

在MySQL中,LEFT JOIN是一种常用的表连接操作,用于从左表中获取所有记录,并尝试与右表中的记录进行匹配。如果右表中没有匹配的记录,则结果集中右表的字段将显示为NULL。本文将介绍LEFT JOIN的基本用法,并探讨ONWHERELEFT JOIN中的区别。

1. LEFT JOIN的基本用法

LEFT JOIN的基本语法如下:

SELECT 列名
FROM 左表
LEFT JOIN 右表
ON 左表.列名 = 右表.列名;

示例

假设我们有两个表:usersorders

| id | name | |—–|——-| | 1 | Alice | | 2 | Bob | | 3 | Carol |

| id | user_id | amount | |—–|———|——–| | 1 | 1 | 100 | | 2 | 2 | 200 | | 3 | 4 | 300 |

我们想要获取所有用户及其订单信息,即使某些用户没有订单。可以使用以下查询:

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;

查询结果

name amount
Alice 100
Bob 200
Carol NULL

在这个结果中,Carol没有对应的订单,因此amount字段显示为NULL

2. ON与WHERE的区别

LEFT JOIN中,ONWHERE子句的作用有所不同,理解它们的区别对于正确使用LEFT JOIN至关重要。

2.1 ON子句

ON子句用于指定连接条件,即在连接两个表时,如何匹配记录。ON子句中的条件决定了哪些记录会被连接在一起。

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;

在这个查询中,ON users.id = orders.user_id指定了连接条件,即users表中的id字段与orders表中的user_id字段相匹配。

2.2 WHERE子句

WHERE子句用于过滤结果集,即在连接完成后,对结果集进行进一步的筛选。WHERE子句中的条件会影响最终返回的记录。

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders
ON users.id = orders.user_id
WHERE orders.amount > 100;

在这个查询中,WHERE orders.amount > 100会过滤掉所有amount小于或等于100的记录。由于LEFT JOIN会返回左表中的所有记录,即使右表中没有匹配的记录,WHERE子句会进一步过滤这些记录。

2.3 ON与WHERE的区别

示例对比

假设我们有以下查询:

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders
ON users.id = orders.user_id
WHERE orders.amount > 100;

查询结果

name amount
Bob 200

在这个结果中,Alice的订单金额为100,不满足WHERE条件,因此被过滤掉。Carol没有订单,amountNULL,也不满足WHERE条件,因此也被过滤掉。

如果将WHERE条件改为ON条件:

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders
ON users.id = orders.user_id AND orders.amount > 100;

查询结果

name amount
Alice NULL
Bob 200
Carol NULL

在这个结果中,AliceCarol的订单金额不满足ON条件,因此amount字段显示为NULL,但左表中的记录仍然保留。

3. 总结

理解ONWHERE的区别,可以帮助我们更好地使用LEFT JOIN,避免在查询中出现意外的结果。

推荐阅读:
  1. mysql community server 8.0.12如何安装配置
  2. mysql 8.0.12 winx64详细安装教程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql left join where

上一篇:怎么使用MyBatis框架实现增删改查操作

下一篇:MySQL怎么实现批量推送数据到Mongo

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》