sql语句中left join、inner join中的on与where的区别

table a(id, type):

id     type

----------------------------------

1      1        

2      1         

3      2         

table b(id, class):

id    class

---------------------------------

1      1

2      2

sql语句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;

sql语句2:select a.*, b.* from a left join b on a.id = b.id where a.type = 1;

sql语句3:select a.*, b.* from a left join b on a.id = b.id and b.class = 1;

sql语句1的执行结果为:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1            2        2

3        2              

sql语句2的执行结果为:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1            2        2

sql语句3的执行结果为:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1           

3        2           

由sql语句1可见,left join 中左表的全部记录将全部被查询显示,on 后面的条件对它不起作用,除非再后面再加上where来进行筛选,这就是sql语句2了;由sql语句3可见,on后面的条件中,右表的限制条件将会起作用。

**********************************************************************************

sql语句4:select a.*, b.* from a inner join b on a.id = b.id and a.type = 1;

sql语句5:select a.*, b.* from a inner join b on a.id = b.id where a.type = 1;

sql语句6:select a.*, b.* from a, b where a.id = b.id and a.type = 1;

sql语句7:select a.*, b.* from a, b where a.type = 1 and a.id = b.id;

这四条语句的执行结果一样,如下:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1            2        2

由此可见,inner join 中on后面的限制条件将全部起作用,这与where的执行结果是一样的。另外,where语句与inner join确实能得到相同的结果,只是效率不同(这个我没有测试过,不过我相信这个结论)。

但是sql语句6是否比sql语句7的效率要低一些,我没有足够的数据量来测试,不过我也相信是如此的。
时间: 2024-12-17 15:00:03

sql语句中left join、inner join中的on与where的区别的相关文章

使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 Hive Impala HBase HiveQL 大数据 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存储在HBase中,使用Hive执行SQL语句 Ⅰ.创建Hive外部表 Ⅱ.从HBase读 Ⅲ.向HBase写 三.数据存储在HBase中,使用Impala执行SQL语句 Ⅰ.从HBase读 Ⅱ.向HBase写 四.综上所述 〇.摘要 Hive是基于Hadoop

sql语句,怎么查看一个表中的所有约束

sql语句,怎么查看一个表中的所有约束,比如,一个student表,有唯一,外键,主键,用sql语句怎么查看student表中的所有约束呢? select * from sysobjects where parent_obj in(select id from sysobjects where name='student')

用SQL语句创建和删除Access数据库中的表;添加列和删除列

用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Access数据库中的表;添加列和删除列SQL语句,具体使用方法请看帮助          Create    Table    tab1    (fld1    integer)      Drop    Table    tab1          Alter    Table    tab1   

EF执行SQL语句 结果和直接在Sqlserver中执行结果不一致

先说问题 直接执行sql的结果 var result = base.Context.Customers.SqlQuery(sql); sql 语句是打断点取得的,连接的也同是一个数据库 ,但是结果不一致 用SqlDataAdapter把数据取到DataSet 中也是正确的 所以可以排除sql 语句有问题 虽然找出了一个解决办法,但是在这里加一个DataSet太丑陋了,虽然规避了问题 然后换了一个EF直接执行sql的方式 var result = base.Context.Database.Sql

sql语句EXISTS的用法和oracle中substr的用法

转需:EXISTS 指定一个子查询,检测 行 的存在. 语法: EXISTS subquery参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字).结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE . NOT EXISTS 的作用与 EXISTS 正好相反 EXISTS(包括 NOT EXISTS )子句的返回值是一个BOOL值. EXISTS内部有一个子查询语句(SELECT ... FROM.

mysql 怎么通过sql语句批量去掉某一个表中某一个字段的多余字符

采用替换,把”<img src="“替换为空格," width="300" height="300" />也替换为空格,曾经在网上看到过这样的SQL,替换字段中字符串中的某些字符 update 表名 set 要修改的字段名= replace(要修改的字段名,‘<img src="’,'') update 表名 set 要修改的字段名= replace(要修改的字段名,‘width="300" hei

解析sql语句中left_join、inner_join中的on与where的区别

以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下 table a(id, type):id     type ----------------------------------1      1         2      1          3      2          table b(id, class):id    class ---------------------------------1  

机房收费系统中遇到的SQL语句问题

个人版机房收费系统正在进行中,遇到了几个有关SQL语句的问题. 1.sum函数的使用: 在结账部分,要求出某个表中某一列的和.在第一次机房系统中,我不知道sum函数的存在,很傻很天真地用循环一个一个往上加.下面以求所有卡中余额的和来说说sum函数怎么使,SQL语句为:select sum(cash)from T_Card.这个格式不是固定的,可以根据需求更改,比如求多列的和:select sum(列名1),sum(列名2)...from [表名] where....查询出来的结果只有一行,如果只

在Excel中使用SQL语句查询和筛选

本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQL语句实现精确查询>,觉得非常受用,分享给大家. 微博上有人回复评论说直接用vlookup.或者导入数据库进行查询处理就好了,岂不是更高效.更灵活:其实给人的第一直观感觉是这样子的,但是我们多想一步,这篇文章的应用场景.使用前提条件是什么?我想到的有以下几个方面:①数据量不是很大的时候:②数据结构导入数