mysql多表记录id一样 轻松掌握MySQL多表联查

前一段时间在和一个程序员同行闲聊的时候,谈到了MySQL的一些东西。谈完之后他说你对MySQL真是了解啊!我愣了一下,表面故作谦虚说:”where, where!”

前一段时间在和一个程序员同行闲聊的时候,谈到了MySQL的一些东西。谈完之后他说你对MySQL真是了解啊!我愣了一下,表面故作谦虚说:”where, where!”,实际心里暗暗吃惊:“我勒个去,我才知道一点皮毛啊。。。”。

他说他一直没有弄明白MySQL中的多表联查,特别是对于JOIN、INNER JOIN、LEFT JOIN以及RIGHT JOIN的概念很是模糊。这里就整理一下。

先建立两张表并初始化一点数据:

dancer:

mysql> select * from dancer;

+—-+——-+——+

| id | name | age |

+—-+——-+——+

| 1 | Lily | 22 |

| 2 | PSY | 46 |

| 3 | Jolin | 26 |

+—-+——-+——+

review:

mysql> select * from review;

+—-+———–+——-+

| id | dancer_id | score |

+—-+———–+——-+

| 1 |2 |3 |

| 2 |1 |4 |

| 3 |5 |2 |

+—-+———–+——-+

以上数据的特点就是dancer中的Jolin没有review,而review中的第三条没有对应的dancer。也就是说数据并不是一一对应的,这种情况在实际情况中是一种普遍的存在。

那么现在我要获得dancer以及其review的数据,就可以用JOIN来实现多表联查。

1. JOIN

SELECT d.id, d.name, d.age, r.score FROM dancer AS d JOIN review AS r ON d.id=r.dancer_id;

+—-+——+——+——-+

| id | name | age | score |

+—-+——+——+——-+

| 2 | PSY | 46 |3 |

| 1 | Lily | 22 |4 |

+—-+——+——+——-+

2. INNER JOIN

SELECT d.id, d.name, d.age, r.score FROM dancer AS d INNER JOIN review AS r ON d.id=r.dancer_id;

+—-+——+——+——-+

| id | name | age | score |

+—-+——+——+——-+

| 2 | PSY | 46 |3 |

| 1 | Lily | 22 |4 |

+—-+——+——+——-+

INNER JOIN和JOIN是一样的,会查询出两个表中一一关联的记录,舍去没有对应数据的记录。

3. LEFT JOIN

SELECT d.id, d.name, d.age, r.score FROM dancer AS d LEFT JOIN review AS r ON d.id=r.dancer_id;

+—-+——-+——+——-+

| id | name | age | score |

+—-+——-+——+——-+

| 1 | Lily | 22 |4 |

| 2 | PSY | 46 |3 |

| 3 | Jolin | 26 | NULL |

+—-+——-+——+——-+

LEFT JOIN保留了左边的表dancer的记录,不管右边的表review是否有对应的数据。

4. RIGHT JOIN

SELECT d.id, d.name, d.age, r.score FROM dancer AS d RIGHT JOIN review AS r ON d.id=r.dancer_id;

+——+——+——+——-+

| id | name | age | score |

+——+——+——+——-+

| 2 | PSY | 46 |3 |

| 1 | Lily | 22 |4 |

| NULL | NULL | NULL |2 |

+——+——+——+——-+

RIGHT JOIN就和LEFT JOIN相反。

其实就这么简单。

SQL JOIN

原文链接:

原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/515.html

(0)
筱凯筱凯
上一篇 2024 年 7 月 12 日
下一篇 2024 年 7 月 12 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,500M大带宽限量抢购  >>点击进入