理解SQL的四种连接---内连接、左外连接、右外连接、全连接

@Adrian

1、自然连接

自然连接不用指定连接列,也不能使用ON语句,它默认比较两张表里相同的列

2、内连接

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集中选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他两个表中没有匹配的所有行,所以内连接可能会造成信息的丢失。

3、左外连接

LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

4、右外连接

RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

5、全连接

FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

例子:

a表:

idname
1张三
2李四
3王五

b表:

idjobparent_id
1231
2342
3344

a.id同parent_id存在关系
1)内连接

select a*,b* from a inner join b on a.id=b.parent_id
idnameidjobparent_id
1张三1231
2李四2342

2)左连接

select a*,b* from a left join b on a.id=b.parent_id
idnameidjobparent_id
1张三1231
2李四2342
3王五nullnullnull

3)右连接

select a*,b* from a right join b on a.id=b.parent_id
idnameidjobparent_id
1张三1231
2李四2342
nulllnull3344

4)全连接

select a*,b* from a full join b on a.id=b.parent_id
idnameidjobparent_id
1张三1231
2李四2342
3王五nullnullnull
nullnull3344
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要从两个表中获取值并使用左连接连接起来,可以使用以下查询语句: SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.关联字段 = 表2.关联字段 在这个查询中,表1是左表,表2是表。通过指定关联字段,可以将两个表连接起来。左连接会保留左表的所有行,并将能够通过关联字段连接表的内容在一行内显示,不能关联到的内容则分别显示,并用缺失值填充。 请注意,上述查询中的"*"表示选择所有列。如果只想选择特定的列,可以将"*"替换为所需的列名。 参考引用: \[1\] 有了对左连结和连结的了解, 就不难理解全外连结的含义了. 全外连结本质上就是对左表和表的所有行都予以保留, 能用 ON 关联到的就把左表和表的内容在一行内显示, 不能被关联到的就分别显示, 然后把多余的列用缺失值填充。 \[2\] 如果有两张表,分别为表 student 和表 class ,要查出每个学生所对应的班级名称,用左连接应该怎么做? 输入: SELECT * FROM student left join class ON student.class_id = class.class_id 输出: 在这里,左表的第 4 条记录并没有匹配到表的任何内容,所以表的相应内容显示为 NULL 。 \[3\] 如果想连接表 student 和表 class 查询每个学生所对应的班级名称,用连接应该怎么做?会与左连接查询有多大的区别呢? 输入: SELECT * FROM student right join class ON student.class_id = class.class_id 输出: 在这里,表的第 4 条记录并没有匹配到左表的任何内容,所以左表的相应内容显示为 NULL 。 #### 引用[.reference_title] - *1* [SQL入门-连结(JOIN)](https://blog.csdn.net/w3tty/article/details/114554427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SQL Server实践——聚合函数、高级数据查询](https://blog.csdn.net/weixin_45082647/article/details/105352766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值