文档章节

sql语句中join on和where用法的区别和联系

一个破名想半年
 一个破名想半年
发布于 2016/11/14 13:13
字数 684
阅读 4499
收藏 0

对于要达到同一查询结果而言,join和where的用法是语句格式不一样,查询的结果是一样的。

先来看看join的语句分类:

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。

right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

full join:外连接,返回两个表中的行:left join + right join。

cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

在使用INNER JOIN时会产生一个结果集,WHERE条件在这个结果集中再根据条件进行过滤,如果把条件都放在ON中,在INNER JOIN的时候就进行过滤了,比如

SELECT *
         FROM A
      INNER JOIN B
          ON B.ID = A.ID
          AND B.State = 1
      INNER JOIN C
          ON B.ID = C.ID

在联查B表时,就把状态不等于1的忽略掉了,这样对于状态不等于1的就不需要去联查C表了

SELECT *
         FROM A
      INNER JOIN B
          ON B.ID = A.ID
      INNER JOIN C
          ON B.ID = C.ID
         WHERE B.State = 1

则不管B的状态是否满足,都去联查C,最后再将B状态满足的查出来。

这样一分析,得出的结论就是inner join on 比直接where的查询效率要高。

inner join on 后面的条件已经把结果过滤了一遍,而where 则是把限制条件放到最后,执行最后一次查询前结果里值变多了,查询起来变慢了,效率自然变低了。

然而,对于一般的内联接来说,就是没用例如上面的b.state=1这类的多一层限制,它和where的效率是一样的。而且where在写法上简单,因此对单表的查询一般都用where即可。

 

 

© 著作权归作者所有

共有 人打赏支持
一个破名想半年
粉丝 0
博文 16
码字总数 9936
作品 0
青浦
私信 提问
Mysql left join,right join,inner join的效率比较

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: table1:左表;table2:右表。 JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关...

mickelfeng
2017/10/25
0
0
java面试常见问题

跳槽请掌握以下问题: 1.多线程 2.存储过程、触发器 3.springmvc的理解 4.线程安全 5.数据库优化 6.如何提高页面加载速度 7.java中各个集合的区别及其特性 8.sql中left join / right join / ...

yqwang75457
2017/06/15
0
0
Oracle数据库学习的福利来啦——最佳入门经验分享

适用人群:从事数据库技术实施或售后工程师,准备参加OCA,OCP认证考试 通过学习对Oracle数据库的相关基础知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、...

让往事随风
2016/04/13
34
0
MySQL的JOIN(一):用法

MySQL的JOIN(一):用法 JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。这里描述先甩出一张用烂了的图,然后插入测试数据。 CREATE...

法斗斗
2018/01/30
0
0
SQL中 join 和 union 总结

Union 将两个结果集的数据做纵向连接,可以直接作为一个新的结果集,需要两个结果集的返回字段一致 分为Union 和 Union All,二者区别如下: Join 将两个结果集做横向连接,作为一个新的数据...

Meet相识_bfa5
2018/03/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Objective-C中的associated object释放时机问题

如果对象A持有对象B,B作为A的associated object,并且表面上B没有其他被强引用的地方,那么对象A被释放时,对象B一定会同时释放吗?大部分情况下是,但真有不是的时候。最近实现代码的时候不...

阿里云官方博客
39分钟前
2
0
12_第一个Flutter程序

使用 package 在这一步中,你将开始使用一个名为 english_words 的开源软件包,其中包含数千个最常用的英文单词以及一些实用功能。 你可以 在 pub.dartlang.org 上找到 english_words 软件包...

口十耳
今天
7
0
【Maven冷知识】Compiler插件

很多同学在pom的配置中都喜欢加上这样一段配置信息: 从配置信息上看,这是maven对Java源代码进行的编译配置,采用了Java 7 进行编译,但是为什么要加上这段配置呢?不加有没有什么影响?很多...

算法与编程之美
今天
2
0
磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序

本文由云+社区发表 作者:腾讯云数据库 随着云计算和数据库技术的发展,数据库正在变得越来越强大。数据库的性能如处理速度、对高并发的支持在节节攀升,同时分布式、实时的数据分析、兼容主...

腾讯云加社区
今天
2
0
Visual Studio系列教程:使用XAML工具创建用户界面(二)

Visual Studio是一款完备的工具和服务,可帮助您为Microsoft平台和其他平台创建各种各样的应用程序。在本系列教程中将介绍如何为图像编辑创建基本的用户界面,有任何建议或提示请在下方评论区...

ymy_666666
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部