MySQL燕十八老师课程笔记:第十三课:左连接

要求:打印报价单,打印出所有商品的名称、库存和价格

一张表就是一个集合,每一行就是一个元素。

在数据库的操作上,如何操作表,达到集合的笛卡尔积的效果?
直接用“,”隔开,表明查询即可。

select goods_id,cat_id,goods_name,cat_id,cat_name from goods,category;

在这里插入图片描述ambiguous adj.模糊的

原因:cat_id在两张表中都有,到底指哪张表的cat_id字段呢?

如果在多表联查时,某一列名,在2张或2张以上表都有,则需要在列名前指定表名,即:表名.列名

select goods_id,goods.cat_id,goods_name,category.cat_id,cat_name 
from goods,category;

在这里插入图片描述
在这里插入图片描述
但是得出的这所有行,并不是都需要,都有意义,我们还需要对其进行筛选:

select goods_id,goods.cat_id,goods_name,category.cat_id,cat_name 
from goods,category where goods.cat_id = category.cat_id;

在这里插入图片描述在这里插入图片描述
但是,这种两张表全相乘的方法,在内存中会生成一个非常大的数据,对服务器会造成负担,需要继续改进。另外:没有利用索引。

左连接:
假设A表在左,不动,B表在A表的右边滑动,A表与B表通过一个关系来筛选B表的行。
语法:
A left join B on 条件 条件为真,则B表对应的行,取出
↑这一块,形成的也是一个结果集,可以看成一张表,设为C,甚至还可以继续 join。。。
既然这样,那么可以对C表作查询。

问:C表可以查询的列有哪些列?
答:A、B的列都可以查

因此这个题:另外的做法——用左连接来查询:
goods left join category on goods.cat_id = category.cat_id 当作C表看。
select goods_id,goods_name,goods_number,shop_price,cat_name from C;

select goods_id,goods_name,goods_number,shop_price,cat_name from 
goods left join category on goods.cat_id = category.cat_id;

查询出的结果相同,且效率高很多。

左连接之后,还能用where等子句吗?——可以啊!

select goods_id,goods_name,goods_number,shop_price,cat_name from 
goods left join category on goods.cat_id = category.cat_id
where goods.cat_id = 4;    
# 这里还是要有明确指明cat_id 是哪张表里的

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值