MySQL的左连接与右链接、内连接的区别

博客介绍了数据库连接的相关知识。内连接会忽略两表中对应不起来的数据,只显示关联数据;左连接以左表为基准,显示左表全量数据,右表无对应数据用null补齐;右连接以右表为准,显示右表全量数据,左表无对应数据用null补齐。

内连接:系统会自动忽略两个表中对应不起来的数据,只显示两个表中关联的数据
左连接:一左边的表为基准,将左边的数据全部显示出来,右表中没有对应的数据用null补齐,数据多
了不显示
右连接:以右表为准,将右表的数据全部显示出来,左表中没有相对应的数据用null补齐,数据多了不
显示

### 不同类型的 JOIN 介绍 #### 左连接 (LEFT JOIN) 左连接返回左表中的所有记录,以及表中存在的匹配记录。如果表中不存在匹配,则结果集中相应的列包含 NULL。 ```sql SELECT * FROM table_left AS l LEFT JOIN table_right AS r ON l.id = r.left_id; ``` 此操作会保留左侧表格 `table_left` 的全部行数,并尝试找到侧表格 `table_right` 中相匹配的项;当找不到对应关系时,在最终的结果集里来自边表的相关字段会被填充成NULL值[^1]。 #### 连接 (RIGHT JOIN) 连接正好相反于左连接,它返回的是表所有的记录加上左边存在的匹配记录。对于那些在左表没有找到配对的情况,其对应的属性将被设置为空(NULL)。 ```sql SELECT * FROM table_left AS l RIGHT JOIN table_right AS r ON l.id = r.left_id; ``` 这里展示了如何利用SQL语句实现两个表之间的外联接,即优先显示`table_right`的所有条目并补充可能有的关联数据自`table_left`之中。 #### 内连接 (INNER JOIN) 内连接只选取两表间存在交集的部分作为输出,也就是说只有满足条件(通常是键值相同)才会出现在查询结果当中。 ```sql SELECT * FROM table_left AS l INNER JOIN table_right AS r ON l.id = r.left_id; ``` 上述例子说明了怎样执行一次内部链接,仅获取到共同拥有的部分——也就是两个集合重叠之处所代表的信息实体。 ### 实际案例分析 假设有一个订单(order)表和客户(customer)表: | order_id | customer_id | | --- | --- | | 1 | 1 | | 2 | 2 | | customer_id | name | | --- | --- | | 1 | Alice | | 2 | Bob | | 3 | Charlie | - 使用 **INNER JOIN** 将得到如下结果: | order_id | customer_id | name | | --- | --- | --- | | 1 | 1 | Alice | | 2 | 2 | Bob | 这是因为查找出两者都具有的customer_ids(1 和 2),而忽略了不在此范围内的任何一方的数据。 - 如果采用 **LEFT JOIN**, 则可以获得这样的列表: | order_id | customer_id | name | | --- | --- | --- | | 1 | 1 | Alice | | 2 | 2 | Bob | 这表明即使某些顾客从未下单过也不会丢失这些客户的资料,因为是从订单表出发做扩展。 - 对应地,若是选择了 **RIGHT JOIN**, 输出将是: | order_id | customer_id | name | | --- | --- | --- | | 1 | 1 | Alice | | 2 | 2 | Bob | | NULL | 3 | Charlie | 这意味着即便有些顾客未曾有过购买行为,依然会在报表中体现出来,只是它们不会有关联的订单编号而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值