MySQL中的LEFT JOIN ON (where)查询
LEFT JOIN ON的使用语法:select [需要查询的字段]from [table_name1]left join [table_name2]on [两个表关联的条件](where [进一步对查询结果过滤的条件])LEFT JOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。以秒杀项目为例,现在有两...
·
LEFT JOIN ON的使用语法:
select [需要查询的字段]
from [table_name1]
left join [table_name2]
on [两个表关联的条件]
(where [进一步对查询结果过滤的条件])
LEFT JOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
以秒杀项目为例,现在有两个表,表结构如下:
goods表:
id | goods_name | goods_price | goods_stock |
---|---|---|---|
1 | iphone | 8765 | 10 |
2 | 华为Meta30 | 9000 | 9 |
3 | 小米9 | 3000 | 6 |
seckill_goods表:
id | goods_id | seckill_price | stock_count | start_date | end_date |
---|---|---|---|---|---|
1 | 1 | 4000 | 4 | 2019-10-22 20:18:00 | 2019-10-25 14:00:14 |
2 | 2 | 5000 | 7 | 2019-10-23 22:00:00 | 2019-10-24 22:00:00 |
现在有一个需求:
查询所有商品的详细信息(包括商品秒杀的信息)
sql语句如下:
select g.*,sg.seckill_price,sg.stock_count,sg.start_date,sg.end_date
from goods g
left join seckill_goods sg
on g.id=sg.goods_id
查询的结果如下:
id | goods_name | goods_price | goods_stock | seckill_price | stock_count | start_date | end_date |
---|---|---|---|---|---|---|---|
1 | iphone | 8765 | 10 | 4000 | 4 | 2019-10-22 20:18:00 | 2019-10-25 14:00:14 |
2 | 华为Meta30 | 9000 | 9 | 5000 | 7 | 2019-10-23 22:00:00 | 2019-10-24 22:00:00 |
3 | 小米9 | 3000 | 6 |
从上表可以看出,左表(goods)的所有行是被列出来了,不管右表(seckill_goods)中有没有匹配的行。
如果这时候需求改为:
根据 商品ID 查询所有商品的详细信息(包括商品秒杀的信息)
这是我们的sql语句就变为:
select g.*,sg.seckill_price,sg.stock_count,sg.start_date,sg.end_date
from goods g
left join seckill_goods sg
on g.id=sg.goods_id
where g.id=#{id}
where条件是在left join查询的临时表生成好之后,再对临时表进行过滤的条件。
更多推荐
已为社区贡献1条内容
所有评论(0)