一般情况,我们作左连接 select * from A left join B  on A.id=B.a_id;一定认为A就是主表,其实还有另外的情况,我们若将sql改写成 select * from A left join B  on on A.id=B.a_id where B.id<cont(常数)。此时B表就作为连接的主表了。具体示例见下:

新建表 A

新建表B

1.查询sql

SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<8;此时查看查询计划,显示 b表为主表

解释:where v.id<8,筛选出了更小的表B,所以按照left join 小表驱动大表的原则,此时把B表作为主表也不足为奇了。

2.查询sql

SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<16;此时查看查询计划,显示 a表为主表

解释:where v.id<16,筛选出了的表B有15条>A(里面14条),所以按照left join 小表驱动大表的原则,此时把A表作为主表了。

3.查询sql

1)SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<14;此时查看查询计划,显示 a表为主表

2)SELECT * FROM A a  LEFT JOIN   B  b ON a.category_id = b.id where b.id<=14;此时查看查询计划,显示 a表为主表

按照我们前面说的小表驱动大表,此时where where b.id<14或者 where where b.id<=14,B表的条数为13或14(A表14条没变),但此时都是以A 。

说明:在2表的连接时候相等记录条数时候有点小bug,具体原因待解决。。。。

关于A left join B,A是否一定是主表?的更多相关文章

  1. LINQ TO SQL 中的join(转帖)

    http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...

  2. Hive中Join的类型和用法

    关键字:Hive Join.Hive LEFT|RIGTH|FULL OUTER JOIN.Hive LEFT SEMI JOIN.Hive Cross Join Hive中除了支持和传统数据库中一样 ...

  3. sql server几种Join的区别测试方法与union表的合并

    /* sql server几种Join的区别测试方法 主要来介绍下Inner Join , Full Out Join , Cross Join , Left Join , Right Join的区别 ...

  4. JOIN ,LEFT JOIN ,ALL JOIN 等的区别和联系

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) ...

  5. left join 和 inner join 区别和优化

    关联查询总结,left join 和 inner join 区别和优化 一直以来都没有细细的研究 left join 和 inner join,现在发觉要做优化还真的是要熟悉它们的区别才行. 原谅转载 ...

  6. 关联查询总结,left join 和 inner join 区别和优化

    left join 是做左外关联,主表内容都会显示:符合关联条件的附表内容才会显示出来. inner join 是内关联,没有主表附表的概念:两个表中,同时符合关联条件的数据才会显示出来. left ...

  7. Mysql常用sql语句(17)- left/right join 外连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 外连接分为两种:left join.right ...

  8. 谈谈hive中join下on和where

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 很多人如果先接触mysql的执行顺序(from ->on ->join -&g ...

  9. Oracle的DML语言必备基础知识

      前提是咱们都已经对常用的数据操纵语言非常熟悉了,对标准SQL: SELECT子句                --指定查询结果集的列 DROM子句                 --指定查询来 ...

随机推荐

  1. 编译snort经验

    google搜索,找个感觉挺新的版本 https://zh.osdn.net/frs/g_redir.php?m=netix&f=%2Fslackbuildsdirectlinks%2Fsno ...

  2. jquery tooltip插件

    qtip2:http://qtip2.com/ bower install qtip2 // lowercase! 引入一个css和插件即可. <script type="text/j ...

  3. GoWeb-Gin 文件上载

    前些日子,我们Node.JS了一把. 如今,我们还是回到我们伟大的GO来吧 今天,带领大家继续Golang的啦,而且是个上传文件的例子 先给大家看结果 1. 如果是windows端,你需要安装post ...

  4. System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

    异常描述: Global.asax捕获到异常:System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 < ...

  5. JDK源码调试常见错误。

    1.删除不需要的代码,即swing相关的代码 2.执行命令时要将前提环境进入文件夹如下: 起初没有完全执行第一条,因为网上说可以根据需要选择相关的代码,于是就没有删除,以后第一次模仿网上的例子的时候要 ...

  6. top结果解释

    top结果解释 top命令功能类似Windows的任务管理器,但不如任务管理器的直观明了,下面对各项内容进行简单介绍. 信息行 top--命令/up-更新时间/users-用户数/load avera ...

  7. 04-树6 Complete Binary Search Tree(30 分)

    title: 04-树6 Complete Binary Search Tree(30 分) date: 2017-11-12 14:20:46 tags: - 完全二叉树 - 二叉搜索树 categ ...

  8. binTreePosterorderTraversal二叉树的后序遍历

    描述: Given a binary tree, return the postorder traversal of its nodes' values. For example: Given bin ...

  9. 详解tween.js 中文使用指南

    补间(动画)是一个概念,允许你以平滑的方式更改对象的属性.你只需告诉它哪些属性要更改,当补间结束运行时它们应该具有哪些最终值,以及这需要多长时间,补间引擎将负责计算从起始点到结束点的值. 例如,pos ...

  10. Unity使用协程技术制作倒计时器

    先上效果图 图片资源来自http://www.51miz.com/ 1.素材准备 在http://www.51miz.com/搜索png格式的数字图片,用Unity自带的图集制作工具,进行分割.Con ...