- 浏览: 585201 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (423)
- windows2003 (1)
- exception (3)
- java (91)
- eclipse (14)
- java web (3)
- javaScript (11)
- 装机 (1)
- sql (34)
- outlook (1)
- html (8)
- JAVA 不同区域服务器引起的乱码解决 (2)
- strtus (3)
- http (1)
- 设计模式 (4)
- Java对存储过程的调用方法 (0)
- java-数据库操作 (0)
- jdbc (7)
- dwr (2)
- 软件版本号 (1)
- jxls (1)
- ExtJS (3)
- Ajax (1)
- git (12)
- linux (20)
- mysql (14)
- maven (16)
- easyui (1)
- 日常备注 (1)
- spring (9)
- others (1)
- windows快捷键 (1)
- 工作备注 (9)
- 工作杂项 (0)
- photoshop (1)
- 开发环境配置 (0)
- jboss (1)
- 报表 (1)
- 图表 (1)
- fckeditor (1)
- 调试bug (2)
- 口令 (1)
- css (2)
- mongodb (7)
- restful (1)
- jsp (5)
- jpa (2)
- bug (1)
- js (2)
- Json (1)
- POI (1)
- xml (2)
- webstorm (1)
- java swing (1)
- ubuntu (3)
- mongo (27)
- 自我学习 (0)
- 草稿 (0)
- 单元测试 (1)
- 数据库 (2)
- ide (1)
- 大数据 (0)
- uml (1)
- spring-boot (1)
- mybatis (3)
- oracle (2)
- jetty (1)
- 学习 (0)
- 系统调优 (1)
- tomcat (2)
- kettle (1)
- 学习资源 (1)
- 架构 (2)
- database (4)
- idea (1)
- consul (1)
- hadoop (2)
- nginx (3)
- 认证 (1)
- 加密 (1)
- connection pool (1)
- loadrunner (1)
- tps (1)
- 翻墙工具 (1)
- redis (2)
- redis jedis shardjedis (1)
- spring boot (1)
- 认证授权 (1)
- ssh (1)
- svn (2)
- 多线程 (1)
最新评论
-
abcdeudi:
不错
接口和抽象类什么时候使用才合适? -
羽翼的心动:
POI中对Word处理,读取不到书签。如果要处理书签的话,就只 ...
POI根据模板(excel表头)导出excel -
pdf1192012:
高质量文章
接口和抽象类什么时候使用才合适? -
沐忆潼:
...
POI根据模板(excel表头)导出excel -
422937561:
高质量文章
接口和抽象类什么时候使用才合适?
运行平台:Mysql
目的:比较join......on 后面的and 和where的区别
1)建表
创建A表
创建B表
2)比较下面的运行结果
3)结论
3.1) where 是在两个表join完成后,再附上where条件。
即
3.2)
而 and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。即
假如是左连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。参考http://blog.csdn.net/muxiaoshan/article/details/7617533
3.3)建议尽量用where来过滤条件,以避免复杂的逻辑考虑。(除非在某些情况下(后接其他sql语句),用and会报错,才用and,但要考虑是否影响正确结果。)
目的:比较join......on 后面的and 和where的区别
1)建表
创建A表
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `a` -- ---------------------------- DROP TABLE IF EXISTS `a`; CREATE TABLE `a` ( `id` decimal(10,0) NOT NULL DEFAULT '0', `link` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `a_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- ---------------------------- -- Records of a -- ---------------------------- INSERT INTO `a` VALUES ('1', '1', 'jack'); INSERT INTO `a` VALUES ('2', '1', 'jack'); INSERT INTO `a` VALUES ('3', '1', 'leo');
创建B表
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `b` -- ---------------------------- DROP TABLE IF EXISTS `b`; CREATE TABLE `b` ( `id` decimal(10,0) NOT NULL DEFAULT '0', `link` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL, `b_name` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- ---------------------------- -- Records of b -- ---------------------------- INSERT INTO `b` VALUES ('1', '1', 'frowna'); INSERT INTO `b` VALUES ('2', '1', 'frowna'); INSERT INTO `b` VALUES ('3', '1', 'kiki');
2)比较下面的运行结果
select * from A left join B on A.link =B.link where A.a_name='jack' 和 select * from A left join B on A.link =B.link and A.a_name='jack'
select * from A inner join B on A.link =B.link where A.a_name='jack' 和 select * from A inner join B on A.link =B.link and A.a_name='jack'
select * from A right join B on A.link =B.link where A.a_name='jack' 和 select * from A right join B on A.link =B.link and A.a_name='jack'
select * from A right join B on A.link =B.link where A.a_name is null 和 select * from A right join B on A.link =B.link and A.a_name is null
3)结论
3.1) where 是在两个表join完成后,再附上where条件。
即
select * from (select A.a_name,B.b_name from A left join B on A.link =B.link)t where t.a_name='jack'; 等价为 select A.a_name,B.b_name from A left join B on A.link =B.link where A.a_name='jack'
3.2)
而 and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。即
假如是左连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。参考http://blog.csdn.net/muxiaoshan/article/details/7617533
3.3)建议尽量用where来过滤条件,以避免复杂的逻辑考虑。(除非在某些情况下(后接其他sql语句),用and会报错,才用and,但要考虑是否影响正确结果。)
发表评论
-
sql批量插入
2017-04-01 17:37 731http://blog.csdn.net/orion61/ar ... -
sum if 或 sum case 加速查询
2016-12-05 08:56 516http://www.jianshu.com/p/c19c99 ... -
sql join 时 on和where 区别
2016-12-05 00:15 386http://blog.csdn.net/muxiaoshan ... -
sql 执行顺序
2016-12-05 00:17 271http://blog.csdn.net/u013600225 ... -
键、索引、约束及其区别 主键约束和唯一性约束的区别
2016-03-28 17:14 772http://blog.csdn.net/dlodj/arti ... -
sql 获取字符串长度SQL字符串操作汇总
2014-04-09 00:57 2660http://blog.csdn.net/a4562834/a ... -
sql server2005服务无法启动
2013-12-18 23:44 605http://blog.sina.com.cn/s/blog_ ... -
分时间段统计(case + group by)
2013-07-20 21:53 1372http://www.cnblogs.com/qiantuw ... -
获取日期的年份,月份,日期
2013-07-20 20:08 884select DATENAME(YEAR,GETDATE()) ... -
sql case when
2013-04-09 14:20 757SELECT *, processStrin ... -
sql 语句顺序 where,group by,order by
2013-02-22 18:06 1007SELECT accessoryItem,accessoryT ... -
statement、prepareStatement、callableStatement的使用
2013-01-18 12:54 7501.PreparedStatement: 带?参数的使用p ... -
sql 多行并一行
2013-01-14 15:26 8001) select _size from clothes wh ... -
sql group by语句
2012-08-23 16:20 753以下写法错误 select orderNo,styleNo,c ... -
sql select时增加常量列
2012-08-23 16:08 12646string sql="select a,b,'常量 ... -
动态sql的传参方法和获取返回值
2012-08-23 15:14 5859一)动态sql的传参方法 /* 实现动态sql传参的方法一 ... -
注意ms sql的substring
2012-08-22 17:21 849MS的substring(列名,n,m) n:起始位置 m: ... -
union all 效率问题
2012-08-21 16:18 800如果union all太多的话,建议使用存储过程,建立一张临时 ... -
外键约束是否必要
2012-08-21 16:15 802外键约束是否必要 http://www.iteye.com/ ... -
MS SQL执行速度优化
2012-08-21 12:10 7751)大表变小表,小表再连接。(但是MS SQL 会自动分析执行 ...
相关推荐
### left join 过滤条件写在on后面和写在where 后面的区别 在SQL查询语句中,连接(JOIN)是一种非常重要的操作,用于从两个或多个表中获取数据。其中,`LEFT JOIN`是一种常用的连接类型,它返回左表的所有记录以及...
总结一下,`ON` 和 `WHERE` 在 `LEFT JOIN` 中的主要区别在于: 1. `ON` 用于在生成临时表时定义连接条件,无论条件是否满足,都会返回左表的所有行。 2. `WHERE` 在临时表生成后进行过滤,如果它包含了连接条件,...
数据库各种join连接 数据库中的join连接是指将两个或多个表连接起来,以便检索数据...在写连接查询时,推荐在on后面只跟连接条件,而对中间表限制的条件都写到where子句中。这可以避免查询结果的歧义性和难以理解性。
InnerJoin(b).On(a.UserId == b.CategoryId) .Where(a.UserId == 1 && (a.UserName + "123").LikeLeft(u1.UserName)) ); //下面是子查询方式的多表查询In 的使用方法 var ListUser8= Sql.ExecuteList((a, b, c) =>...
在SQL查询中,`ON` 和 `WHERE` 子句都是用于设置筛选条件,但它们在`JOIN`操作中有着不同的作用和位置。理解这两者的区别对于编写高效的SQL语句至关重要,尤其是在处理复杂的多表查询时。 首先,我们来看一下MySQL...
需要注意的是,在写连接查询的时候,ON 后面只跟连接条件,而对中间表限制的条件都写到 WHERE 子句中。例如,语句 7 和语句 8 的结果是不相同的: 语句 7:WHERE 条件独立 SELECT o.id, o.order_number, o.customer...
- **Inner Join**:根据 ON 条件生成临时表,ON 后面的条件可以用 WHERE 实现。 - **示例**: - 假设有一个查询: ```sql SELECT A.卡号, B.手机号码 FROM A LEFT JOIN B ON A.客户号 = B.客户号 AND B.联系...
可以看到,这样的写法让查询的结构更为清晰,关联条件被明确地放在了`ON`后面,而其他的过滤条件则放在了`WHERE`后面。这种改进对于大型查询来说尤为重要。 **注意**:`ON`语句中的括号并不是必需的,但在实践中...
如果将筛选条件放在On后面,它会影响连接本身,而放在Where后面,它则会影响最终的结果集。 理解On和Where筛选器的区别对于编写正确的SQL查询至关重要,尤其是在处理Outer Join时。误用可能导致数据筛选不准确,...
select * from table where NAME = @NAME and AGE = @AGE end exec user @NAME = '男',@AGE = 15 select 单号 ,收入 = case when 收入>0 then 收入 else 0 end ,支出 = case when 收入>0 then 0 else ...
在`INNER JOIN`和`CROSS JOIN`中,`ON`后面的筛选条件与`WHERE`子句的效果相同,都是在最后生成结果集时应用。如果在这些类型的JOIN中只使用`ON`,不使用`WHERE`,查询仍然有效,结果不会改变。 然而,当涉及到`...
在SQL查询中,正确使用`AND`和`WHERE`子句以及理解左连接(LEFT JOIN)的机制至关重要,因为它们直接影响到查询结果的准确性和效率。以下是对这些知识点的详细解释: 1. `AND`与`WHERE`的区别: - `AND`是一个逻辑...
这里的`表名`是你想要更新的表,`列=新值`定义了你要修改的列及对应的新值,`WHERE`后面的筛选条件用于指定哪些记录需要被更新。例如,如果你有一个名为`beauty`的表,想把所有姓周的女神的电话改为119,可以使用...
14. Linda and her mother are talking __C.__ on the phone. 15. —What is your sister doing? —__D.__ She is washing the dishes. 四、根据汉语意思完成句子,每空一词: 16. Is Jane __reading__ __the__ __...
在这个查询中,`JOIN`子句用于连接多个表,`ON`后面是连接条件,`ORDER BY`用于对结果集进行排序。 实验结果显示,查询所有"天津"的供应商明细时,最初因为使用了等号`=`而不是`LIKE`进行模糊查询,导致没有找到...
Oracle练习笔试大全 1、select ename, sal * 12 from emp; //计算年薪 2、select 2*3 from dual; //计算一个比较纯的数据...68、select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal...
例如,`SELECT DISTINCT 姓名 FROM TReader JOIN HLend ON TReader.借书证号=HLend.借书证号 WHERE (HLend.还书时间-HLend.借书时间)>5`,这个查询返回那些还书超过5天的读者的唯一姓名,通过`JOIN`连接了读者表...
LEFT OUTER JOIN SC ON Student.S# = SC.S# GROUP BY Student.S#, Student.Sname; ``` ### 4. 查询所有老师的数量。 **知识点:** - **DISTINCT**:去除重复值。 **解析:** ```sql SELECT COUNT(DISTINCT Tname)...
这篇文档是针对新目标九年级英语Unit 1 "How do you study for a test" 的单元测试题,旨在帮助学生巩固和检验在这个单元所学的英语知识。以下是根据文档内容提炼的相关知识点: 一、词汇填空 1. aloud - 在这个...