MySQL之左、右、内关联类型解析

本文详细解析了SQL中的三种联接操作:左联接、右联接与内联接。通过具体例子展示了它们的使用方式和结果差异,包括左表与右表的基础概念、联接条件的放置位置及其对结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是例子分析

表A记录如下:

id name

2 jack

4 hello

9 heihei

3 world

1 dream

 

表B记录如下:

id name

2 miaomiao

4 yanyan

7 jack

 

创建这两个表SQL语句如下:

create table a (

id varchar(10),

name varchar(30)

);

 

INSERT INTO `a` VALUES ('2', 'jack');

INSERT INTO `a` VALUES ('4', 'hello');

INSERT INTO `a` VALUES ('9', 'heihei');

INSERT INTO `a` VALUES ('3', 'world');

INSERT INTO `a` VALUES ('1', 'dream');

 

create table b (

id varchar(10),

name varchar(30)

);

 

INSERT INTO `b` VALUES ('2', 'miaomiao');

INSERT INTO `b` VALUES ('4', 'yanyan');

INSERT INTO `b` VALUES ('7', 'jack');

 



实验如下:

1.left join(左联接)

 

sql语句如下:

SELECT * FROM a

LEFT JOIN b

ON a.id=b.id

 

结果如下:

mysql> select * from a left join b on a.id = b.id;

+------+--------+------+----------+

| id | name | id | name |

+------+--------+------+----------+

| 2 | jack | 2 | miaomiao |

| 4 | hello | 4 | yanyan |

| 9 | heihei | NULL | NULL |

| 3 | world | NULL | NULL |

| 1 | dream | NULL | NULL |

+------+--------+------+----------+

5 rows in set (0.73 sec)

 

结果说明:

left join是以A表的记录为基础的,A[主表]可以看成左表,B[副表]可以看成右表,left join是以左表为准的.

换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: a.id = b.id).

B表记录不足的地方均为NULL.

 



2.right join(右联接)

 

sql语句如下:

SELECT * FROM a

RIGHT JOING b

ON a.id = b.id

 

结果如下:

mysql> select * from a right join b on a.id = b.id;

+------+-------+------+----------+

| id | name | id | name |

+------+-------+------+----------+

| 2 | jack | 2 | miaomiao |

| 4 | hello | 4 | yanyan |

| NULL | NULL | 7 | jack |

+------+-------+------+----------+

3 rows in set (0.00 sec)

 

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B) [主表]为基础的,A[主表]表不足的地方用NULL填充.



3.inner join(相等联接或内联接)

 

sql语句如下:

mysql> select * from a inner join b on a.id = b.id;

+------+-------+------+----------+

| id | name | id | name |

+------+-------+------+----------+

| 2 | jack | 2 | miaomiao |

| 4 | hello | 4 | yanyan |

+------+-------+------+----------+

2 rows in set (0.00 sec)

 

结果说明:

很明显,这里只显示出了 a.id = b.id的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

LEFT JOIN操作用于在任何的 FROM 子句中

 

 



没有where条件等价于完全关联,反之则为内部关联。其约束是先ON 再 WHERE ,这里一定要注意的是:条件是放在ON里还是WHERE里,放的位置不同结果可能完全不一样的,WHERE 后面所有字段都是用来进一步过滤的。

副表的约束条件尽量在ON里写,因为ON关联后再约束副表的话可能丢东西。主表的约束基本上写在ON或WHERE里都行。MySQL之左、右、内关联类型解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值