d@zz 2019-05-20 22:07 采纳率: 100%
浏览 570
已采纳

mysql联结时where子句中有多个条件时执行顺序是怎样的 ?

如图中例子:
图片说明

SELECT cust_name,cust_contact 

FROM customers,orders,orderitems

WHERE customers.cust_id = orders.cust_id 

AND orderitems.order_num = orders.order_num

AND prod_id = 'TNT2';

这里的顺序是,先过滤出最后一行中orders.prod_id='TNT2'd的产品,然后用返回的行去匹配orderitems.order_num的行,最后用结果去匹配customers.cust_id,然后返回最后匹配的行.

问题1.为什么是这个顺序?虽然逻辑上是正确的,但mysql语言并没有逻辑吧,只能按照我们给的语句去执行.有同学说从左到右从上到下,那也不对啊?也有同学说按照驱动表,先过滤驱动表中的数据,RBO中一般情况下是from后最后一张是驱动表,CBO中输出数据量最少的是驱动表.但这么看也不对啊?

问题2.怎么去总结WHERE字句中有多个条件时执行的顺序?

问题3.假设使用INNER JOIN字句,条件在ON字句中给出时,顺序是否跟WHERE字句一样?

最后先谢谢解答的大神

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2019-05-21 09:21
    关注

    可以用 explain 查看这SQL的执行计划。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同