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

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


四种连接方式:

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

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

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

id name
1 张三
2 李四
3 王五

例:b表

id job parent_id
1 java工程师 1
2 iOS工程师 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

结果

id name id(2) job parent_id
1 张三 1 java工程师 1
2 李四 2 iOS工程师 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       

结果

id name id(2) job parent_id
1 张三 1 java工程师 1
2 李四 2 iOS工程师 2
3 王五 null null null

3、右外连接(RIGHT JOIN)

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

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

结果

id name id(2) job parent_id
1 张三 1 java工程师 1
2 李四 2 iOS工程师 2
null null 3 测试 4

4、交叉连接(CROSS JOIN)

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

  select  *  from a cross join  b

结果

id name id(2) job parent_id
1 张三 1 java工程师 1
2 李四 1 java工程师 1
3 王五 1 java工程师 1
1 张三 2 iOS工程师 2
2 李四 2 iOS工程师 2
3 王五 2 iOS工程师 2
1 张三 3 测试 4
2 李四 3 测试 4
3 王五 3 测试 4

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

你可能感兴趣的:(数据库)