数据库inner join、full join、left join、union、union all区别

数据库inner join、full join、left join、union、union all区别

表a_test

在这里插入图片描述

表b_test

在这里插入图片描述

INNER JOIN

是A和B的交集

SELECT * FROM a_test INNER JOIN b_test ON a_test.name = b_test.namesa

Inner join 产生的结果集中,是A和B的交集。

在这里插入图片描述

FULL OUTER JOIN

产生A和B的并集

SELECT * FROM a_test FULL OUTER JOIN b_test ON a_test.name = b_test.
### SQL 中不同 JOIN 类型的区别 #### INNER JOIN `INNER JOIN` 返回两个表中满足连接条件的记录。如果某个表中的某条记录无法找到另一个表中对应的匹配项,则该记录不会被包含在最终的结果集中[^1]。 ```sql SELECT a.*, b.* FROM table_a AS a INNER JOIN table_b AS b ON a.id = b.id; ``` #### LEFT JOIN (LEFT OUTER JOIN) `LEFT JOIN` 返回左表 (`table_a`) 所有记录以及右表 (`table_b`) 中与之匹配的记录。对于那些在右表中找不到匹配项的左表记录,其对应位置会被填充 `NULL` 值[^2]。 ```sql SELECT a.*, b.* FROM table_a AS a LEFT JOIN table_b AS b ON a.id = b.id; ``` #### RIGHT JOIN (RIGHT OUTER JOIN) `RIGHT JOIN` 是 `LEFT JOIN` 的镜像操作。它返回右表 (`table_b`) 所有记录以及左表 (`table_a`) 中与之匹配的记录。对于那些在左表中找不到匹配项的右表记录,其对应位置会被填充 `NULL` 值[^2]。 ```sql SELECT a.*, b.* FROM table_a AS a RIGHT JOIN table_b AS b ON a.id = b.id; ``` #### FULL JOIN (FULL OUTER JOIN) `FULL JOIN` 结合了 `LEFT JOIN` `RIGHT JOIN` 的特性。它返回两表中所有的记录,并将不匹配的位置填充为 `NULL` 值。换句话说,只要任意一端存在匹配的数据,就会出现在结果集中[^3]。 ```sql SELECT a.*, b.* FROM table_a AS a FULL JOIN table_b AS b ON a.id = b.id; ``` 需要注意的是,在某些数据库系统(如 SQLite)中并不直接支持 `FULL JOIN`,可以通过组合使用 `UNION` 来模拟这一功能: ```sql SELECT a.*, b.* FROM table_a AS a LEFT JOIN table_b AS b ON a.id = b.id UNION SELECT a.*, b.* FROM table_a AS a RIGHT JOIN table_b AS b ON a.id = b.id; ``` --- ### 总结 - **INNER JOIN**: 只保留两张表中有匹配关系的记录[^1]。 - **LEFT JOIN**: 保留左表的所有记录,未匹配部分用 NULL 表示[^2]。 - **RIGHT JOIN**: 保留右表的所有记录,未匹配部分用 NULL 表示[^2]。 - **FULL JOIN**: 同时保留左右两侧的所有记录,未匹配部分用 NULL 表示。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东木月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值