mysql 左连接b表的一条数据_数据库左连接、右连接、内连接、全连接笔记

数据表的设计

表A:

-- auto-generated definition
CREATETABLE table_a (
   PK    INT(10)     NOTNULLPRIMARYKEY,
   ValueVARCHAR(25) NULL
 )   COMMENT '表A';

表B:

-- auto-generated definition
CREATETABLE table_b (
   PK    INT(10)     NOTNULLPRIMARYKEY,
   ValueVARCHAR(50) NULL
 )   COMMENT '表B';

表A的数据

1af5c141eceb34006bc514686e17dca5.png

表B的数据

313b2450511374925cf7ec2f968e869f.png

韦恩图

9b3072e1cbdf8a3550a38be78e4fdce9.png

详细分析

1.INNER JOIN (内连接)

内连接是一种一一映射关系,就是两张表都有的才能显示出来

用韦恩图表示是两个集合的交集,如图:

469039022d31643dd81cb065169ab52c.png

实现代码:

SELECT  A.PK AS A_PK,A.ValueAS A_Value,B.PK AS B_PK,B.ValueAS B_Value FROM table_a A INNERJOIN table_b B ON A.PK = B.PK;

查询结果:

1670d94f6470fe630ca6172569a27eab.png

2.LEFT JOIN (左连接)

左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,所谓的左边表其实就是指放在left join的左边的表

用韦恩图表示如下:

df186c63c7d002f1cbb92e35d0c025f5.png

实现代码

SELECT  A.PK AS A_PK,A.ValueAS A_Value,B.PK AS B_PK,B.ValueAS B_Value FROM table_a A LEFTJOIN  table_b B ON A.PK = B.PK;

查询结果:

c1b5ea57ac8ef8b7193635a69da26c00.png

3.RIGHT JOIN(右连接)

右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表

用韦恩图表示如下:

6b87bae9608998ee6f7895b5bfb0509e.png

实现代码:

SELECT  A.PK AS A_PK,A.ValueAS A_Value,B.PK AS B_PK,B.ValueAS B_Value FROM table_a A RIGHTJOIN   table_b B ON A.PK = B.PK;

查询结果:

5730011ba2b108ceb216489432ef03f0.png

4.OUTER JOIN(外连接、全连接)

查询出左表和右表所有数据,但是去除两表的重复数据

韦恩图表示如下:

a1f15aebe4578fda46d8d7cd410cab34.png

实现代码:

SELECT  A.PK AS A_PK,A.ValueAS A_Value,B.PK AS B_PK,B.ValueAS B_Value FROM table_a A FULLJOIN table_b B ON A.PK = B.PK;

上面代码在mysql执行是报错的,因为mysql不支持全连接,只能用以下代码实现效果,含义是左连接+右连接+去重=全连接:

SELECT  A.PK AS A_PK,A.ValueAS A_Value,B.PK AS B_PK,B.ValueAS B_Value FROM table_a A LEFTJOIN  table_b B ON A.PK = B.PK  UNIONSELECT  A.PK AS A_PK,A.ValueAS A_Value,B.PK AS B_PK,B.ValueAS B_Value FROM table_a A RIGHTJOIN  table_b B ON A.PK = B.PK;

查询结果:

78d0406b8c62efaba4d50682eb9c7030.png

5.LEFT JOIN EXCLUDING INNER JOIN(左连接不包含内连接)

这个查询是只查询左边表有的数据,共同有的也不查出来

韦恩图表示如下

de4258f928f230b4c8f9d74ec97723b5.png

实现代码:

SELECT A.PK AS A_PK, A.ValueAS A_Value, B.ValueAS B_Value, B.PK AS B_PK FROM Table_A A LEFTJOIN Table_B B ON A.PK = B.PK WHERE B.PK ISNULL

查询结果:

d704aa2be5938c0bb0e6842f1baf5aeb.png

6.RIGHT JOIN EXCLUDING INNER JOIN(右连接不包含内连接)

这个查询是只查询右边表有的数据,共同有的也不查出来

韦恩图表示如下:

386ad55368e8bbc0f9bfa6b2fbbd6ee8.png

实现代码:

SELECT A.PK AS A_PK, A.ValueAS A_Value, B.PK AS B_PK, B.ValueAS B_Value FROM Table_A A RIGHTJOIN Table_B B ON A.PK = B.PK WHERE A.PK ISNULL

查询结果:

0a9799e5da1c9077d0e976fbbd0c63a4.png

7.OUTER JOIN EXCLUDING INNER JOIN(外连接不包含内连接)

意思就是查询左右表各自拥有的那部分数据

韦恩图表示如下:

22c398c8a87ec5d4fb6a8651197d753e.png

实现代码:

SELECT A.PK AS A_PK, A.ValueAS A_Value, B.ValueAS B_Value, B.PK AS B_PK FROM Table_A A FULLOUTERJOIN Table_B B ON A.PK = B.PK WHERE A.PK ISNULLOR B.PK ISNULL

由于mysql不支持full join,只能通过下面代码模拟实现:

SELECT  A.PK AS A_PK, A.ValueAS A_Value, B.PK AS B_PK, B.ValueAS B_Value  FROM table_a A  LEFTJOIN table_b B ON A.PK = B.PK  WHERE B.PK ISNULLUNIONALLSELECT *  FROM table_a A  RIGHTJOIN table_b B  ON A.PK = B.PK   WHERE A.PK ISNULL;

查询结果:

92e6d6f13cc6a4d7b90d9de34f2abc58.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Mysql数据库连接left join、连接right join和内连接inner join的介绍和演示: 1. 连接left join 连接left join会返回中所有的记录,以及中符合条件的记录。如果中没有符合条件的记录,则返回NULL。 语法: ``` SELECT * FROM a_table LEFT JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个,一个是学生students,一个是成绩scores。学生中有学生的ID和姓名,成绩中有学生的ID和成绩。我们需要查询所有学生的姓名和成绩,如果学生没有成绩,则成绩为NULL。 ```sql SELECT students.name, scores.score FROM students LEFT JOIN scores ON students.id = scores.id; ``` 2. 连接right join 连接right join会返回中所有的记录,以及中符合条件的记录。如果中没有符合条件的记录,则返回NULL。 语法: ``` SELECT * FROM a_table RIGHT JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个,一个是学生students,一个是成绩scores。学生中有学生的ID和姓名,成绩中有学生的ID和成绩。我们需要查询所有成绩和对应的学生姓名,如果成绩中没有对应的学生,则姓名为NULL。 ```sql SELECT students.name, scores.score FROM students RIGHT JOIN scores ON students.id = scores.id; ``` 3. 内连接inner join 内连接inner join会返回中都符合条件的记录。 语法: ``` SELECT * FROM a_table INNER JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个,一个是学生students,一个是成绩scores。学生中有学生的ID和姓名,成绩中有学生的ID和成绩。我们需要查询所有有成绩的学生的姓名和成绩。 ```sql SELECT students.name, scores.score FROM students INNER JOIN scores ON students.id = scores.id; ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值