理解MySQL数据库中四种连接-内连接、左外连接、右外连接、交叉连接

本文章主要对目前比较常用的SQL四种连接方式进行介绍,文笔略有粗糙,还请阅读的朋友多提些建议。


四种连接方式:

  1. 内连接(INNER JOIN)
  2. 左外连接(LEFT JOIN)
  3. 右外连接(RIGHT JOIN)
  4. 交叉连接(CROSS JOIN)

接下将对四种连接方式做详细的介绍

首先先创建出两张下面会用到的a、b两张表。
例:a表

idname
1张三
2李四
3王五

例:b表

idjobparent_id
1java工程师1
2iOS工程师2
3测试4

a表中的id字段与b表中的parent_id字段为关联关系

1、内连接(INNER JOIN)

内连接使用比较运算符进行表间某些列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接分为等值连接、自然连接、不等连接三种。

等值连接
通过a.id和b.parent_id使用等于号(=)运算符比较被连接的列的列值,进行SQL语句的查询。

select * from a inner join b on a.id=b.parent_id

结果

idnameid(2)jobparent_id
1张三1java工程师1
2李四2iOS工程师2

自然连接
自然连接和等值连接唯一不同的是,它是有选择地显示列,请看下面的案例。

select a.id as '编号',a.`name` as '姓名',b.job as '工作' from a inner join b on a.id=b.parent_id

结果

编号姓名工作
1张三java工程师
2李四iOS工程师

不等连接
在连接条件使用时除了运算符以外的其他比较运算符,来比较被连接的列值,那么这个连接就称为不等连接。这些运算符包括>、>=、<、<=、!>、!<和<>。这个就不做演示了,自已理解一下哈,我想这个不太困难(毕竟程序员都是高智商的动物)。

2、左外连接(LEFT JOIN)

以左边表为主表,右边表为从表,显示出主表中所有的数据行,如果右表中没有与之匹配的数据,则显示NULL。

select * from a left join b on a.id=b.parent_id       

结果

idnameid(2)jobparent_id
1张三1java工程师1
2李四2iOS工程师2
3王五nullnullnull
3、右外连接(RIGHT JOIN)

右外连接和左外连接对应,以右表为主表,左表为从表,其他一样。显示出主表中所有的数据行,如果从表中没有与之匹配的数据,则显示NULL。

select * from a RIGHT join b on a.id=b.parent_id       

结果

idnameid(2)jobparent_id
1张三1java工程师1
2李四2iOS工程师2
nullnull3测试4
4、交叉连接(CROSS JOIN)

如果没有WHERE子句,交叉连接返回连接表中所有数据行的笛卡尔积,数据行行数 = 表a行数 * 表b行数

  select  *  from a cross join  b

结果

idnameid(2)jobparent_id
1张三1java工程师1
2李四1java工程师1
3王五1java工程师1
1张三2iOS工程师2
2李四2iOS工程师2
3王五2iOS工程师2
1张三3测试4
2李四3测试4
3王五3测试4

以上就是我通过实际运用对四种连接的理解,如果大家觉得有什么不对的地方,欢迎指示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值