mysql左连接后数据重复_MySQL优化系列之查找优化,外连接、多表联合查询以及查询注意点...

文章结构:(1)多表查询步步优化;(2)查询编写的注意点。

/*

补充说明(往后有博友反馈的话,会继续补充。)

*/

一、2017-7-19:

关于“超大型数据尽可能尽力不要写子查询,使用连接(JOIN)去替换它”。

关于这一类的总结,我们要认真去考量,这里并不是说一定。

1)因为在大型的数据处理中,子查询是非常常见的,特别是在查询出来的数据需要进一步处理的情况,无论是可读性还是效率上,这时候的子查都是更优。

2)然而在一些特定的场景,可以直接从数据库读取就可以的,比如一个表(A表 a,b,c字段,需要内部数据交集)join自己的效率必然比放一个子查在where中快得多。可参见我给的例子中的拉黑表,好友表(双方互相喜欢才是好友的表),在查自己的好友列表的时候,或者拉黑列表中。

文章目录:

(1)多表查询步步优化

基本连接方法(内连接、外连接以及交叉连接)

内连接:用比较运算符根据每个表共有的列的值匹配两个表中的行(=或>、

超大型数据尽可能尽力不要写子查询,使用连接(JOIN)去替换它(基础讲完,讲优化)

(3)使用联合(UNION)来代替手动创建的临时表建立索引(下一篇将详讲)

(2)查询编写的注意点

大概有9点,详情见下文。

一、多表查询步步优化:(使用还是之前的数据库的表,商品分类表以及商品详情表)

235198_0.png

给出的数据库有基本的数据框架,剩下的几个假数据我们就自己创建吧。注意此两表是有外键约束的。

235198_1.png

(1)基本连接方法(内连接、外连接以及交叉连接):

一)内连接:用比较运算符根据每个表共有的列的值匹配两个表中的行(=或>、

//意思是:检索商品分类表和商品表“分类描述”相同的行

select

d.Good_ID ,

d.Classify_ID,

d.Good_Name

from

Commodity_list d

inner join commodity_classification c

on d.Classify_Description=c.Good_kinds_Name

得到的满足某一条件的是A,B内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

235198_2.png

很容器看出是两者都满足才查出

235198_3.png

二)外连接之左连接

//意思:查得商品分类表的所有数据,以及满足条件的商品详情表的数据

select

*

from

commodity_classification c

left join commodity_list d

on d.Classify_Description=c.Good_kinds_Name

235198_4.png

可以看到,首先是左表数据全部罗列,然后有满足条件的右表数据都会全部罗列出。若两条右表数据对左表一条数据,则会用对应好的左表数据补足作为一条记录。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值