- 浏览: 571526 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 680http://blog.csdn.net/orion61/ar ... -
sum if 或 sum case 加速查询
2016-12-05 08:56 482http://www.jianshu.com/p/c19c99 ... -
sql join 时 on和where 区别
2016-12-05 00:15 361http://blog.csdn.net/muxiaoshan ... -
sql 执行顺序
2016-12-05 00:17 250http://blog.csdn.net/u013600225 ... -
键、索引、约束及其区别 主键约束和唯一性约束的区别
2016-03-28 17:14 744http://blog.csdn.net/dlodj/arti ... -
sql 获取字符串长度SQL字符串操作汇总
2014-04-09 00:57 2623http://blog.csdn.net/a4562834/a ... -
sql server2005服务无法启动
2013-12-18 23:44 577http://blog.sina.com.cn/s/blog_ ... -
分时间段统计(case + group by)
2013-07-20 21:53 1341http://www.cnblogs.com/qiantuw ... -
获取日期的年份,月份,日期
2013-07-20 20:08 852select DATENAME(YEAR,GETDATE()) ... -
sql case when
2013-04-09 14:20 733SELECT *, processStrin ... -
sql 语句顺序 where,group by,order by
2013-02-22 18:06 957SELECT accessoryItem,accessoryT ... -
statement、prepareStatement、callableStatement的使用
2013-01-18 12:54 7131.PreparedStatement: 带?参数的使用p ... -
sql 多行并一行
2013-01-14 15:26 7701) select _size from clothes wh ... -
sql group by语句
2012-08-23 16:20 719以下写法错误 select orderNo,styleNo,c ... -
sql select时增加常量列
2012-08-23 16:08 12595string sql="select a,b,'常量 ... -
动态sql的传参方法和获取返回值
2012-08-23 15:14 5786一)动态sql的传参方法 /* 实现动态sql传参的方法一 ... -
注意ms sql的substring
2012-08-22 17:21 818MS的substring(列名,n,m) n:起始位置 m: ... -
union all 效率问题
2012-08-21 16:18 769如果union all太多的话,建议使用存储过程,建立一张临时 ... -
外键约束是否必要
2012-08-21 16:15 773外键约束是否必要 http://www.iteye.com/ ... -
MS SQL执行速度优化
2012-08-21 12:10 7361)大表变小表,小表再连接。(但是MS SQL 会自动分析执行 ...
相关推荐
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) =>...
WHERE coname LIKE ‘%Tech%’ AND indname = ‘Computing’; 注意AS关键字是任选的,然而我建议使用他从而更加清楚。而且,专栏可以使用格式alias = table_name.column_name来别名化,但表格不能这样来别名化。 自...
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 ...
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 * from student where id not between 2 and 5; --like 模糊查询 select * from student where name like '%a%'; select * from student where name like '%[a][o]%'; select * from student where name ...
1、关联查询 select students.name,class.name from class inner join students on class.id = students.classid; 2、left join 会将A中有的填充到左边,没有用null填充 3,rightjoin 会将b中有填充到右边,没有用...
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.. 4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、...
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.. 4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、...
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.. 4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、...
在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如...
在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如...
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where.. 4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) ...
68、select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal); --两张表的连接 此种写法比用where更清晰 69、select ename, dname, grade from emp e join dept d on(e.deptno =...
from student_A A full outer join student_B B on A.Uuid = B.Uuid; 1.6.4.3 结果 1.6.4.4 全外连接不支持(+)写法 1.6.5 (+) + 表示补充,即哪个表有加号,这个表就是匹配表。 1.7 运算符 1.7.1 比较 =、>,<,...
baseDisplayURL 否 String 是 显示图表的链接,链接的后面还要添加参数“ ?=filename=[ 临时图表文件的名称 ] ” controllerURL 否 String 是 链接到 JPivot Controller 的 URL ,该属性在一些复杂环境下...
要保持一致,当然这里的 resultType 还有另外单独的定义方式,后面再说。 2. Configuration.xml 里面 的<mapper resource="com/yihaomen/mybatis/model/User.xml"/>是包含要映射的类的xml配置文件。 3. 在User.xml ...
select * from STUDENT where STU_AGE between 13 and 15; (2)逻辑运算符 not ( ! ) 逻辑非 [sql] view plain copy select * from STUDENT where STU_AGE NOT IN(13,14,16); or ( || ) 逻辑或 OR关键字也...
级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on deletecascade 或on delete set null,前者是级联删除,后者是将从表的关联列的值设置为null。 create table student( id int...
sql="select * from 数据表 where 字段名 between 值1 and 值2" (2) 更新数据记录: sql="update 数据表 set 字段名=字段值 where 条件表达式" sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where...
日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...