SQL表与表连接关系
一、SQL连接方式
left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
full join:外连接,返回两个表中的行:left join + right join。
cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。
二、关键字ON与WHERE执行顺序(LEFT JOIN 与 INNER JOIN 区别)
如:Department表

Employee表

LEFT JOIN两条SQL语句:

执行结果如下:

发现数据有很大差别 返回的结果集不一样
INNER JOIN两条SQL


相信大家已经清楚两者的数据差异了吧,接下来和大家分析一下产生此问题的原因:
1、数据库中表与表关联都会组合成一张临时表,并将临时表的结果集返回给用户(Worktable)。
2、LEFT JOIN 与 REGIN JOIN 下的On条件是在生成临时表时使用的条件,无论条件是否为真都会筛选左(右)表中全部数据,然而FULL JOIN 具备LEFT JOIN 与 RIGHT JOIN的全部特性并集,INNER JOIN 没有这个特性放在ON 后面与WHERE 一样
eg:Left JOIN 下ShowPlan_text 文本, 去除了ON后面针对Department表过滤条件 返回Department 全部数据

3、ON是生成临时表时使用的条件 ,WHERE 对中间表数据过滤(多表关联时ON会在WHERE之前执行 生成中间表 在进行条件过滤)
SQL执行执行计划如下:

4、 SQL Server有几种方式查找数据记录
[Table Scan] 表扫描(最慢),对表记录逐行进行检查
[Clustered Index Scan] 聚集索引扫描(较慢),按聚集索引对记录逐行进行检查
[Index Scan] 索引扫描(普通),根据索引滤出部分数据在进行逐行检查
[Index Seek] 索引查找(较快),根据索引定位记录所在位置再取出记录
[Clustered Index Seek] 聚集索引查找(最快),直接根据聚集索引获取记录
5、没有主键的表查询就会进行表扫描,
6、有主键的表查询就会进行聚集索引扫描
7、创建非聚集索引的表查询[索引扫描+书签查找]
书签查找:通过非聚集索引找到所求的行,但这个索引并不包含显示的列,因此还要额外去基本表中找到这些列,所以要进行键查找,如果基本表在堆中则Key Lookup会变成RID查找,这两个查找统称为书签查找。
即: CREATE INDEX XXXX ON TABLE(CREATEDATE)
8、创建非聚集索引包含其他显示列[索引查找]
即: CREATE INDEX XXXX ON TABLE(CREATEDATE) INCLUDE (A,B,C)
9、创建非聚集索引包含其他显示列 并把聚集索引列当作条件[聚集索引查找]
SQL表与表连接关系的更多相关文章
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- 章节2:SQL之多表连接
原文:章节2:SQL之多表连接 Sql的多表连接关系有:内连接.外连接和交叉连接. 先建立两个用于演示的表: TB_Characters: Id Character 1 内向 2 外向 3 中性性格 ...
- Day055--MySQL--外键的变种,表与表的关系,单表查询,多表查询, 内连接,左右连接,全外连接
表和表的关系 ---- 外键的变种 * 一对多或多对一 多对多 一对一 参考 https://www.cnblogs.com/majj/p/9169416.html 如何找出两张表之间的关系 分析步骤 ...
- SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)
SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- SQL的多表连接查询
SQL的多表连接查询 多表连接查询具有两种规范,SQL92和SQL99规范. SQL92规范支持下列多表连接查询: (1)等值连接: (2)非等值连接: (3)外连接: (4)广义笛卡尔积: SQL9 ...
- Oracle 表三种连接方式(sql优化)
在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式: 嵌套循环(Nested Loops (NL)) (散列)哈希 ...
- SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数
---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ ...
- SQL语法 之 表连接
一.连接条件 连接查询中用来连接连个表的条件称为连接条件或连接谓词.其形式为: [<表1>].<列名1> <连接运算符> [<表2>].<列2&g ...
随机推荐
- 【HRS项目】Axure兴许问题解决---与SVN结合
上一篇博客介绍了Axure的团队开发用法,http://blog.csdn.net/u013036274/article/details/50999139,可是再用的时候发现会出现这种问题,例如以下图 ...
- 下载Youku视频观看
所需工具: 1.chorme内核浏览器,如Chorme.Firefox等等 2.vlc视频播放器 准备工作完成,开始工作 1.打开优酷的随便一个视频 2.按下F12选择Network(网络)选择Med ...
- the first week study
1.In 1989, a man named Guido create "python" as a kind of computer languages. And now we u ...
- Mac下安装manen
下载好maven,放到特定目录下: 打开终端: 进入根目录: cd ~ 创建文件.bash_profile: vi .bash_profile 编辑文件添加内容 MAVEN_HOME=/Users/c ...
- POJ2912 Rochambeau —— 种类并查集 + 枚举
题目链接:http://poj.org/problem?id=2912 Rochambeau Time Limit: 5000MS Memory Limit: 65536K Total Submi ...
- Get started with Sourcetree
Understand the interface Bookmarks window From that window, select the Local or Remote buttons to vi ...
- mac系统下设置eclipse的补全快捷键方法
eclispe Word Completion 的默认快捷键是Alt+/eclipse Content Assist 的默认快捷键是Ctrl+Space在使用中发现Word Completion经常导 ...
- 【HDU 1520】 Anniversary Party
[题目链接] 点击打开链接 [算法] 树形DP 令f[i][0]表示 : 以i为根的子树中,若i不参加宴会,所能获得的最大愉悦值 f[i][1]表示 : 以i为根的子树中,若i参加宴会,所能获得的最大 ...
- 解决IE和firefox 下flash盖住div的问题(转载)
原文地址:http://www.oschina.net/question/171410_26563 做的企业站 顶部是flash的滚动图片. 右侧是在线客户,但是flash盖住了在线客户的div 网上 ...
- Linux系统挂载NTFS文件系统(转载)
转自:http://hermesbox.blogbus.com/logs/47386987.html 今天尝试并成功的将一块500G的移动硬盘挂载到了RHEL5的系统上,甚感欣慰.想到也许以后自己或其 ...