关于A left join B,A是否一定是主表?
一般情况,我们作左连接 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是否一定是主表?的更多相关文章
- LINQ TO SQL 中的join(转帖)
http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...
- Hive中Join的类型和用法
关键字:Hive Join.Hive LEFT|RIGTH|FULL OUTER JOIN.Hive LEFT SEMI JOIN.Hive Cross Join Hive中除了支持和传统数据库中一样 ...
- sql server几种Join的区别测试方法与union表的合并
/* sql server几种Join的区别测试方法 主要来介绍下Inner Join , Full Out Join , Cross Join , Left Join , Right Join的区别 ...
- JOIN ,LEFT JOIN ,ALL JOIN 等的区别和联系
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) ...
- left join 和 inner join 区别和优化
关联查询总结,left join 和 inner join 区别和优化 一直以来都没有细细的研究 left join 和 inner join,现在发觉要做优化还真的是要熟悉它们的区别才行. 原谅转载 ...
- 关联查询总结,left join 和 inner join 区别和优化
left join 是做左外关联,主表内容都会显示:符合关联条件的附表内容才会显示出来. inner join 是内关联,没有主表附表的概念:两个表中,同时符合关联条件的数据才会显示出来. left ...
- Mysql常用sql语句(17)- left/right join 外连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 外连接分为两种:left join.right ...
- 谈谈hive中join下on和where
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 很多人如果先接触mysql的执行顺序(from ->on ->join -&g ...
- Oracle的DML语言必备基础知识
前提是咱们都已经对常用的数据操纵语言非常熟悉了,对标准SQL: SELECT子句 --指定查询结果集的列 DROM子句 --指定查询来 ...
随机推荐
- iOS 新浪微博-5.2 首页微博列表_转发微博/工具栏
继续于上一篇,还是做首页的功能,这一篇把剩下的首页继续完善. 看看上面的图片,分析: 1.转发微博里面的内容,和原创微博是一样的,由文字+配图组成.这应该放在一个UIView里处理. 2.工具栏也当成 ...
- Windows jmeter配置
JMeter是Apache软件基金会的产品,用于对提供静态的和动态的资源服务器性能的测试.是一款很方便的测试软件. JMeter 要依附Java SE 环境 所以在启用JMeter之前要安装JAVA ...
- [17]Windows的启动过程
一.内核的引导 在intel x86系统上,windows操作系统获得控制首先从硬盘的主引导记录(MBR,Master Boot Record)开始,windows setup程序在安装windows ...
- <2>基本表达式和语句
1.基本表达式 1: =, +, -, *, /, 赋值,加减剩除; lua 没有 c/c++的缩写表达式 += -= *=, ++, --; 2: () 改变运算的优先级; 3: 字符串对象加法.. ...
- META标签之关键词、网页描述设置帮助SEO网站优化(转)
ASP.NET 4.0 Web Forms针对SEO改进措施中有一个是在Page类中加了2个新属性:MetaKeywords 和MetaDescription,它们使得在后台代码类中用编程的手法设 ...
- 如何删除Sitecore CMS中的项目
在此“如何”帖子中,我将介绍如何删除项目以及如何在Sitecore CMS中恢复已删除的项目. 删除项目 有多种方便的方法可以删除Sitecore中的项目. 从功能区 在内容树中选择您要删除的项目. ...
- jQuery筛选--find(expr|obj|ele)和siblings([expr])
find(expr|obj|ele) 概述 搜索所有与指定表达式匹配的元素.这个函数是找出正在处理的元素的后代元素的好方法 参数 expr 用于查找的表达式 jQuery object 一个用于 ...
- 谈谈Groovy闭包
A closure is a function with variables bound to a context or environment in which it executes. 概述 闭包 ...
- [转载]oracle的常用函数 instr() 和substr()函数
在Oracle中 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置. 语法: instr(sourceString, ...
- 怎样从外网访问内网Oracle数据库?
本地安装了一个Oracle数据库,只能在局域网内访问到,怎样从外网也能访问到本地的Oracle数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Oracle数据库 默认安装的Or ...