什么时候用 INNER JOIN,什么时候用 LEFT JOIN?

首先准备两张表:

  • 商品表:存放商品信息
  • 图片表:存放图片

然后是建表语句。

商品表,商品的图片是关联到图片表的id

CREATE TABLE product (
    id int,
    name varchar(100) COMMENT '名称',
    img_id int COMMENT '关联的图片id'
);

图片表

CREATE TABLE image (
    id int,
    url varchar(500) COMMENT '图片的url'
);

图片表有4条数据

INSERT INTO image (id, url) VALUES 
(1, 'f7c27424b538281fee5f00db5f83c2de.jpg'),
(2, '522748524ad010358705b6852b81be4c.png'),
(3, '97adf9fdd4c3e8423f37a208beb47a7a.gif'),
(4, '7b1847d909f17365bec38b04b9da6e57.webp');

商品表里有4个商品,其中两个商品没有图片

INSERT INTO product (id, name, img_id) VALUES 
(1, '杯子', 1),
(2, '电脑', null),
(3, '大米饭', 3),
(4, 'PS4', null);

查询所有的商品的所有信息

列出所有的商品的所有信息,包括图片的 url。因为商品表的 img_id 关联到图片的 id,我首先想到的是这样的 sql 语句

SELECT
    product.id,
    product.name,
    image.url
FROM
    product,
    image
WHERE
    product.img_id = image.id

查询结果

idnameurl
1杯子f7c27424b538281fee5f00db5f83c2de.jpg
3大米饭97adf9fdd4c3e8423f37a208beb47a7a.gif

这样的结果看起不对,没有列出所有的商品。因为商品的记录有4条,这里只列出了2条。另外两个没有图片的商品哪里去了?

正确的做法

正确的做法是列出所有的商品,如果图片不存在就显示为 NULL。这时候就可以使用左连接——LEFT JOIN

SELECT
    product.id,
    product.name,
    image.url
FROM
    product
LEFT JOIN image ON product.img_id = image.id

查询结果

idnameurl
1杯子f7c27424b538281fee5f00db5f83c2de.jpg
3大米饭97adf9fdd4c3e8423f37a208beb47a7a.gif
2电脑NULL
4PS4NULL

INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别

INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别

(INNER) JOIN:Returns records that have matching values in both tables
LEFT (OUTER) JOIN:Return all records from the left table, and the matched records from the right table
RIGHT (OUTER) JOIN:Return all records from the right table, and the matched records from the left table



作者:红烧排骨饭
链接:https://www.jianshu.com/p/a0c0a1ab49bf
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值